From b2b7ca30fde888212af527a2b7fc6eded2dae008 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 25 Aug 2022 14:35:08 +0800 Subject: [PATCH] add force-always-relay menu Signed-off-by: 21pages --- .../lib/desktop/widgets/peercard_widget.dart | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/flutter/lib/desktop/widgets/peercard_widget.dart b/flutter/lib/desktop/widgets/peercard_widget.dart index f76336cda..d39f3d359 100644 --- a/flutter/lib/desktop/widgets/peercard_widget.dart +++ b/flutter/lib/desktop/widgets/peercard_widget.dart @@ -359,6 +359,17 @@ class _PeerCardState extends State<_PeerCard> _rename(id); } else if (value == 'unremember-password') { await bind.mainForgetPassword(id: id); + } else if (value == 'force-always-relay') { + String value; + String oldValue = + await bind.mainGetPeerOption(id: id, key: 'force-always-relay'); + if (oldValue.isEmpty) { + value = 'Y'; + } else { + value = ''; + } + await bind.mainSetPeerOption( + id: id, key: 'force-always-relay', value: value); } } @@ -572,6 +583,7 @@ class RecentPeerCard extends BasePeerCard { child: Text(translate('Transfer File')), value: 'file'), PopupMenuItem( child: Text(translate('TCP Tunneling')), value: 'tcp-tunnel'), + await _forceAlwaysRelayMenuItem(peer.id), PopupMenuItem(child: Text(translate('Rename')), value: 'rename'), PopupMenuItem(child: Text(translate('Remove')), value: 'remove'), PopupMenuItem( @@ -595,6 +607,7 @@ class FavoritePeerCard extends BasePeerCard { child: Text(translate('Transfer File')), value: 'file'), PopupMenuItem( child: Text(translate('TCP Tunneling')), value: 'tcp-tunnel'), + await _forceAlwaysRelayMenuItem(peer.id), PopupMenuItem(child: Text(translate('Rename')), value: 'rename'), PopupMenuItem(child: Text(translate('Remove')), value: 'remove'), PopupMenuItem( @@ -618,6 +631,7 @@ class DiscoveredPeerCard extends BasePeerCard { child: Text(translate('Transfer File')), value: 'file'), PopupMenuItem( child: Text(translate('TCP Tunneling')), value: 'tcp-tunnel'), + await _forceAlwaysRelayMenuItem(peer.id), PopupMenuItem(child: Text(translate('Rename')), value: 'rename'), PopupMenuItem(child: Text(translate('Remove')), value: 'remove'), PopupMenuItem( @@ -641,6 +655,7 @@ class AddressBookPeerCard extends BasePeerCard { child: Text(translate('Transfer File')), value: 'file'), PopupMenuItem( child: Text(translate('TCP Tunneling')), value: 'tcp-tunnel'), + await _forceAlwaysRelayMenuItem(peer.id), PopupMenuItem(child: Text(translate('Rename')), value: 'rename'), PopupMenuItem( child: Text(translate('Remove')), value: 'ab-delete'), @@ -654,3 +669,20 @@ class AddressBookPeerCard extends BasePeerCard { ]; } } + +Future> _forceAlwaysRelayMenuItem(String id) async { + bool force_always_relay = + (await bind.mainGetPeerOption(id: id, key: 'force-always-relay')) + .isNotEmpty; + return PopupMenuItem( + child: Row( + children: [ + Offstage( + offstage: !force_always_relay, + child: Icon(Icons.check), + ), + Text(translate('Always connect via relay')), + ], + ), + value: 'force-always-relay'); +}