diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n.dart b/.dart_tool/flutter_gen/gen_l10n/l10n.dart index c68d32f7..0820811e 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n.dart @@ -808,6 +808,18 @@ abstract class S { /// **'Keep app foreground!'** String get keepForeground; + /// No description provided for @keepStatusWhenErr. + /// + /// In en, this message translates to: + /// **'Preserve the last server state'** + String get keepStatusWhenErr; + + /// No description provided for @keepStatusWhenErrTip. + /// + /// In en, this message translates to: + /// **'Only in the event of an error during script execution'** + String get keepStatusWhenErrTip; + /// No description provided for @keyAuth. /// /// 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 42ade39f..9de9a06d 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_de.dart @@ -378,6 +378,12 @@ class SDe extends S { @override String get keepForeground => 'Stelle sicher, dass die App geöffnet bleibt.'; + @override + String get keepStatusWhenErr => 'Den letzten Serverstatus beibehalten'; + + @override + String get keepStatusWhenErrTip => 'Nur im Fehlerfall während der Ausführung des Skripts'; + @override String get keyAuth => 'Schlüsselauthentifzierung'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart index b231275f..6ab31f4a 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart @@ -378,6 +378,12 @@ class SEn extends S { @override String get keepForeground => 'Keep app foreground!'; + @override + String get keepStatusWhenErr => 'Preserve the last server state'; + + @override + String get keepStatusWhenErrTip => 'Only in the event of an error during script execution'; + @override String get keyAuth => 'Key Auth'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_fr.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_fr.dart index 2376b9ec..ddd759cb 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_fr.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_fr.dart @@ -378,6 +378,12 @@ class SFr extends S { @override String get keepForeground => 'Laisser l\'application au premier plan !'; + @override + String get keepStatusWhenErr => 'Conserver le dernier état du serveur'; + + @override + String get keepStatusWhenErrTip => 'Uniquement en cas d\'erreur lors de l\'exécution du script'; + @override String get keyAuth => 'Authentification par clé'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart index b95554ff..1f65b923 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_id.dart @@ -378,6 +378,12 @@ class SId extends S { @override String get keepForeground => 'Simpan Aplikasi Foreground!'; + @override + String get keepStatusWhenErr => 'Menyimpan status server terakhir'; + + @override + String get keepStatusWhenErrTip => 'Hanya ketika terjadi kesalahan saat menjalankan skrip'; + @override String get keyAuth => 'Auth kunci'; diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart index c01c0ef5..410251c3 100644 --- a/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart @@ -378,6 +378,12 @@ class SZh extends S { @override String get keepForeground => '请保持应用处于前台!'; + @override + String get keepStatusWhenErr => '保留上次的服务器状态'; + + @override + String get keepStatusWhenErrTip => '仅限于执行脚本出错'; + @override String get keyAuth => '密钥认证'; @@ -1244,6 +1250,12 @@ class SZhTw extends SZh { @override String get keepForeground => '請保持應用處於前台!'; + @override + String get keepStatusWhenErr => '保留上次的伺服器狀態'; + + @override + String get keepStatusWhenErrTip => '仅在执行脚本时出错时'; + @override String get keyAuth => '密鑰認證'; diff --git a/lib/data/provider/server.dart b/lib/data/provider/server.dart index c986b602..a8e59323 100644 --- a/lib/data/provider/server.dart +++ b/lib/data/provider/server.dart @@ -388,6 +388,12 @@ class ServerProvider extends ChangeNotifier { raw = await s.client?.run(ShellFunc.status.exec).string; segments = raw?.split(seperator).map((e) => e.trim()).toList(); if (raw == null || raw.isEmpty || segments == null || segments.isEmpty) { + if (Stores.setting.keepStatusWhenErr.fetch()) { + // Keep previous server status when err occurs + if (s.state != ServerState.failed && s.status.more.isNotEmpty) { + return; + } + } TryLimiter.inc(sid); s.status.err = 'Seperate segments failed, raw:\n$raw'; _setServerState(s, ServerState.failed); diff --git a/lib/data/store/setting.dart b/lib/data/store/setting.dart index 7309bba1..586dbdde 100644 --- a/lib/data/store/setting.dart +++ b/lib/data/store/setting.dart @@ -230,6 +230,9 @@ class SettingStore extends PersistentStore { /// Try to use `sudo` to run docker command late final containerTrySudo = property('containerTrySudo', true); + /// Keep previous server status when err occurs + late final keepStatusWhenErr = property('keepStatusWhenErr', false); + // Never show these settings for users // // ------BEGIN------ diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 71993303..462b138a 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -118,6 +118,8 @@ "isBusy": "Is busy now", "jumpServer": "Server springen", "keepForeground": "Stelle sicher, dass die App geöffnet bleibt.", + "keepStatusWhenErr": "Den letzten Serverstatus beibehalten", + "keepStatusWhenErrTip": "Nur im Fehlerfall während der Ausführung des Skripts", "keyAuth": "Schlüsselauthentifzierung", "keyboardCompatibility": "Mögliche Verbesserungen bei der Kompatibilität der Eingabemethoden", "keyboardType": "Tastatur Typ", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index bd461a31..c744a9b1 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -118,6 +118,8 @@ "isBusy": "Is busy now", "jumpServer": "Jump server", "keepForeground": "Keep app foreground!", + "keepStatusWhenErr": "Preserve the last server state", + "keepStatusWhenErrTip": "Only in the event of an error during script execution", "keyAuth": "Key Auth", "keyboardCompatibility": "Possible to improve input method compatibility", "keyboardType": "Keyborad type", diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index ea5d2212..1d40e7e5 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -118,6 +118,8 @@ "isBusy": "Est occupé maintenant", "jumpServer": "Serveur de saut", "keepForeground": "Laisser l'application au premier plan !", + "keepStatusWhenErr": "Conserver le dernier état du serveur", + "keepStatusWhenErrTip": "Uniquement en cas d'erreur lors de l'exécution du script", "keyAuth": "Authentification par clé", "keyboardCompatibility": "Possibilité d'améliorer la compatibilité avec les méthodes de saisie", "keyboardType": "Type de clavier", diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index 8fcadda5..6a3dba8c 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -118,6 +118,8 @@ "isBusy": "Sibuk sekarang", "jumpServer": "Lompat server", "keepForeground": "Simpan Aplikasi Foreground!", + "keepStatusWhenErr": "Menyimpan status server terakhir", + "keepStatusWhenErrTip": "Hanya ketika terjadi kesalahan saat menjalankan skrip", "keyAuth": "Auth kunci", "keyboardCompatibility": "Mungkin untuk meningkatkan kompatibilitas metode input", "keyboardType": "Tipe Keyborad", diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index bc925bc2..365d83db 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -118,6 +118,8 @@ "isBusy": "当前正忙", "jumpServer": "跳板服务器", "keepForeground": "请保持应用处于前台!", + "keepStatusWhenErr": "保留上次的服务器状态", + "keepStatusWhenErrTip": "仅限于执行脚本出错", "keyAuth": "密钥认证", "keyboardCompatibility": "可能会改善输入法兼容性", "keyboardType": "键盘类型", diff --git a/lib/l10n/app_zh_tw.arb b/lib/l10n/app_zh_tw.arb index fb16e201..3e1df48f 100644 --- a/lib/l10n/app_zh_tw.arb +++ b/lib/l10n/app_zh_tw.arb @@ -118,6 +118,8 @@ "isBusy": "當前正忙", "jumpServer": "跳板服務器", "keepForeground": "請保持應用處於前台!", + "keepStatusWhenErr": "保留上次的伺服器狀態", + "keepStatusWhenErrTip": "仅在执行脚本时出错时", "keyAuth": "密鑰認證", "keyboardCompatibility": "可能會改善輸入法兼容性", "keyboardType": "鍵盤類型", diff --git a/lib/view/page/setting/entry.dart b/lib/view/page/setting/entry.dart index 941b5123..60d7ece1 100644 --- a/lib/view/page/setting/entry.dart +++ b/lib/view/page/setting/entry.dart @@ -202,6 +202,7 @@ class _SettingPageState extends State { Widget _buildServer() { return Column( children: [ + _buildKeepStatusWhenErr(), _buildServerFuncBtns(), _buildServerSeq(), _buildServerDetailCardSeq(), @@ -1157,4 +1158,12 @@ class _SettingPageState extends State { trailing: StoreSwitch(prop: _setting.containerTrySudo), ); } + + Widget _buildKeepStatusWhenErr() { + return ListTile( + title: Text(l10n.keepStatusWhenErr), + subtitle: Text(l10n.keepStatusWhenErrTip, style: UIs.textGrey), + trailing: StoreSwitch(prop: _setting.keepStatusWhenErr), + ); + } }