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<String>( child: Text(translate('TCP Tunneling')), value: 'tcp-tunnel'), + await _forceAlwaysRelayMenuItem(peer.id), PopupMenuItem<String>(child: Text(translate('Rename')), value: 'rename'), PopupMenuItem<String>(child: Text(translate('Remove')), value: 'remove'), PopupMenuItem<String>( @@ -595,6 +607,7 @@ class FavoritePeerCard extends BasePeerCard { child: Text(translate('Transfer File')), value: 'file'), PopupMenuItem<String>( child: Text(translate('TCP Tunneling')), value: 'tcp-tunnel'), + await _forceAlwaysRelayMenuItem(peer.id), PopupMenuItem<String>(child: Text(translate('Rename')), value: 'rename'), PopupMenuItem<String>(child: Text(translate('Remove')), value: 'remove'), PopupMenuItem<String>( @@ -618,6 +631,7 @@ class DiscoveredPeerCard extends BasePeerCard { child: Text(translate('Transfer File')), value: 'file'), PopupMenuItem<String>( child: Text(translate('TCP Tunneling')), value: 'tcp-tunnel'), + await _forceAlwaysRelayMenuItem(peer.id), PopupMenuItem<String>(child: Text(translate('Rename')), value: 'rename'), PopupMenuItem<String>(child: Text(translate('Remove')), value: 'remove'), PopupMenuItem<String>( @@ -641,6 +655,7 @@ class AddressBookPeerCard extends BasePeerCard { child: Text(translate('Transfer File')), value: 'file'), PopupMenuItem<String>( child: Text(translate('TCP Tunneling')), value: 'tcp-tunnel'), + await _forceAlwaysRelayMenuItem(peer.id), PopupMenuItem<String>(child: Text(translate('Rename')), value: 'rename'), PopupMenuItem<String>( child: Text(translate('Remove')), value: 'ab-delete'), @@ -654,3 +669,20 @@ class AddressBookPeerCard extends BasePeerCard { ]; } } + +Future<PopupMenuItem<String>> _forceAlwaysRelayMenuItem(String id) async { + bool force_always_relay = + (await bind.mainGetPeerOption(id: id, key: 'force-always-relay')) + .isNotEmpty; + return PopupMenuItem<String>( + child: Row( + children: [ + Offstage( + offstage: !force_always_relay, + child: Icon(Icons.check), + ), + Text(translate('Always connect via relay')), + ], + ), + value: 'force-always-relay'); +}