diff --git a/assets/translations/en.json b/assets/translations/en.json index 501efaff..6a3317a1 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -192,8 +192,14 @@ "in_menu": "Server is not set up yet. Please finish setup using setup wizard for further work." }, "services": { - "_comment": "Вкладка сервисы", + "_comment": "Services", "title": "Your personal, private and independent services.", + "service_page": { + "restart": "Restart service", + "disable": "Disable service", + "enable": "Enable service", + "move": "Move to another volume" + }, "mail": { "title": "E-Mail", "subtitle": "E-Mail for company and family.", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 1ac780a9..abb9a2d6 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -194,6 +194,12 @@ "services": { "_comment": "Вкладка сервисы", "title": "Ваши личные, приватные и независимые сервисы:", + "service_page": { + "restart": "Перезапустить сервис", + "disable": "Выключить сервис", + "enable": "Включить сервис", + "move": "Переместить на другой диск" + }, "mail": { "title": "Почта", "subtitle": "Электронная почта для семьи или компании.", diff --git a/lib/logic/cubit/services/services_cubit.dart b/lib/logic/cubit/services/services_cubit.dart index 089d9638..c423fd9f 100644 --- a/lib/logic/cubit/services/services_cubit.dart +++ b/lib/logic/cubit/services/services_cubit.dart @@ -37,6 +37,10 @@ class ServicesCubit extends ServerInstallationDependendCubit { } } + Future restart(final String serviceId) async { + await api.restartService(serviceId); + } + @override void clear() async { emit(const ServicesState.empty()); diff --git a/lib/ui/pages/services/service_page.dart b/lib/ui/pages/services/service_page.dart index 75e7c7cf..d3dad443 100644 --- a/lib/ui/pages/services/service_page.dart +++ b/lib/ui/pages/services/service_page.dart @@ -1,7 +1,10 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; -import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart'; +import 'package:selfprivacy/logic/common_enum/common_enum.dart'; +import 'package:selfprivacy/logic/cubit/client_jobs/client_jobs_cubit.dart'; import 'package:selfprivacy/logic/cubit/services/services_cubit.dart'; +import 'package:selfprivacy/logic/models/job.dart'; import 'package:selfprivacy/logic/models/service.dart'; import 'package:selfprivacy/ui/components/brand_cards/brand_cards.dart'; import 'package:selfprivacy/ui/components/brand_hero_screen/brand_hero_screen.dart'; @@ -32,6 +35,10 @@ class _ServicePageState extends State { ], ); } + + final bool serviceDisabled = service.status == ServiceStatus.inactive || + service.status == ServiceStatus.off; + return BrandHeroScreen( hasBackButton: true, children: [ @@ -73,19 +80,30 @@ class _ServicePageState extends State { const SizedBox(height: 8), ListTile( iconColor: Theme.of(context).colorScheme.onBackground, - onTap: () => {}, + onTap: () => { + context.read().restart(service.id), + }, leading: const Icon(Icons.restart_alt_outlined), title: Text( - 'Restart service', + 'services.service_page.restart'.tr(), style: Theme.of(context).textTheme.titleMedium, ), ), ListTile( iconColor: Theme.of(context).colorScheme.onBackground, - onTap: () => {}, + onTap: () => { + context.read().createOrRemoveServiceToggleJob( + ServiceToggleJob( + type: _idToLegacyType(service.id), + needToTurnOn: serviceDisabled, + ), + ), + }, leading: const Icon(Icons.power_settings_new), title: Text( - 'Disable service', + serviceDisabled + ? 'services.service_page.enable'.tr() + : 'services.service_page.disable'.tr(), style: Theme.of(context).textTheme.titleMedium, ), ), @@ -95,13 +113,35 @@ class _ServicePageState extends State { onTap: () => {}, leading: const Icon(Icons.drive_file_move_outlined), title: Text( - 'Move to another volume', + 'services.service_page.move'.tr(), style: Theme.of(context).textTheme.titleMedium, ), ), ], ); } + +// TODO: Get rid as soon as possible + ServiceTypes _idToLegacyType(final String serviceId) { + switch (serviceId) { + case 'mailserver': + return ServiceTypes.mailserver; + case 'jitsi': + return ServiceTypes.jitsi; + case 'bitwarden': + return ServiceTypes.bitwarden; + case 'nextcloud': + return ServiceTypes.nextcloud; + case 'pleroma': + return ServiceTypes.pleroma; + case 'gitea': + return ServiceTypes.gitea; + case 'ocserv': + return ServiceTypes.ocserv; + default: + throw Exception('wrong state'); + } + } } class ServiceStatusCard extends StatelessWidget {