fix: backup restore failed

This commit is contained in:
lollipopkit
2023-04-16 11:59:00 +08:00
parent 5c2cc5e5e4
commit fd2d59b1e0
13 changed files with 66 additions and 39 deletions

View File

@@ -741,6 +741,12 @@ abstract class S {
/// **'Open'** /// **'Open'**
String get open; String get open;
/// No description provided for @paste.
///
/// In en, this message translates to:
/// **'Paste'**
String get paste;
/// No description provided for @path. /// No description provided for @path.
/// ///
/// In en, this message translates to: /// In en, this message translates to:

View File

@@ -350,6 +350,9 @@ class SEn extends S {
@override @override
String get open => 'Open'; String get open => 'Open';
@override
String get paste => 'Paste';
@override @override
String get path => 'Path'; String get path => 'Path';

View File

@@ -350,6 +350,9 @@ class SZh extends S {
@override @override
String get open => '打开'; String get open => '打开';
@override
String get paste => '粘贴';
@override @override
String get path => '路径'; String get path => '路径';

View File

@@ -359,7 +359,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 255; CURRENT_PROJECT_VERSION = 256;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -367,7 +367,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.255; MARKETING_VERSION = 1.0.256;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -490,7 +490,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 255; CURRENT_PROJECT_VERSION = 256;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -498,7 +498,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.255; MARKETING_VERSION = 1.0.256;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
@@ -515,7 +515,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = 255; CURRENT_PROJECT_VERSION = 256;
DEVELOPMENT_TEAM = BA88US33G6; DEVELOPMENT_TEAM = BA88US33G6;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist"; INFOPLIST_FILE = "Runner/Info-$(CONFIGURATION).plist";
@@ -523,7 +523,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.255; MARKETING_VERSION = 1.0.256;
PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";

View File

@@ -31,7 +31,7 @@ class Backup {
keys = (json['keys'] as List) keys = (json['keys'] as List)
.map((e) => PrivateKeyInfo.fromJson(e)) .map((e) => PrivateKeyInfo.fromJson(e))
.toList(), .toList(),
dockerHosts = json['dockerHosts']; dockerHosts = json['dockerHosts'] ?? {};
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
'version': version, 'version': version,

View File

@@ -12,4 +12,4 @@ class VirtualKey {
{this.key, this.toggleable = false, this.icon, this.func}); {this.key, this.toggleable = false, this.icon, this.func});
} }
enum VirtualKeyFunc { toggleIME, backspace, copy, paste } enum VirtualKeyFunc { toggleIME, backspace, copy, paste, snippet }

View File

@@ -2,8 +2,9 @@
class BuildData { class BuildData {
static const String name = "ServerBox"; static const String name = "ServerBox";
static const int build = 255; static const int build = 256;
static const String engine = "Flutter 3.7.7 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision 2ad6cd72c0 (4 weeks ago) • 2023-03-08 09:41:59 -0800\nEngine • revision 1837b5be5f\nTools • Dart 2.19.4 • DevTools 2.20.1\n"; static const String engine =
static const String buildAt = "2023-04-05 15:03:38.565037"; "Flutter 3.7.7 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision 2ad6cd72c0 (4 weeks ago) • 2023-03-08 09:41:59 -0800\nEngine • revision 1837b5be5f\nTools • Dart 2.19.4 • DevTools 2.20.1\n";
static const String buildAt = "2023-04-05 15:16:00.949501";
static const int modifications = 2; static const int modifications = 2;
} }

View File

@@ -13,7 +13,8 @@ var virtualKeys = [
// 'Del', // 'Del',
// key: TerminalKey.delete, // key: TerminalKey.delete,
// ), // ),
VirtualKey('Paste', func: VirtualKeyFunc.paste, icon: Icons.paste), //VirtualKey('Paste', func: VirtualKeyFunc.paste, icon: Icons.paste),
VirtualKey('Snippet', func: VirtualKeyFunc.snippet, icon: Icons.code),
VirtualKey('Tab', key: TerminalKey.tab), VirtualKey('Tab', key: TerminalKey.tab),
VirtualKey('Ctrl', key: TerminalKey.control, toggleable: true), VirtualKey('Ctrl', key: TerminalKey.control, toggleable: true),
VirtualKey('Left', key: TerminalKey.arrowLeft, icon: Icons.arrow_back), VirtualKey('Left', key: TerminalKey.arrowLeft, icon: Icons.arrow_back),

View File

@@ -107,6 +107,7 @@
"onServerDetailPage": "On server detail page", "onServerDetailPage": "On server detail page",
"onlyIOS": "Only valid on iOS", "onlyIOS": "Only valid on iOS",
"open": "Open", "open": "Open",
"paste": "Paste",
"path": "Path", "path": "Path",
"pickFile": "Pick file", "pickFile": "Pick file",
"ping": "Ping", "ping": "Ping",

View File

@@ -107,6 +107,7 @@
"onServerDetailPage": "在服务器详情页", "onServerDetailPage": "在服务器详情页",
"onlyIOS": "仅在iOS上有效", "onlyIOS": "仅在iOS上有效",
"open": "打开", "open": "打开",
"paste": "粘贴",
"path": "路径", "path": "路径",
"pickFile": "选择文件", "pickFile": "选择文件",
"ping": "Ping", "ping": "Ping",

View File

@@ -5,6 +5,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:toolbox/core/utils/misc.dart';
import '../../core/extension/colorx.dart'; import '../../core/extension/colorx.dart';
import '../../core/utils/ui.dart'; import '../../core/utils/ui.dart';
@@ -196,14 +197,19 @@ class BackupPage extends StatelessWidget {
_dockerHosts.setDockerHost(k, backup.dockerHosts[k]!); _dockerHosts.setDockerHost(k, backup.dockerHosts[k]!);
} }
Navigator.of(context).pop(); Navigator.of(context).pop();
showSnackBar(context, Text(s.restoreSuccess)); showSnackBarWithAction(
context,
s.restoreSuccess,
s.restart,
() => rebuildAll(context),
);
}, },
child: Text(s.ok), child: Text(s.ok),
), ),
], ],
); );
} catch (e) { } catch (e) {
showSnackBar(context, Text(s.invalidJson)); showSnackBar(context, Text(e.toString()));
return; return;
} }
} }

View File

@@ -274,6 +274,10 @@ class _SSHPageState extends State<SSHPage> {
case VirtualKeyFunc.copy: case VirtualKeyFunc.copy:
copy(terminalSelected); copy(terminalSelected);
break; break;
case VirtualKeyFunc.snippet:
// TODO: Handle this case.
// _showSnippet();
break;
} }
} }
@@ -300,27 +304,27 @@ class _SSHPageState extends State<SSHPage> {
} }
final selected = terminalSelected; final selected = terminalSelected;
if (selected.trim().isEmpty) { if (selected.trim().isEmpty) {
// _menuController.show( _menuController.show(
// context: context, context: context,
// contextMenuBuilder: (context) { contextMenuBuilder: (context) {
// return TextSelectionToolbar( return TextSelectionToolbar(
// anchorAbove: detail.globalPosition, anchorAbove: details.globalPosition,
// anchorBelow: detail.globalPosition, anchorBelow: details.globalPosition,
// children: [ children: [
// TextButton( TextButton(
// child: Text( child: Text(
// 'Paste', _s.paste,
// style: _menuTextStyle, style: _menuTextStyle,
// ), ),
// onPressed: () async { onPressed: () async {
// _paste(); _paste();
// _menuController.remove(); _menuController.remove();
// }, },
// ) )
// ], ],
// ); );
// }, },
// ); );
return; return;
} }
_menuController.show( _menuController.show(

View File

@@ -28,7 +28,8 @@ Widget buildPicker(List<Widget> items, Function(int idx) onSelected) {
builder: (context, index) => Center( builder: (context, index) => Center(
child: items[index], child: items[index],
), ),
childCount: items.length), childCount: items.length,
),
) )
], ],
), ),