mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-12-12 11:06:57 +00:00
ab: read respectively and sync when set
Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
@@ -56,6 +56,9 @@ class _PeerCardState extends State<_PeerCard>
|
||||
|
||||
Widget _buildMobile() {
|
||||
final peer = super.widget.peer;
|
||||
final name =
|
||||
'${peer.username}${peer.username.isNotEmpty && peer.hostname.isNotEmpty ? '@' : ''}${peer.hostname}';
|
||||
|
||||
return Card(
|
||||
margin: EdgeInsets.symmetric(horizontal: 2),
|
||||
child: GestureDetector(
|
||||
@@ -90,7 +93,7 @@ class _PeerCardState extends State<_PeerCard>
|
||||
? formatID(peer.id)
|
||||
: peer.alias)
|
||||
]),
|
||||
Text('${peer.username}@${peer.hostname}')
|
||||
Text(name)
|
||||
],
|
||||
).paddingOnly(left: 8.0),
|
||||
),
|
||||
@@ -145,6 +148,8 @@ class _PeerCardState extends State<_PeerCard>
|
||||
|
||||
Widget _buildPeerTile(
|
||||
BuildContext context, Peer peer, Rx<BoxDecoration?> deco) {
|
||||
final name =
|
||||
'${peer.username}${peer.username.isNotEmpty && peer.hostname.isNotEmpty ? '@' : ''}${peer.hostname}';
|
||||
final greyStyle = TextStyle(
|
||||
fontSize: 11,
|
||||
color: Theme.of(context).textTheme.titleLarge?.color?.withOpacity(0.6));
|
||||
@@ -184,7 +189,7 @@ class _PeerCardState extends State<_PeerCard>
|
||||
Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Text(
|
||||
'${peer.username}@${peer.hostname}',
|
||||
name,
|
||||
style: greyStyle,
|
||||
textAlign: TextAlign.start,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
@@ -206,7 +211,8 @@ class _PeerCardState extends State<_PeerCard>
|
||||
|
||||
Widget _buildPeerCard(
|
||||
BuildContext context, Peer peer, Rx<BoxDecoration?> deco) {
|
||||
final name = '${peer.username}@${peer.hostname}';
|
||||
final name =
|
||||
'${peer.username}${peer.username.isNotEmpty && peer.hostname.isNotEmpty ? '@' : ''}${peer.hostname}';
|
||||
return Card(
|
||||
color: Colors.transparent,
|
||||
elevation: 0,
|
||||
@@ -310,11 +316,20 @@ class _PeerCardState extends State<_PeerCard>
|
||||
bool get wantKeepAlive => true;
|
||||
}
|
||||
|
||||
enum CardType {
|
||||
recent,
|
||||
fav,
|
||||
lan,
|
||||
ab,
|
||||
}
|
||||
|
||||
abstract class BasePeerCard extends StatelessWidget {
|
||||
final Peer peer;
|
||||
final EdgeInsets? menuPadding;
|
||||
final CardType cardType;
|
||||
|
||||
BasePeerCard({required this.peer, this.menuPadding, Key? key})
|
||||
BasePeerCard(
|
||||
{required this.peer, required this.cardType, this.menuPadding, Key? key})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
@@ -419,7 +434,7 @@ abstract class BasePeerCard extends StatelessWidget {
|
||||
if (Navigator.canPop(context)) {
|
||||
Navigator.pop(context);
|
||||
}
|
||||
_rdpDialog(id);
|
||||
_rdpDialog(id, cardType);
|
||||
},
|
||||
)),
|
||||
))
|
||||
@@ -471,17 +486,16 @@ abstract class BasePeerCard extends StatelessWidget {
|
||||
switchType: SwitchType.scheckbox,
|
||||
text: translate('Always connect via relay'),
|
||||
getter: () async {
|
||||
return (await bind.mainGetPeerOption(id: id, key: option)).isNotEmpty;
|
||||
if (cardType == CardType.ab) {
|
||||
return gFFI.abModel.find(id)?.forceAlwaysRelay ?? false;
|
||||
} else {
|
||||
return (await bind.mainGetPeerOption(id: id, key: option)).isNotEmpty;
|
||||
}
|
||||
},
|
||||
setter: (bool v) async {
|
||||
String value;
|
||||
String oldValue = await bind.mainGetPeerOption(id: id, key: option);
|
||||
if (oldValue.isEmpty) {
|
||||
value = 'Y';
|
||||
} else {
|
||||
value = '';
|
||||
}
|
||||
await bind.mainSetPeerOption(id: id, key: option, value: value);
|
||||
gFFI.abModel.setPeerForceAlwaysRelay(id, v);
|
||||
await bind.mainSetPeerOption(
|
||||
id: id, key: option, value: bool2option('force-always-relay', v));
|
||||
},
|
||||
padding: menuPadding,
|
||||
dismissOnClicked: true,
|
||||
@@ -489,14 +503,14 @@ abstract class BasePeerCard extends StatelessWidget {
|
||||
}
|
||||
|
||||
@protected
|
||||
MenuEntryBase<String> _renameAction(String id, bool isAddressBook) {
|
||||
MenuEntryBase<String> _renameAction(String id) {
|
||||
return MenuEntryButton<String>(
|
||||
childBuilder: (TextStyle? style) => Text(
|
||||
translate('Rename'),
|
||||
style: style,
|
||||
),
|
||||
proc: () {
|
||||
_rename(id, isAddressBook);
|
||||
_rename(id);
|
||||
},
|
||||
padding: menuPadding,
|
||||
dismissOnClicked: true,
|
||||
@@ -606,33 +620,22 @@ abstract class BasePeerCard extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
void _rename(String id, bool isAddressBook) async {
|
||||
void _rename(String id) async {
|
||||
RxBool isInProgress = false.obs;
|
||||
var name = peer.alias;
|
||||
var controller = TextEditingController(text: name);
|
||||
if (isAddressBook) {
|
||||
final peer = gFFI.abModel.peers.firstWhereOrNull((p) => id == p.id);
|
||||
if (peer == null) {
|
||||
// this should not happen
|
||||
} else {
|
||||
name = peer.alias;
|
||||
}
|
||||
String name;
|
||||
if (cardType == CardType.ab) {
|
||||
name = gFFI.abModel.find(id)?.alias ?? "";
|
||||
} else {
|
||||
name = await bind.mainGetPeerOption(id: id, key: 'alias');
|
||||
}
|
||||
var controller = TextEditingController(text: name);
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
submit() async {
|
||||
isInProgress.value = true;
|
||||
name = controller.text;
|
||||
String name = controller.text.trim();
|
||||
await bind.mainSetPeerAlias(id: id, alias: name);
|
||||
if (isAddressBook) {
|
||||
gFFI.abModel.setPeerAlias(id, name);
|
||||
await gFFI.abModel.pushAb();
|
||||
}
|
||||
if (isAddressBook) {
|
||||
gFFI.abModel.pullAb();
|
||||
} else {
|
||||
bind.mainLoadRecentPeers();
|
||||
bind.mainLoadFavPeers();
|
||||
}
|
||||
gFFI.abModel.setPeerAlias(id, name);
|
||||
update();
|
||||
close();
|
||||
isInProgress.value = false;
|
||||
}
|
||||
@@ -666,11 +669,32 @@ abstract class BasePeerCard extends StatelessWidget {
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
void update() {
|
||||
switch (cardType) {
|
||||
case CardType.recent:
|
||||
bind.mainLoadRecentPeers();
|
||||
break;
|
||||
case CardType.fav:
|
||||
bind.mainLoadFavPeers();
|
||||
break;
|
||||
case CardType.lan:
|
||||
bind.mainLoadLanPeers();
|
||||
break;
|
||||
case CardType.ab:
|
||||
gFFI.abModel.pullAb();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class RecentPeerCard extends BasePeerCard {
|
||||
RecentPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key})
|
||||
: super(peer: peer, menuPadding: menuPadding, key: key);
|
||||
: super(
|
||||
peer: peer,
|
||||
cardType: CardType.recent,
|
||||
menuPadding: menuPadding,
|
||||
key: key);
|
||||
|
||||
@override
|
||||
Future<List<MenuEntryBase<String>>> _buildMenuItems(
|
||||
@@ -691,7 +715,7 @@ class RecentPeerCard extends BasePeerCard {
|
||||
menuItems.add(_createShortCutAction(peer.id));
|
||||
}
|
||||
menuItems.add(MenuEntryDivider());
|
||||
menuItems.add(_renameAction(peer.id, false));
|
||||
menuItems.add(_renameAction(peer.id));
|
||||
menuItems.add(_removeAction(peer.id, () async {
|
||||
await bind.mainLoadRecentPeers();
|
||||
}));
|
||||
@@ -708,7 +732,11 @@ class RecentPeerCard extends BasePeerCard {
|
||||
|
||||
class FavoritePeerCard extends BasePeerCard {
|
||||
FavoritePeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key})
|
||||
: super(peer: peer, menuPadding: menuPadding, key: key);
|
||||
: super(
|
||||
peer: peer,
|
||||
cardType: CardType.fav,
|
||||
menuPadding: menuPadding,
|
||||
key: key);
|
||||
|
||||
@override
|
||||
Future<List<MenuEntryBase<String>>> _buildMenuItems(
|
||||
@@ -729,7 +757,7 @@ class FavoritePeerCard extends BasePeerCard {
|
||||
menuItems.add(_createShortCutAction(peer.id));
|
||||
}
|
||||
menuItems.add(MenuEntryDivider());
|
||||
menuItems.add(_renameAction(peer.id, false));
|
||||
menuItems.add(_renameAction(peer.id));
|
||||
menuItems.add(_removeAction(peer.id, () async {
|
||||
await bind.mainLoadFavPeers();
|
||||
}));
|
||||
@@ -748,7 +776,11 @@ class FavoritePeerCard extends BasePeerCard {
|
||||
|
||||
class DiscoveredPeerCard extends BasePeerCard {
|
||||
DiscoveredPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key})
|
||||
: super(peer: peer, menuPadding: menuPadding, key: key);
|
||||
: super(
|
||||
peer: peer,
|
||||
cardType: CardType.lan,
|
||||
menuPadding: menuPadding,
|
||||
key: key);
|
||||
|
||||
@override
|
||||
Future<List<MenuEntryBase<String>>> _buildMenuItems(
|
||||
@@ -779,7 +811,11 @@ class DiscoveredPeerCard extends BasePeerCard {
|
||||
|
||||
class AddressBookPeerCard extends BasePeerCard {
|
||||
AddressBookPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key})
|
||||
: super(peer: peer, menuPadding: menuPadding, key: key);
|
||||
: super(
|
||||
peer: peer,
|
||||
cardType: CardType.ab,
|
||||
menuPadding: menuPadding,
|
||||
key: key);
|
||||
|
||||
@override
|
||||
Future<List<MenuEntryBase<String>>> _buildMenuItems(
|
||||
@@ -800,7 +836,7 @@ class AddressBookPeerCard extends BasePeerCard {
|
||||
menuItems.add(_createShortCutAction(peer.id));
|
||||
}
|
||||
menuItems.add(MenuEntryDivider());
|
||||
menuItems.add(_renameAction(peer.id, false));
|
||||
menuItems.add(_renameAction(peer.id));
|
||||
menuItems.add(_removeAction(peer.id, () async {}));
|
||||
if (await bind.mainPeerHasPassword(id: peer.id)) {
|
||||
menuItems.add(_unrememberPasswordAction(peer.id));
|
||||
@@ -901,23 +937,33 @@ class AddressBookPeerCard extends BasePeerCard {
|
||||
}
|
||||
}
|
||||
|
||||
void _rdpDialog(String id) async {
|
||||
final portController = TextEditingController(
|
||||
text: await bind.mainGetPeerOption(id: id, key: 'rdp_port'));
|
||||
final userController = TextEditingController(
|
||||
text: await bind.mainGetPeerOption(id: id, key: 'rdp_username'));
|
||||
void _rdpDialog(String id, CardType card) async {
|
||||
String port, username;
|
||||
if (card == CardType.ab) {
|
||||
port = gFFI.abModel.find(id)?.rdpPort ?? '';
|
||||
username = gFFI.abModel.find(id)?.rdpUsername ?? '';
|
||||
} else {
|
||||
port = await bind.mainGetPeerOption(id: id, key: 'rdp_port');
|
||||
username = await bind.mainGetPeerOption(id: id, key: 'rdp_username');
|
||||
}
|
||||
|
||||
final portController = TextEditingController(text: port);
|
||||
final userController = TextEditingController(text: username);
|
||||
final passwordController = TextEditingController(
|
||||
text: await bind.mainGetPeerOption(id: id, key: 'rdp_password'));
|
||||
RxBool secure = true.obs;
|
||||
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
submit() async {
|
||||
String port = portController.text.trim();
|
||||
String username = userController.text;
|
||||
String password = passwordController.text;
|
||||
await bind.mainSetPeerOption(id: id, key: 'rdp_port', value: port);
|
||||
await bind.mainSetPeerOption(
|
||||
id: id, key: 'rdp_port', value: portController.text.trim());
|
||||
id: id, key: 'rdp_username', value: username);
|
||||
await bind.mainSetPeerOption(
|
||||
id: id, key: 'rdp_username', value: userController.text);
|
||||
await bind.mainSetPeerOption(
|
||||
id: id, key: 'rdp_password', value: passwordController.text);
|
||||
id: id, key: 'rdp_password', value: password);
|
||||
gFFI.abModel.setRdp(id, port, username);
|
||||
close();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user