From ac838f99a9c839ce4e36e5eae80f1100e2787dc5 Mon Sep 17 00:00:00 2001 From: Jagandeep Brar Date: Mon, 26 Sep 2022 11:44:07 -0400 Subject: [PATCH] refactor(settings): consolidate appearance, network, and localization pages --- assets/localization/en.json | 3 + lib/database/tables/bios.dart | 2 + lib/modules/settings/core/dialogs.dart | 37 ++++ .../settings/routes/configuration/route.dart | 20 +- .../configuration_appearance/route.dart | 104 --------- .../routes/configuration_general/route.dart | 201 ++++++++++++++++++ .../configuration_localization/route.dart | 71 ------- .../routes/configuration_network/route.dart | 61 ------ lib/router/routes/bios.dart | 5 +- lib/router/routes/settings.dart | 20 +- localization/settings/en.json | 3 + 11 files changed, 258 insertions(+), 269 deletions(-) delete mode 100644 lib/modules/settings/routes/configuration_appearance/route.dart create mode 100644 lib/modules/settings/routes/configuration_general/route.dart delete mode 100644 lib/modules/settings/routes/configuration_localization/route.dart delete mode 100644 lib/modules/settings/routes/configuration_network/route.dart diff --git a/assets/localization/en.json b/assets/localization/en.json index d2c259b1..0f29ef65 100644 --- a/assets/localization/en.json +++ b/assets/localization/en.json @@ -371,6 +371,7 @@ "settings.BasicAuthenticationHint1": "The username must not contain a colon", "settings.BasicAuthenticationHint2": "The password can contain a colon", "settings.BasicAuthenticationHint3": "The username and password are automatically converted to base64 encoding", + "settings.BootModule": "Boot Module", "settings.BroadcastAddress": "Broadcast Address", "settings.BroadcastAddressHint1": "This is the broadcast address of your local network", "settings.BroadcastAddressHint2": "Typically this is the IP address of your machine with the last octet set to 255", @@ -468,6 +469,8 @@ "settings.FilterCategory": "Filter Category", "settings.ForgotYourPassword": "Forgot Your Password?", "settings.FutureDays": "Future Days", + "settings.General": "General", + "settings.GeneralDescription": "Customize LunaSea", "settings.GitHubDescription": "View the Source Code", "settings.HeaderAdded": "Header Added", "settings.HeaderDeleted": "Header Deleted", diff --git a/lib/database/tables/bios.dart b/lib/database/tables/bios.dart index f6a75d80..98d24d3e 100644 --- a/lib/database/tables/bios.dart +++ b/lib/database/tables/bios.dart @@ -1,6 +1,8 @@ import 'package:lunasea/database/table.dart'; +import 'package:lunasea/modules.dart'; enum BIOSDatabase with LunaTableMixin { + BOOT_MODULE(LunaModule.DASHBOARD), SENTRY_LOGGING(true), FIRST_BOOT(true); diff --git a/lib/modules/settings/core/dialogs.dart b/lib/modules/settings/core/dialogs.dart index e5b62c02..fd91157a 100644 --- a/lib/modules/settings/core/dialogs.dart +++ b/lib/modules/settings/core/dialogs.dart @@ -2,7 +2,9 @@ import 'package:email_validator/email_validator.dart'; import 'package:flutter/material.dart'; import 'package:lunasea/database/tables/lunasea.dart'; import 'package:lunasea/firebase/types.dart'; +import 'package:lunasea/modules.dart'; import 'package:lunasea/modules/settings/core/types/header.dart'; +import 'package:lunasea/state/state.dart'; import 'package:lunasea/system/localization.dart'; import 'package:lunasea/vendor.dart'; import 'package:lunasea/widgets/ui.dart'; @@ -1353,4 +1355,39 @@ class SettingsDialogs { contentPadding: LunaDialog.textDialogContentPadding(), ); } + + Future> selectBootModule() async { + final context = LunaState.context; + bool _flag = false; + LunaModule? _module; + + void _setValues(LunaModule module) { + _flag = true; + _module = module; + Navigator.of(context).pop(); + } + + final modules = LunaModule.values.filter((m) { + if (m.homeRoute == null) return false; + if (!m.isEnabled) return false; + return true; + }).toList(); + + await LunaDialog.dialog( + context: context, + title: 'settings.BootModule'.tr(), + content: List.generate( + modules.length, + (index) => LunaDialog.tile( + text: modules[index].title, + icon: modules[index].icon, + iconColor: modules[index].color, + onTap: () => _setValues(modules[index]), + ), + ), + contentPadding: LunaDialog.listDialogContentPadding(), + ); + + return Tuple2(_flag, _module); + } } diff --git a/lib/modules/settings/routes/configuration/route.dart b/lib/modules/settings/routes/configuration/route.dart index d78a2bb3..87c56c6d 100644 --- a/lib/modules/settings/routes/configuration/route.dart +++ b/lib/modules/settings/routes/configuration/route.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; import 'package:lunasea/modules/settings.dart'; import 'package:lunasea/router/routes/settings.dart'; -import 'package:lunasea/system/network/network.dart'; import 'package:lunasea/system/quick_actions/quick_actions.dart'; import 'package:lunasea/utils/profile_tools.dart'; @@ -73,10 +72,10 @@ class _State extends State with LunaScrollControllerMixin { controller: scrollController, children: [ LunaBlock( - title: 'settings.Appearance'.tr(), - body: [TextSpan(text: 'settings.AppearanceDescription'.tr())], + title: 'settings.General'.tr(), + body: [TextSpan(text: 'settings.GeneralDescription'.tr())], trailing: const LunaIconButton(icon: Icons.brush_rounded), - onTap: SettingsRoutes.CONFIGURATION_APPEARANCE.go, + onTap: SettingsRoutes.CONFIGURATION_GENERAL.go, ), LunaBlock( title: 'settings.Drawer'.tr(), @@ -84,19 +83,6 @@ class _State extends State with LunaScrollControllerMixin { trailing: const LunaIconButton(icon: Icons.menu_rounded), onTap: SettingsRoutes.CONFIGURATION_DRAWER.go, ), - LunaBlock( - title: 'settings.Localization'.tr(), - body: [TextSpan(text: 'settings.LocalizationDescription'.tr())], - trailing: const LunaIconButton(icon: Icons.translate_rounded), - onTap: SettingsRoutes.CONFIGURATION_LOCALIZATION.go, - ), - if (LunaNetwork.isSupported) - LunaBlock( - title: 'settings.Network'.tr(), - body: [TextSpan(text: 'settings.NetworkDescription'.tr())], - trailing: const LunaIconButton(icon: Icons.network_check_rounded), - onTap: SettingsRoutes.CONFIGURATION_NETWORK.go, - ), if (LunaQuickActions.isSupported) LunaBlock( title: 'settings.QuickActions'.tr(), diff --git a/lib/modules/settings/routes/configuration_appearance/route.dart b/lib/modules/settings/routes/configuration_appearance/route.dart deleted file mode 100644 index d653ec8d..00000000 --- a/lib/modules/settings/routes/configuration_appearance/route.dart +++ /dev/null @@ -1,104 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:lunasea/core.dart'; -import 'package:lunasea/modules/settings.dart'; - -class ConfigurationAppearanceRoute extends StatefulWidget { - const ConfigurationAppearanceRoute({ - Key? key, - }) : super(key: key); - - @override - State createState() => _State(); -} - -class _State extends State - with LunaScrollControllerMixin { - final GlobalKey _scaffoldKey = GlobalKey(); - - @override - Widget build(BuildContext context) { - return LunaScaffold( - scaffoldKey: _scaffoldKey, - appBar: _appBar() as PreferredSizeWidget?, - body: _body(), - ); - } - - Widget _appBar() { - return LunaAppBar( - title: 'settings.Appearance'.tr(), - scrollControllers: [scrollController], - ); - } - - Widget _body() { - return LunaListView( - controller: scrollController, - children: [ - _amoledTheme(), - _amoledThemeBorders(), - _imageBackgroundOpacity(), - ], - ); - } - - Widget _amoledTheme() { - const _db = LunaSeaDatabase.THEME_AMOLED; - return _db.listenableBuilder( - builder: (context, _) => LunaBlock( - title: 'settings.AmoledTheme'.tr(), - body: [ - TextSpan(text: 'settings.AmoledThemeDescription'.tr()), - ], - trailing: LunaSwitch( - value: _db.read(), - onChanged: (value) { - _db.update(value); - LunaTheme().initialize(); - }, - ), - ), - ); - } - - Widget _amoledThemeBorders() { - return LunaBox.lunasea.listenableBuilder( - selectItems: [ - LunaSeaDatabase.THEME_AMOLED_BORDER, - LunaSeaDatabase.THEME_AMOLED, - ], - builder: (context, _) => LunaBlock( - title: 'settings.AmoledThemeBorders'.tr(), - body: [ - TextSpan(text: 'settings.AmoledThemeBordersDescription'.tr()), - ], - trailing: LunaSwitch( - value: LunaSeaDatabase.THEME_AMOLED_BORDER.read(), - onChanged: LunaSeaDatabase.THEME_AMOLED.read() - ? LunaSeaDatabase.THEME_AMOLED_BORDER.update - : null, - ), - ), - ); - } - - Widget _imageBackgroundOpacity() { - const _db = LunaSeaDatabase.THEME_IMAGE_BACKGROUND_OPACITY; - return _db.listenableBuilder( - builder: (context, _) => LunaBlock( - title: 'settings.BackgroundImageOpacity'.tr(), - body: [ - TextSpan( - text: _db.read() == 0 ? 'lunasea.Disabled'.tr() : '${_db.read()}%', - ), - ], - trailing: const LunaIconButton.arrow(), - onTap: () async { - Tuple2 result = - await SettingsDialogs().changeBackgroundImageOpacity(context); - if (result.item1) _db.update(result.item2); - }, - ), - ); - } -} diff --git a/lib/modules/settings/routes/configuration_general/route.dart b/lib/modules/settings/routes/configuration_general/route.dart new file mode 100644 index 00000000..8de81496 --- /dev/null +++ b/lib/modules/settings/routes/configuration_general/route.dart @@ -0,0 +1,201 @@ +import 'package:flutter/material.dart'; +import 'package:lunasea/core.dart'; +import 'package:lunasea/database/tables/bios.dart'; +import 'package:lunasea/modules/settings.dart'; +import 'package:lunasea/system/localization.dart'; +import 'package:lunasea/system/network/network.dart'; + +class ConfigurationGeneralRoute extends StatefulWidget { + const ConfigurationGeneralRoute({ + Key? key, + }) : super(key: key); + + @override + State createState() => _State(); +} + +class _State extends State + with LunaScrollControllerMixin { + final _scaffoldKey = GlobalKey(); + + @override + Widget build(BuildContext context) { + return LunaScaffold( + scaffoldKey: _scaffoldKey, + appBar: _appBar(), + body: _body(), + ); + } + + PreferredSizeWidget _appBar() { + return LunaAppBar( + title: 'settings.General'.tr(), + scrollControllers: [scrollController], + ); + } + + Widget _body() { + return LunaListView( + controller: scrollController, + children: [ + ..._appearance(), + ..._localization(), + if (LunaNetwork.isSupported) ..._network(), + ], + ); + } + + List _appearance() { + return [ + LunaHeader(text: 'settings.Appearance'.tr()), + _imageBackgroundOpacity(), + _amoledTheme(), + _amoledThemeBorders(), + ]; + } + + List _localization() { + return [ + LunaHeader(text: 'settings.Localization'.tr()), + _language(), + _use24HourTime(), + ]; + } + + List _modules() { + return [ + LunaHeader(text: 'dashboard.Modules'.tr()), + _bootModule(), + ]; + } + + List _network() { + return [ + LunaHeader(text: 'settings.Network'.tr()), + _useTLSValidation(), + ]; + } + + Widget _amoledTheme() { + const _db = LunaSeaDatabase.THEME_AMOLED; + return _db.listenableBuilder( + builder: (context, _) => LunaBlock( + title: 'settings.AmoledTheme'.tr(), + body: [ + TextSpan(text: 'settings.AmoledThemeDescription'.tr()), + ], + trailing: LunaSwitch( + value: _db.read(), + onChanged: (value) { + _db.update(value); + LunaTheme().initialize(); + }, + ), + ), + ); + } + + Widget _amoledThemeBorders() { + return LunaBox.lunasea.listenableBuilder( + selectItems: [ + LunaSeaDatabase.THEME_AMOLED_BORDER, + LunaSeaDatabase.THEME_AMOLED, + ], + builder: (context, _) => LunaBlock( + title: 'settings.AmoledThemeBorders'.tr(), + body: [ + TextSpan(text: 'settings.AmoledThemeBordersDescription'.tr()), + ], + trailing: LunaSwitch( + value: LunaSeaDatabase.THEME_AMOLED_BORDER.read(), + onChanged: LunaSeaDatabase.THEME_AMOLED.read() + ? LunaSeaDatabase.THEME_AMOLED_BORDER.update + : null, + ), + ), + ); + } + + Widget _imageBackgroundOpacity() { + const _db = LunaSeaDatabase.THEME_IMAGE_BACKGROUND_OPACITY; + return _db.listenableBuilder( + builder: (context, _) => LunaBlock( + title: 'settings.BackgroundImageOpacity'.tr(), + body: [ + TextSpan( + text: _db.read() == 0 ? 'lunasea.Disabled'.tr() : '${_db.read()}%', + ), + ], + trailing: const LunaIconButton.arrow(), + onTap: () async { + Tuple2 result = + await SettingsDialogs().changeBackgroundImageOpacity(context); + if (result.item1) _db.update(result.item2); + }, + ), + ); + } + + Widget _useTLSValidation() { + const _db = LunaSeaDatabase.NETWORKING_TLS_VALIDATION; + return _db.listenableBuilder( + builder: (context, _) => LunaBlock( + title: 'settings.TLSCertificateValidation'.tr(), + body: [ + TextSpan(text: 'settings.TLSCertificateValidationDescription'.tr()), + ], + trailing: LunaSwitch( + value: _db.read(), + onChanged: (data) { + _db.update(data); + if (LunaNetwork.isSupported) LunaNetwork().initialize(); + }, + ), + ), + ); + } + + Widget _language() { + String? _language = LunaLanguage.fromLocale(context.locale)?.name; + return LunaBlock( + title: 'settings.Language'.tr(), + body: [TextSpan(text: _language ?? LunaUI.TEXT_EMDASH)], + trailing: const LunaIconButton(icon: Icons.language_rounded), + onTap: () async { + final result = await SettingsDialogs().changeLanguage(context); + if (result.item1) result.item2!.use(); + }, + ); + } + + Widget _use24HourTime() { + const _db = LunaSeaDatabase.USE_24_HOUR_TIME; + return _db.listenableBuilder( + builder: (context, _) => LunaBlock( + title: 'settings.Use24HourTime'.tr(), + body: [TextSpan(text: 'settings.Use24HourTimeDescription'.tr())], + trailing: LunaSwitch( + value: _db.read(), + onChanged: _db.update, + ), + ), + ); + } + + Widget _bootModule() { + const _db = BIOSDatabase.BOOT_MODULE; + return _db.listenableBuilder( + builder: (context, _) => LunaBlock( + title: 'settings.BootModule'.tr(), + body: [TextSpan(text: _db.read().title)], + trailing: LunaIconButton(icon: _db.read().icon), + onTap: () async { + final result = await SettingsDialogs().selectBootModule(); + if (result.item1) { + BIOSDatabase.BOOT_MODULE.update(result.item2!); + } + }, + ), + ); + } +} diff --git a/lib/modules/settings/routes/configuration_localization/route.dart b/lib/modules/settings/routes/configuration_localization/route.dart deleted file mode 100644 index 0c5fa472..00000000 --- a/lib/modules/settings/routes/configuration_localization/route.dart +++ /dev/null @@ -1,71 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:lunasea/core.dart'; -import 'package:lunasea/modules/settings.dart'; -import 'package:lunasea/system/localization.dart'; - -class ConfigurationLocalizationRoute extends StatefulWidget { - const ConfigurationLocalizationRoute({ - Key? key, - }) : super(key: key); - - @override - State createState() => _State(); -} - -class _State extends State - with LunaScrollControllerMixin { - final GlobalKey _scaffoldKey = GlobalKey(); - - @override - Widget build(BuildContext context) { - return LunaScaffold( - scaffoldKey: _scaffoldKey, - appBar: _appBar() as PreferredSizeWidget?, - body: _body(), - ); - } - - Widget _appBar() { - return LunaAppBar( - title: 'settings.Localization'.tr(), - scrollControllers: [scrollController], - ); - } - - Widget _body() { - return LunaListView( - controller: scrollController, - children: [ - _language(), - _use24HourTime(), - ], - ); - } - - Widget _language() { - String? _language = LunaLanguage.fromLocale(context.locale)?.name; - return LunaBlock( - title: 'settings.Language'.tr(), - body: [TextSpan(text: _language ?? LunaUI.TEXT_EMDASH)], - trailing: const LunaIconButton(icon: Icons.language_rounded), - onTap: () async { - final result = await SettingsDialogs().changeLanguage(context); - if (result.item1) result.item2!.use(); - }, - ); - } - - Widget _use24HourTime() { - const _db = LunaSeaDatabase.USE_24_HOUR_TIME; - return _db.listenableBuilder( - builder: (context, _) => LunaBlock( - title: 'settings.Use24HourTime'.tr(), - body: [TextSpan(text: 'settings.Use24HourTimeDescription'.tr())], - trailing: LunaSwitch( - value: _db.read(), - onChanged: _db.update, - ), - ), - ); - } -} diff --git a/lib/modules/settings/routes/configuration_network/route.dart b/lib/modules/settings/routes/configuration_network/route.dart deleted file mode 100644 index c511cf79..00000000 --- a/lib/modules/settings/routes/configuration_network/route.dart +++ /dev/null @@ -1,61 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:lunasea/core.dart'; -import 'package:lunasea/system/network/network.dart'; - -class ConfigurationNetworkRoute extends StatefulWidget { - const ConfigurationNetworkRoute({ - Key? key, - }) : super(key: key); - - @override - State createState() => _State(); -} - -class _State extends State - with LunaScrollControllerMixin { - final GlobalKey _scaffoldKey = GlobalKey(); - - @override - Widget build(BuildContext context) { - return LunaScaffold( - scaffoldKey: _scaffoldKey, - appBar: _appBar() as PreferredSizeWidget?, - body: _body(), - ); - } - - Widget _appBar() { - return LunaAppBar( - title: 'settings.Network'.tr(), - scrollControllers: [scrollController], - ); - } - - Widget _body() { - return LunaListView( - controller: scrollController, - children: [ - _useTLSValidation(), - ], - ); - } - - Widget _useTLSValidation() { - const _db = LunaSeaDatabase.NETWORKING_TLS_VALIDATION; - return _db.listenableBuilder( - builder: (context, _) => LunaBlock( - title: 'settings.TLSCertificateValidation'.tr(), - body: [ - TextSpan(text: 'settings.TLSCertificateValidationDescription'.tr()), - ], - trailing: LunaSwitch( - value: _db.read(), - onChanged: (data) { - _db.update(data); - if (LunaNetwork.isSupported) LunaNetwork().initialize(); - }, - ), - ), - ); - } -} diff --git a/lib/router/routes/bios.dart b/lib/router/routes/bios.dart index 605ac018..7722ed45 100644 --- a/lib/router/routes/bios.dart +++ b/lib/router/routes/bios.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:lunasea/database/tables/bios.dart'; import 'package:lunasea/modules.dart'; import 'package:lunasea/router/routes.dart'; import 'package:lunasea/router/routes/dashboard.dart'; @@ -25,7 +26,9 @@ enum BIOSRoutes with LunaRoutesMixin { case BIOSRoutes.HOME: return redirect(redirect: (context, _) { LunaOS().boot(context); - return DashboardRoutes.HOME.path; + + final fallback = DashboardRoutes.HOME.path; + return BIOSDatabase.BOOT_MODULE.read().homeRoute ?? fallback; }); } } diff --git a/lib/router/routes/settings.dart b/lib/router/routes/settings.dart index 416eb50b..902ae532 100644 --- a/lib/router/routes/settings.dart +++ b/lib/router/routes/settings.dart @@ -5,7 +5,7 @@ import 'package:lunasea/modules/settings/routes/account/pages/password_reset.dar import 'package:lunasea/modules/settings/routes/account/pages/settings.dart'; import 'package:lunasea/modules/settings/routes/account/route.dart'; import 'package:lunasea/modules/settings/routes/configuration/route.dart'; -import 'package:lunasea/modules/settings/routes/configuration_appearance/route.dart'; +import 'package:lunasea/modules/settings/routes/configuration_general/route.dart'; import 'package:lunasea/modules/settings/routes/configuration_dashboard/pages/calendar_settings.dart'; import 'package:lunasea/modules/settings/routes/configuration_dashboard/pages/default_pages.dart'; import 'package:lunasea/modules/settings/routes/configuration_dashboard/route.dart'; @@ -17,8 +17,6 @@ import 'package:lunasea/modules/settings/routes/configuration_lidarr/pages/conne import 'package:lunasea/modules/settings/routes/configuration_lidarr/pages/default_pages.dart'; import 'package:lunasea/modules/settings/routes/configuration_lidarr/pages/headers.dart'; import 'package:lunasea/modules/settings/routes/configuration_lidarr/route.dart'; -import 'package:lunasea/modules/settings/routes/configuration_localization/route.dart'; -import 'package:lunasea/modules/settings/routes/configuration_network/route.dart'; import 'package:lunasea/modules/settings/routes/configuration_nzbget/pages/connection_details.dart'; import 'package:lunasea/modules/settings/routes/configuration_nzbget/pages/default_pages.dart'; import 'package:lunasea/modules/settings/routes/configuration_nzbget/pages/headers.dart'; @@ -72,7 +70,7 @@ enum SettingsRoutes with LunaRoutesMixin { ACCOUNT_PASSWORD_RESET('password_reset'), ACCOUNT_SETTINGS('settings'), CONFIGURATION('configuration'), - CONFIGURATION_APPEARANCE('appearance'), + CONFIGURATION_GENERAL('general'), CONFIGURATION_DASHBOARD('dashboard'), CONFIGURATION_DASHBOARD_CALENDAR('calendar'), CONFIGURATION_DASHBOARD_DEFAULT_PAGES('default_pages'), @@ -84,8 +82,6 @@ enum SettingsRoutes with LunaRoutesMixin { CONFIGURATION_LIDARR_CONNECTION_DETAILS('connection_details'), CONFIGURATION_LIDARR_CONNECTION_DETAILS_HEADERS('headers'), CONFIGURATION_LIDARR_DEFAULT_PAGES('default_pages'), - CONFIGURATION_LOCALIZATION('localization'), - CONFIGURATION_NETWORK('network'), CONFIGURATION_NZBGET('nzbget'), CONFIGURATION_NZBGET_CONNECTION_DETAILS('connection_details'), CONFIGURATION_NZBGET_CONNECTION_DETAILS_HEADERS('headers'), @@ -153,8 +149,8 @@ enum SettingsRoutes with LunaRoutesMixin { return route(widget: const AccountSettingsRoute()); case SettingsRoutes.CONFIGURATION: return route(widget: const ConfigurationRoute()); - case SettingsRoutes.CONFIGURATION_APPEARANCE: - return route(widget: const ConfigurationAppearanceRoute()); + case SettingsRoutes.CONFIGURATION_GENERAL: + return route(widget: const ConfigurationGeneralRoute()); case SettingsRoutes.CONFIGURATION_DASHBOARD: return route(widget: const ConfigurationDashboardRoute()); case SettingsRoutes.CONFIGURATION_DASHBOARD_CALENDAR: @@ -182,10 +178,6 @@ enum SettingsRoutes with LunaRoutesMixin { ); case SettingsRoutes.CONFIGURATION_LIDARR_DEFAULT_PAGES: return route(widget: const ConfigurationLidarrDefaultPagesRoute()); - case SettingsRoutes.CONFIGURATION_LOCALIZATION: - return route(widget: const ConfigurationLocalizationRoute()); - case SettingsRoutes.CONFIGURATION_NETWORK: - return route(widget: const ConfigurationNetworkRoute()); case SettingsRoutes.CONFIGURATION_NZBGET: return route(widget: const ConfigurationNZBGetRoute()); case SettingsRoutes.CONFIGURATION_NZBGET_CONNECTION_DETAILS: @@ -324,13 +316,11 @@ enum SettingsRoutes with LunaRoutesMixin { ]; case SettingsRoutes.CONFIGURATION: return [ - SettingsRoutes.CONFIGURATION_APPEARANCE.routes, + SettingsRoutes.CONFIGURATION_GENERAL.routes, SettingsRoutes.CONFIGURATION_DASHBOARD.routes, SettingsRoutes.CONFIGURATION_DRAWER.routes, SettingsRoutes.CONFIGURATION_EXTERNAL_MODULES.routes, SettingsRoutes.CONFIGURATION_LIDARR.routes, - SettingsRoutes.CONFIGURATION_LOCALIZATION.routes, - SettingsRoutes.CONFIGURATION_NETWORK.routes, SettingsRoutes.CONFIGURATION_NZBGET.routes, SettingsRoutes.CONFIGURATION_OVERSEERR.routes, SettingsRoutes.CONFIGURATION_QUICK_ACTIONS.routes, diff --git a/localization/settings/en.json b/localization/settings/en.json index b5e83557..36a8729b 100644 --- a/localization/settings/en.json +++ b/localization/settings/en.json @@ -43,6 +43,7 @@ "settings.BasicAuthenticationHint1": "The username must not contain a colon", "settings.BasicAuthenticationHint2": "The password can contain a colon", "settings.BasicAuthenticationHint3": "The username and password are automatically converted to base64 encoding", + "settings.BootModule": "Boot Module", "settings.BroadcastAddress": "Broadcast Address", "settings.BroadcastAddressHint1": "This is the broadcast address of your local network", "settings.BroadcastAddressHint2": "Typically this is the IP address of your machine with the last octet set to 255", @@ -140,6 +141,8 @@ "settings.FilterCategory": "Filter Category", "settings.ForgotYourPassword": "Forgot Your Password?", "settings.FutureDays": "Future Days", + "settings.General": "General", + "settings.GeneralDescription": "Customize LunaSea", "settings.GitHubDescription": "View the Source Code", "settings.HeaderAdded": "Header Added", "settings.HeaderDeleted": "Header Deleted",