diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n.dart b/.dart_tool/flutter_gen/gen_l10n/l10n.dart index d8bb4bb5..5589a5ae 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n.dart @@ -312,6 +312,12 @@ abstract class S { /// **'Delete'** String get delete; + /// No description provided for @deleteAllServers. + /// + /// In en, this message translates to: + /// **'Delete all servers'** + String get deleteAllServers; + /// No description provided for @disabled. /// /// In en, this message translates to: diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart index 7f1a2a52..a139cfd9 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart @@ -112,6 +112,9 @@ class SDe extends S { @override String get delete => 'Löschen'; + @override + String get deleteAllServers => 'Alle Server löschen'; + @override String get disabled => 'Behinderte'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart index bdf3a65d..331264d6 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart @@ -112,6 +112,9 @@ class SEn extends S { @override String get delete => 'Delete'; + @override + String get deleteAllServers => 'Delete all servers'; + @override String get disabled => 'Disabled'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart index 31efeee3..c41b7ff4 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart @@ -112,6 +112,9 @@ class SZh extends S { @override String get delete => '删除'; + @override + String get deleteAllServers => '删除所有服务器'; + @override String get disabled => '已禁用'; @@ -782,6 +785,9 @@ class SZhTw extends SZh { @override String get delete => '刪除'; + @override + String get deleteAllServers => '刪除所有服務器'; + @override String get disabled => '已禁用'; diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index f1d075c0..19d4820e 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -470,7 +470,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 387; + CURRENT_PROJECT_VERSION = 388; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -478,7 +478,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.387; + MARKETING_VERSION = 1.0.388; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -602,7 +602,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 387; + CURRENT_PROJECT_VERSION = 388; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -610,7 +610,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.387; + MARKETING_VERSION = 1.0.388; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -628,7 +628,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 387; + CURRENT_PROJECT_VERSION = 388; DEVELOPMENT_TEAM = BA88US33G6; ENABLE_BITCODE = NO; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; @@ -636,7 +636,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.387; + MARKETING_VERSION = 1.0.388; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -657,7 +657,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 387; + CURRENT_PROJECT_VERSION = 388; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -670,7 +670,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.387; + MARKETING_VERSION = 1.0.388; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; @@ -696,7 +696,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 387; + CURRENT_PROJECT_VERSION = 388; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -709,7 +709,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.387; + MARKETING_VERSION = 1.0.388; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -732,7 +732,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 387; + CURRENT_PROJECT_VERSION = 388; DEVELOPMENT_TEAM = BA88US33G6; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; @@ -745,7 +745,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.387; + MARKETING_VERSION = 1.0.388; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/lib/data/model/server/server_private_info.dart b/lib/data/model/server/server_private_info.dart index 54232bf1..a6b44268 100644 --- a/lib/data/model/server/server_private_info.dart +++ b/lib/data/model/server/server_private_info.dart @@ -29,7 +29,7 @@ class ServerPrivateInfo { required this.pwd, this.pubKeyId, this.tags, - }) : id = '$name<$user@$ip:$port>'; + }) : id = '$user@$ip:$port'; ServerPrivateInfo.fromJson(Map json) { name = json["name"].toString(); diff --git a/lib/data/provider/server.dart b/lib/data/provider/server.dart index eb33d151..b6f3db6e 100644 --- a/lib/data/provider/server.dart +++ b/lib/data/provider/server.dart @@ -167,6 +167,15 @@ class ServerProvider extends BusyProvider { _serverStore.delete(id); } + void deleteAll() { + _servers.clear(); + _serverOrder.clear(); + _settingStore.serverOrder.put(_serverOrder); + _updateTags(); + notifyListeners(); + _serverStore.deleteAll(); + } + Future updateServer( ServerPrivateInfo old, ServerPrivateInfo newSpi, diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index 14a2775f..eeeb3dc5 100644 --- a/lib/data/res/build_data.dart +++ b/lib/data/res/build_data.dart @@ -2,8 +2,8 @@ class BuildData { static const String name = "ServerBox"; - static const int build = 387; + static const int build = 388; static const String engine = "3.10.6"; - static const String buildAt = "2023-07-21 18:06:24.239059"; - static const int modifications = 2; + static const String buildAt = "2023-07-27 13:03:33.193528"; + static const int modifications = 16; } diff --git a/lib/data/store/server.dart b/lib/data/store/server.dart index 028adb21..f2ddec39 100644 --- a/lib/data/store/server.dart +++ b/lib/data/store/server.dart @@ -22,6 +22,10 @@ class ServerStore extends PersistentStore { box.delete(id); } + void deleteAll() { + box.clear(); + } + void update(ServerPrivateInfo old, ServerPrivateInfo newInfo) { if (!have(old)) { throw Exception('Old spi: $old not found'); diff --git a/lib/data/store/setting.dart b/lib/data/store/setting.dart index e88b43db..f18c6e1e 100644 --- a/lib/data/store/setting.dart +++ b/lib/data/store/setting.dart @@ -95,7 +95,8 @@ class SettingStore extends PersistentStore { StoreProperty get netViewType => property('netViewType', defaultValue: NetViewType.speed); - + // Only valid on iOS - StoreProperty get autoUpdateHomeWidget => property('autoUpdateHomeWidget', defaultValue: isIOS); + StoreProperty get autoUpdateHomeWidget => + property('autoUpdateHomeWidget', defaultValue: isIOS); } diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 2e0a3679..a18cf3fe 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -36,6 +36,7 @@ "debug": "Debug", "decode": "Decode", "delete": "Löschen", + "deleteAllServers": "Alle Server löschen", "disabled": "Behinderte", "disconnected": "Disconnected", "diskIgnorePath": "Pfad für Datenträger ignorieren", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 931caa75..f833d41d 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -36,6 +36,7 @@ "debug": "Debug", "decode": "Decode", "delete": "Delete", + "deleteAllServers": "Delete all servers", "disabled": "Disabled", "disconnected": "Disconnected", "diskIgnorePath": "Ignore path for disk", diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 1995c2ca..2a0c5927 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -36,6 +36,7 @@ "debug": "调试", "decode": "解码", "delete": "删除", + "deleteAllServers": "删除所有服务器", "disabled": "已禁用", "disconnected": "连接断开", "diskIgnorePath": "忽略的磁盘路径", diff --git a/lib/l10n/app_zh_tw.arb b/lib/l10n/app_zh_tw.arb index 9308d78f..44a5ee86 100644 --- a/lib/l10n/app_zh_tw.arb +++ b/lib/l10n/app_zh_tw.arb @@ -36,6 +36,7 @@ "debug": "調試", "decode": "解碼", "delete": "刪除", + "deleteAllServers": "刪除所有服務器", "disabled": "已禁用", "disconnected": "連接斷開", "diskIgnorePath": "忽略的磁盤路徑", diff --git a/lib/view/page/setting.dart b/lib/view/page/setting.dart index 0ce1330b..ad96fd21 100644 --- a/lib/view/page/setting.dart +++ b/lib/view/page/setting.dart @@ -109,14 +109,14 @@ class _SettingPageState extends State { children: [ _buildTitle('App'), _buildApp(), - _buildTitle(_s.fullScreen), - _buildFullScreen(), _buildTitle(_s.server), _buildServer(), _buildTitle('SSH'), _buildSSH(), _buildTitle(_s.editor), _buildEditor(), + _buildTitle(_s.fullScreen), + _buildFullScreen(), const SizedBox(height: 37), ], ), @@ -173,6 +173,7 @@ class _SettingPageState extends State { _buildUpdateInterval(), _buildMaxRetry(), _buildDiskIgnorePath(), + _buildDeleteAllServers(), ].map((e) => RoundRectCard(e)).toList(), ); } @@ -801,6 +802,7 @@ class _SettingPageState extends State { 'none', ]; if (names.length != TextInputType.values.length) { + // This notify me to update the code throw Exception('names.length != TextInputType.values.length'); } final items = TextInputType.values.map( @@ -937,4 +939,22 @@ class _SettingPageState extends State { trailing: buildSwitch(context, _setting.autoUpdateHomeWidget), ); } + + Widget _buildDeleteAllServers() { + return ListTile( + title: Text(_s.deleteAllServers), + trailing: const Icon(Icons.delete_forever), + onTap: () => showRoundDialog( + context: context, + title: Text(_s.attention), + child: Text(_s.sureDelete(_s.all)), + actions: [ + TextButton( + onPressed: () => _serverProvider.deleteAll(), + child: Text(_s.ok), + ) + ], + ), + ); + } } diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index cb2c2ba9..8740a389 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -475,9 +475,9 @@ baseConfigurationReference = C1C758C41C4E208965A68933 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 387; + CURRENT_PROJECT_VERSION = 388; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.387; + MARKETING_VERSION = 1.0.388; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -490,9 +490,9 @@ baseConfigurationReference = 15AF97DF993E8968098D6EBE /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 387; + CURRENT_PROJECT_VERSION = 388; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.387; + MARKETING_VERSION = 1.0.388; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -505,9 +505,9 @@ baseConfigurationReference = 7CFA7DE7FABA75685DFB6948 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 387; + CURRENT_PROJECT_VERSION = 388; GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0.387; + MARKETING_VERSION = 1.0.388; PRODUCT_BUNDLE_IDENTIFIER = tech.lolli.serverBox.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0;