diff --git a/assets/translations/en.json b/assets/translations/en.json index 6a3317a1..61d60767 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -101,6 +101,13 @@ "month": "Month", "day": "Day", "hour": "Hour" + }, + "settings": { + "allow_autoupgrade": "Allow auto-upgrade", + "allow_autoupgrade_hint": "Allow automatic packages upgrades on server", + "reboot_after_upgrade": "Reboot after upgrade", + "reboot_after_upgrade_hint": "Reboot without prompt after applying changes on server", + "server_timezone": "Server timezone" } }, "domain": { diff --git a/assets/translations/ru.json b/assets/translations/ru.json index abb9a2d6..9040ed80 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -101,6 +101,13 @@ "month": "Месяц", "day": "День", "hour": "Час" + }, + "settings": { + "allow_autoupgrade": "Разрешить авто-обноления", + "allow_autoupgrade_hint": "Разрешить автоматичесую установку обновлений на сервер", + "reboot_after_upgrade": "Перезагружать после обновлений", + "reboot_after_upgrade_hint": "Автоматически перезагружать сервер после применения обновлений", + "server_timezone": "Часовой пояс сервера" } }, "domain": { diff --git a/lib/logic/api_maps/graphql_maps/server_api/server.dart b/lib/logic/api_maps/graphql_maps/server_api/server.dart index 56b92371..3cb39d89 100644 --- a/lib/logic/api_maps/graphql_maps/server_api/server.dart +++ b/lib/logic/api_maps/graphql_maps/server_api/server.dart @@ -126,4 +126,26 @@ class ServerApi extends ApiMap print(e); } } + + Future setAutoUpgradeSettings( + final bool allowReboot, + final bool enableAutoUpgrade, + ) async { + try { + final GraphQLClient client = await getClient(); + final input = Input$AutoUpgradeSettingsInput( + allowReboot: allowReboot, + enableAutoUpgrade: enableAutoUpgrade, + ); + final variables = Variables$Mutation$ChangeAutoUpgradeSettings( + settings: input, + ); + final mutation = Options$Mutation$ChangeAutoUpgradeSettings( + variables: variables, + ); + await client.mutate$ChangeAutoUpgradeSettings(mutation); + } catch (e) { + print(e); + } + } } diff --git a/lib/logic/api_maps/rest_maps/server.dart b/lib/logic/api_maps/rest_maps/server.dart index edffda09..3660d499 100644 --- a/lib/logic/api_maps/rest_maps/server.dart +++ b/lib/logic/api_maps/rest_maps/server.dart @@ -603,13 +603,20 @@ class ServerApi extends ApiMap { } Future getServerTimezone() async { - // I am not sure how to initialize TimeZoneSettings with default value... + TimeZoneSettings settings = TimeZoneSettings(); final Dio client = await getClient(); - final Response response = - await client.get('/system/configuration/timezone'); - close(client); + try { + final Response response = await client.get( + '/system/configuration/timezone', + ); + settings = TimeZoneSettings.fromString(response.data); + } catch (e) { + print(e); + } finally { + close(client); + } - return TimeZoneSettings.fromString(response.data); + return settings; } Future updateServerTimezone(final TimeZoneSettings settings) async { diff --git a/lib/logic/cubit/server_detailed_info/server_detailed_info_repository.dart b/lib/logic/cubit/server_detailed_info/server_detailed_info_repository.dart index e5858d2d..4cbe3e87 100644 --- a/lib/logic/cubit/server_detailed_info/server_detailed_info_repository.dart +++ b/lib/logic/cubit/server_detailed_info/server_detailed_info_repository.dart @@ -5,17 +5,14 @@ import 'package:selfprivacy/logic/models/json/hetzner_server_info.dart'; import 'package:selfprivacy/logic/models/timezone_settings.dart'; class ServerDetailsRepository { - HetznerApi hetznerAPi = HetznerApi(); - ServerApi selfprivacyServer = ServerApi(); + HetznerApi hetzner = HetznerApi(); + ServerApi server = ServerApi(); - Future load() async { - print('load'); - return ServerDetailsRepositoryDto( - autoUpgradeSettings: await selfprivacyServer.getAutoUpgradeSettings(), - hetznerServerInfo: await hetznerAPi.getInfo(), - serverTimezone: await selfprivacyServer.getServerTimezone(), - ); - } + Future load() async => ServerDetailsRepositoryDto( + autoUpgradeSettings: await server.getAutoUpgradeSettings(), + hetznerServerInfo: await hetzner.getInfo(), + serverTimezone: await server.getServerTimezone(), + ); } class ServerDetailsRepositoryDto { diff --git a/lib/logic/models/timezone_settings.dart b/lib/logic/models/timezone_settings.dart index 22c84b44..4b4334af 100644 --- a/lib/logic/models/timezone_settings.dart +++ b/lib/logic/models/timezone_settings.dart @@ -3,13 +3,16 @@ import 'package:timezone/timezone.dart'; class TimeZoneSettings { factory TimeZoneSettings.fromString(final String string) { final Location location = timeZoneDatabase.locations[string]!; - return TimeZoneSettings(location); + return TimeZoneSettings(timezone: location); } - TimeZoneSettings(this.timezone); - final Location timezone; + TimeZoneSettings({this.timezone}); + final Location? timezone; Map toJson() => { - 'timezone': timezone.name, + 'timezone': timezone?.name ?? 'Unknown', }; + + @override + String toString() => timezone?.name ?? 'Unknown'; } diff --git a/lib/ui/pages/server_details/server_settings.dart b/lib/ui/pages/server_details/server_settings.dart index 18d425e6..418014c2 100644 --- a/lib/ui/pages/server_details/server_settings.dart +++ b/lib/ui/pages/server_details/server_settings.dart @@ -11,7 +11,7 @@ class _ServerSettings extends StatelessWidget { Widget build(final BuildContext context) { final serverDetailsState = context.watch().state; if (serverDetailsState is ServerDetailsNotReady) { - return const Text('not ready'); + return Text('basis.loading'.tr()); } else if (serverDetailsState is! Loaded) { return BrandLoader.horizontal(); } @@ -38,19 +38,17 @@ class _ServerSettings extends StatelessWidget { SwitcherBlock( onChange: (final _) {}, isActive: serverDetailsState.autoUpgradeSettings.enable, - child: const _TextColumn( - title: 'Allow Auto-upgrade', - value: 'Wether to allow automatic packages upgrades', - hasWarning: false, + child: _TextColumn( + title: 'providers.server.settings.allow_autoupgrade'.tr(), + value: 'providers.server.settings.allow_autoupgrade_hint'.tr(), ), ), SwitcherBlock( onChange: (final _) {}, isActive: serverDetailsState.autoUpgradeSettings.allowReboot, - child: const _TextColumn( - title: 'Reboot after upgrade', - value: 'Reboot without prompt after applying updates', - hasWarning: false, + child: _TextColumn( + title: 'providers.server.settings.reboot_after_upgrade'.tr(), + value: 'providers.server.settings.reboot_after_upgrade_hint'.tr(), ), ), _Button( @@ -58,9 +56,8 @@ class _ServerSettings extends StatelessWidget { Navigator.of(context).push(materialRoute(const SelectTimezone())); }, child: _TextColumn( - title: 'Server Timezone', - value: serverDetailsState.serverTimezone.timezone.name, - hasWarning: false, + title: 'providers.server.settings.server_timezone'.tr(), + value: serverDetailsState.serverTimezone.toString(), ), ), ], @@ -108,16 +105,12 @@ class _TextColumn extends StatelessWidget { children: [ BrandText.body1( title, - style: TextStyle(color: hasWarning ? BrandColors.warning : null), + style: Theme.of(context).textTheme.bodyLarge, ), const SizedBox(height: 5), BrandText.body1( value, - style: TextStyle( - fontSize: 13, - height: 1.53, - color: hasWarning ? BrandColors.warning : BrandColors.gray1, - ), + style: Theme.of(context).textTheme.bodyMedium, ), ], );