From 5a7f610b593a3f0cddd0b4263dd304edc20ada76 Mon Sep 17 00:00:00 2001 From: 21pages Date: Sun, 4 Dec 2022 18:47:02 +0800 Subject: [PATCH] fix cm elevate button visibility of different conn type Signed-off-by: 21pages --- flutter/lib/desktop/pages/server_page.dart | 12 ++++++++---- flutter/lib/models/server_model.dart | 19 +++++++++++++++++++ src/ui/cm.tis | 2 +- src/ui_session_interface.rs | 10 ++++++++-- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index 6c586994b..fa367f488 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -238,7 +238,7 @@ Widget buildConnectionCard(Client client) { key: ValueKey(client.id), children: [ _CmHeader(client: client), - client.isFileTransfer || client.disconnected + client.type_() != ClientType.remote || client.disconnected ? Offstage() : _PrivilegeBoard(client: client), Expanded( @@ -376,7 +376,7 @@ class _CmHeaderState extends State<_CmHeader> ), ), Offstage( - offstage: !client.authorized || client.isFileTransfer, + offstage: !client.authorized || client.type_() != ClientType.remote, child: IconButton( onPressed: () => checkClickTime( client.id, () => gFFI.chatModel.toggleCMChatPage(client.id)), @@ -510,7 +510,9 @@ class _CmControlPanel extends StatelessWidget { buildAuthorized(BuildContext context) { final bool canElevate = bind.cmCanElevate(); final model = Provider.of(context); - final showElevation = canElevate && model.showElevation; + final showElevation = canElevate && + model.showElevation && + client.type_() == ClientType.remote; return Column( mainAxisAlignment: MainAxisAlignment.end, children: [ @@ -560,7 +562,9 @@ class _CmControlPanel extends StatelessWidget { buildUnAuthorized(BuildContext context) { final bool canElevate = bind.cmCanElevate(); final model = Provider.of(context); - final showElevation = canElevate && model.showElevation; + final showElevation = canElevate && + model.showElevation && + client.type_() == ClientType.remote; final showAccept = model.approveMode != 'password'; return Column( mainAxisAlignment: MainAxisAlignment.end, diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index 344733324..338da4ee3 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -581,10 +581,17 @@ class ServerModel with ChangeNotifier { } } +enum ClientType { + remote, + file, + portForward, +} + class Client { int id = 0; // client connections inner count id bool authorized = false; bool isFileTransfer = false; + String portForward = ""; String name = ""; String peerId = ""; // peer user's id,show at app bool keyboard = false; @@ -604,6 +611,7 @@ class Client { id = json['id']; authorized = json['authorized']; isFileTransfer = json['is_file_transfer']; + portForward = json['port_forward']; name = json['name']; peerId = json['peer_id']; keyboard = json['keyboard']; @@ -620,6 +628,7 @@ class Client { data['id'] = id; data['is_start'] = authorized; data['is_file_transfer'] = isFileTransfer; + data['port_forward'] = portForward; data['name'] = name; data['peer_id'] = peerId; data['keyboard'] = keyboard; @@ -631,6 +640,16 @@ class Client { data['disconnected'] = disconnected; return data; } + + ClientType type_() { + if (isFileTransfer) { + return ClientType.file; + } else if (portForward.isNotEmpty) { + return ClientType.portForward; + } else { + return ClientType.remote; + } + } } String getLoginDialogTag(int id) { diff --git a/src/ui/cm.tis b/src/ui/cm.tis index 2cfc14bf1..74eb6c6d2 100644 --- a/src/ui/cm.tis +++ b/src/ui/cm.tis @@ -29,7 +29,7 @@ class Body: Reactor.Component }; var right_style = show_chat ? "" : "display: none"; var disconnected = c.disconnected; - var show_elevation_btn = handler.can_elevate() && show_elevation; + var show_elevation_btn = handler.can_elevate() && show_elevation && !c.is_file_transfer && c.port_forward.length == 0; var show_accept_btn = handler.get_option('approve-mode') != 'password'; // below size:* is work around for Linux, it alreayd set in css, but not work, shit sciter return
diff --git a/src/ui_session_interface.rs b/src/ui_session_interface.rs index 6f8820e87..6b635436d 100644 --- a/src/ui_session_interface.rs +++ b/src/ui_session_interface.rs @@ -200,7 +200,7 @@ impl Session { h265 = h265 && encoding_265; return (h264, h265); } - #[allow(dead_code)] + #[allow(unreachable_code)] (false, false) } @@ -1211,7 +1211,13 @@ impl Interface for Session { input_os_password(p, true, self.clone()); } let current = &pi.displays[pi.current_display as usize]; - self.set_display(current.x, current.y, current.width, current.height, current.cursor_embeded); + self.set_display( + current.x, + current.y, + current.width, + current.height, + current.cursor_embeded, + ); } self.update_privacy_mode(); // Save recent peers, then push event to flutter. So flutter can refresh peer page.