From 21cf2a01c74b00a0cad79831113c79706a8f6ede Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 8 Aug 2023 17:22:25 +0800 Subject: [PATCH 1/3] update idController when create new connection Signed-off-by: 21pages --- flutter/lib/common.dart | 9 +++++++++ flutter/lib/common/formatter/id_formatter.dart | 7 ++++++- flutter/lib/desktop/pages/connection_page.dart | 1 + flutter/lib/mobile/pages/connection_page.dart | 1 + 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 17206b8ce..231a91800 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -11,6 +11,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_hbb/common/formatter/id_formatter.dart'; import 'package:flutter_hbb/desktop/widgets/refresh_wrapper.dart'; import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; import 'package:flutter_hbb/main.dart'; @@ -1833,6 +1834,14 @@ connect( bool isRDP = false, }) async { if (id == '') return; + if (!isDesktop || desktopType == DesktopType.main) { + try { + if (Get.isRegistered()) { + final idController = Get.find(); + idController.text = formatID(id); + } + } catch (_) {} + } id = id.replaceAll(' ', ''); final oldId = id; id = await bind.mainHandleRelayId(id: id); diff --git a/flutter/lib/common/formatter/id_formatter.dart b/flutter/lib/common/formatter/id_formatter.dart index bd7f76666..c2329d53f 100644 --- a/flutter/lib/common/formatter/id_formatter.dart +++ b/flutter/lib/common/formatter/id_formatter.dart @@ -35,6 +35,11 @@ class IDTextInputFormatter extends TextInputFormatter { String formatID(String id) { String id2 = id.replaceAll(' ', ''); + String suffix = ''; + if (id2.endsWith(r'\r') || id2.endsWith(r'/r')) { + suffix = id2.substring(id2.length - 2, id2.length); + id2 = id2.substring(0, id2.length - 2); + } if (int.tryParse(id2) == null) return id; String newID = ''; if (id2.length <= 3) { @@ -47,7 +52,7 @@ String formatID(String id) { newID += " ${id2.substring(i, i + 3)}"; } } - return newID; + return newID + suffix; } String trimID(String id) { diff --git a/flutter/lib/desktop/pages/connection_page.dart b/flutter/lib/desktop/pages/connection_page.dart index 45181c4a3..e24b9c954 100644 --- a/flutter/lib/desktop/pages/connection_page.dart +++ b/flutter/lib/desktop/pages/connection_page.dart @@ -68,6 +68,7 @@ class _ConnectionPageState extends State _idController.selection = TextSelection( baseOffset: 0, extentOffset: _idController.value.text.length); }); + Get.put(_idController); windowManager.addListener(this); } diff --git a/flutter/lib/mobile/pages/connection_page.dart b/flutter/lib/mobile/pages/connection_page.dart index 48c56e6a5..25812e8c2 100644 --- a/flutter/lib/mobile/pages/connection_page.dart +++ b/flutter/lib/mobile/pages/connection_page.dart @@ -66,6 +66,7 @@ class _ConnectionPageState extends State { _idController.addListener(() { _idEmpty.value = _idController.text.isEmpty; }); + Get.put(_idController); } @override From 312c6324d204b6e144dd9c3f072d1cfa11fd995d Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 8 Aug 2023 18:06:31 +0800 Subject: [PATCH 2/3] opt delete dialog title Signed-off-by: 21pages --- flutter/lib/common/widgets/dialog.dart | 8 +++++--- flutter/lib/common/widgets/peer_card.dart | 7 ++++--- flutter/lib/common/widgets/peer_tab_page.dart | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/flutter/lib/common/widgets/dialog.dart b/flutter/lib/common/widgets/dialog.dart index 05a105e68..77307418a 100644 --- a/flutter/lib/common/widgets/dialog.dart +++ b/flutter/lib/common/widgets/dialog.dart @@ -1352,7 +1352,7 @@ customImageQualityDialog(SessionID sessionId, String id, FFI ffi) async { msgBoxCommon(ffi.dialogManager, 'Custom Image Quality', content, [btnClose]); } -void deletePeerConfirmDialog(Function onSubmit) async { +void deletePeerConfirmDialog(Function onSubmit, String title) async { gFFI.dialogManager.show( (setState, close, context) { submit() async { @@ -1368,8 +1368,10 @@ void deletePeerConfirmDialog(Function onSubmit) async { Icons.delete_rounded, color: Colors.red, ), - Text(translate('Delete')).paddingOnly( - left: 10, + Expanded( + child: Text(title, overflow: TextOverflow.ellipsis).paddingOnly( + left: 10, + ), ), ], ), diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index ee3f8d830..a88bb4930 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -542,8 +542,8 @@ abstract class BasePeerCard extends StatelessWidget { _openInTabsAction(String id) async => await _openNewConnInAction(id, 'Open in New Tab', kOptionOpenInTabs); - _openInWindowsAction(String id) async => - await _openNewConnInAction(id, 'Open in New Window', kOptionOpenInWindows); + _openInWindowsAction(String id) async => await _openNewConnInAction( + id, 'Open in New Window', kOptionOpenInWindows); _openNewConnInOptAction(String id) async => mainGetLocalBoolOptionSync(kOptionOpenNewConnInTabs) @@ -636,7 +636,8 @@ abstract class BasePeerCard extends StatelessWidget { } } - deletePeerConfirmDialog(onSubmit); + deletePeerConfirmDialog(onSubmit, + '${translate('Delete')} "${peer.alias.isEmpty ? formatID(peer.id) : peer.alias}"?'); }, padding: menuPadding, dismissOnClicked: true, diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index f2de21dc7..e8cbd2619 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -312,7 +312,7 @@ class _PeerTabPageState extends State showToast(translate('Successful')); } - deletePeerConfirmDialog(onSubmit); + deletePeerConfirmDialog(onSubmit, translate('Delete')); }, child: Tooltip( message: translate('Delete'), From e830a59c2a449316e610263f906a3a9b567f2148 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 9 Aug 2023 07:42:22 +0800 Subject: [PATCH 3/3] skip PeerConfig saving when not receiving peerinfo to keep peercard order Signed-off-by: 21pages --- src/client.rs | 4 ++++ src/client/io_loop.rs | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/client.rs b/src/client.rs index dfd73455c..9c039464c 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1209,6 +1209,10 @@ impl LoginConfigHandler { /// * `k` - key of option /// * `v` - value of option pub fn save_ui_flutter(&mut self, k: String, v: String) { + if self.version == 0 && k == "wm_" { + log::info!("skip saving {k}"); + return; + } let mut config = self.load_config(); config.ui_flutter.insert(k, v); self.save_config(config); diff --git a/src/client/io_loop.rs b/src/client/io_loop.rs index c24d0f54c..f8cdb3ea0 100644 --- a/src/client/io_loop.rs +++ b/src/client/io_loop.rs @@ -850,6 +850,11 @@ impl Remote { } pub async fn sync_jobs_status_to_local(&mut self) -> bool { + let peer_version = self.handler.lc.read().unwrap().version; + if peer_version == 0 { + log::info!("skip saving job status"); + return false; + } log::info!("sync transfer job status"); let mut config: PeerConfig = self.handler.load_config(); let mut transfer_metas = TransferSerde::default();