From cba6a3e0ee0bc2db41de8b2d4d94f934f09d6e71 Mon Sep 17 00:00:00 2001 From: csf Date: Wed, 21 Dec 2022 16:24:01 +0900 Subject: [PATCH] refactor to use ServerConfig --- flutter/lib/common.dart | 13 ++++- flutter/lib/mobile/pages/scan_page.dart | 3 +- flutter/lib/mobile/pages/settings_page.dart | 6 +- flutter/lib/mobile/widgets/dialog.dart | 64 ++++++++++----------- 4 files changed, 44 insertions(+), 42 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 8e8e50ae9..46ba90d66 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -1525,7 +1525,9 @@ class ServerConfig { this.key = key?.trim() ?? ''; } - /// throw decoding failure + /// decode from shared string (from user shared or rustdesk-server generated) + /// also see [encode] + /// throw when decoding failure ServerConfig.decode(String msg) { final input = msg.split('').reversed.join(''); final bytes = base64Decode(base64.normalize(input)); @@ -1537,6 +1539,8 @@ class ServerConfig { key = json['key'] ?? ''; } + /// encode to shared string + /// also see [ServerConfig.decode] String encode() { Map config = {}; config['host'] = idServer.trim(); @@ -1548,4 +1552,11 @@ class ServerConfig { .reversed .join(); } + + /// from local options + ServerConfig.fromOptions(Map options) + : idServer = options['custom-rendezvous-server'] ?? "", + relayServer = options['relay-server'] ?? "", + apiServer = options['api-server'] ?? "", + key = options['key'] ?? ""; } diff --git a/flutter/lib/mobile/pages/scan_page.dart b/flutter/lib/mobile/pages/scan_page.dart index 32208f6a4..8778d78f7 100644 --- a/flutter/lib/mobile/pages/scan_page.dart +++ b/flutter/lib/mobile/pages/scan_page.dart @@ -140,8 +140,7 @@ class _ScanPageState extends State { try { final sc = ServerConfig.decode(data.substring(7)); Timer(Duration(milliseconds: 60), () { - showServerSettingsWithValue(sc.idServer, sc.relayServer, sc.key, - sc.apiServer, gFFI.dialogManager); + showServerSettingsWithValue(sc, gFFI.dialogManager); }); } catch (e) { showToast('Invalid QR code'); diff --git a/flutter/lib/mobile/pages/settings_page.dart b/flutter/lib/mobile/pages/settings_page.dart index 8c7cdb5c7..9637ecb40 100644 --- a/flutter/lib/mobile/pages/settings_page.dart +++ b/flutter/lib/mobile/pages/settings_page.dart @@ -391,11 +391,7 @@ class _SettingsState extends State with WidgetsBindingObserver { void showServerSettings(OverlayDialogManager dialogManager) async { Map options = jsonDecode(await bind.mainGetOptions()); - String id = options['custom-rendezvous-server'] ?? ""; - String relay = options['relay-server'] ?? ""; - String api = options['api-server'] ?? ""; - String key = options['key'] ?? ""; - showServerSettingsWithValue(id, relay, key, api, dialogManager); + showServerSettingsWithValue(ServerConfig.fromOptions(options), dialogManager); } void showLanguageSettings(OverlayDialogManager dialogManager) async { diff --git a/flutter/lib/mobile/widgets/dialog.dart b/flutter/lib/mobile/widgets/dialog.dart index 8cfaf6a02..d70902513 100644 --- a/flutter/lib/mobile/widgets/dialog.dart +++ b/flutter/lib/mobile/widgets/dialog.dart @@ -237,17 +237,16 @@ void wrongPasswordDialog(String id, OverlayDialogManager dialogManager) { ])); } -void showServerSettingsWithValue(String id, String relay, String key, - String api, OverlayDialogManager dialogManager) async { +void showServerSettingsWithValue( + ServerConfig serverConfig, OverlayDialogManager dialogManager) async { Map oldOptions = jsonDecode(await bind.mainGetOptions()); - String id0 = oldOptions['custom-rendezvous-server'] ?? ""; - String relay0 = oldOptions['relay-server'] ?? ""; - String api0 = oldOptions['api-server'] ?? ""; - String key0 = oldOptions['key'] ?? ""; + final oldCfg = ServerConfig.fromOptions(oldOptions); + var isInProgress = false; - final idController = TextEditingController(text: id); - final relayController = TextEditingController(text: relay); - final apiController = TextEditingController(text: api); + final idCtrl = TextEditingController(text: serverConfig.idServer); + final relayCtrl = TextEditingController(text: serverConfig.relayServer); + final apiCtrl = TextEditingController(text: serverConfig.apiServer); + final keyCtrl = TextEditingController(text: serverConfig.key); String? idServerMsg; String? relayServerMsg; @@ -255,21 +254,18 @@ void showServerSettingsWithValue(String id, String relay, String key, dialogManager.show((setState, close) { Future validate() async { - if (idController.text != id) { - final res = await validateAsync(idController.text); + if (idCtrl.text != oldCfg.idServer) { + final res = await validateAsync(idCtrl.text); setState(() => idServerMsg = res); if (idServerMsg != null) return false; - id = idController.text; } - if (relayController.text != relay) { - relayServerMsg = await validateAsync(relayController.text); + if (relayCtrl.text != oldCfg.relayServer) { + relayServerMsg = await validateAsync(relayCtrl.text); if (relayServerMsg != null) return false; - relay = relayController.text; } - if (apiController.text != relay) { - apiServerMsg = await validateAsync(apiController.text); + if (apiCtrl.text != oldCfg.apiServer) { + apiServerMsg = await validateAsync(apiCtrl.text); if (apiServerMsg != null) return false; - api = apiController.text; } return true; } @@ -281,7 +277,7 @@ void showServerSettingsWithValue(String id, String relay, String key, mainAxisSize: MainAxisSize.min, children: [ TextFormField( - controller: idController, + controller: idCtrl, decoration: InputDecoration( labelText: translate('ID Server'), errorText: idServerMsg), @@ -290,7 +286,7 @@ void showServerSettingsWithValue(String id, String relay, String key, (isAndroid ? [ TextFormField( - controller: relayController, + controller: relayCtrl, decoration: InputDecoration( labelText: translate('Relay Server'), errorText: relayServerMsg), @@ -299,7 +295,7 @@ void showServerSettingsWithValue(String id, String relay, String key, : []) + [ TextFormField( - controller: apiController, + controller: apiCtrl, decoration: InputDecoration( labelText: translate('API Server'), ), @@ -315,13 +311,10 @@ void showServerSettingsWithValue(String id, String relay, String key, }, ), TextFormField( - initialValue: key, + controller: keyCtrl, decoration: InputDecoration( labelText: 'Key', ), - onChanged: (String? value) { - if (value != null) key = value.trim(); - }, ), Offstage( offstage: !isInProgress, @@ -345,18 +338,21 @@ void showServerSettingsWithValue(String id, String relay, String key, isInProgress = true; }); if (await validate()) { - if (id != id0) { - if (id0.isNotEmpty) { + if (idCtrl.text != oldCfg.idServer) { + if (oldCfg.idServer.isNotEmpty) { await gFFI.userModel.logOut(); } - bind.mainSetOption(key: "custom-rendezvous-server", value: id); + bind.mainSetOption( + key: "custom-rendezvous-server", value: idCtrl.text); } - if (relay != relay0) { - bind.mainSetOption(key: "relay-server", value: relay); + if (relayCtrl.text != oldCfg.relayServer) { + bind.mainSetOption(key: "relay-server", value: relayCtrl.text); } - if (key != key0) bind.mainSetOption(key: "key", value: key); - if (api != api0) { - bind.mainSetOption(key: "api-server", value: api); + if (keyCtrl.text != oldCfg.key) { + bind.mainSetOption(key: "key", value: keyCtrl.text); + } + if (apiCtrl.text != oldCfg.apiServer) { + bind.mainSetOption(key: "api-server", value: apiCtrl.text); } close(); } @@ -429,7 +425,7 @@ class _PasswordWidgetState extends State { color: Theme.of(context).primaryColorDark, ), onPressed: () { - // Update the state i.e. toogle the state of passwordVisible variable + // Update the state i.e. toggle the state of passwordVisible variable setState(() { _passwordVisible = !_passwordVisible; });