Merge pull request #2907 from fufesou/refact/peer_card

refactor, remove peer type
This commit is contained in:
RustDesk 2023-01-23 08:56:58 +08:00 committed by GitHub
commit a73623d7e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 57 additions and 80 deletions

View File

@ -316,21 +316,11 @@ class _PeerCardState extends State<_PeerCard>
bool get wantKeepAlive => true; bool get wantKeepAlive => true;
} }
enum CardType {
recent,
fav,
lan,
ab,
grp,
}
abstract class BasePeerCard extends StatelessWidget { abstract class BasePeerCard extends StatelessWidget {
final Peer peer; final Peer peer;
final EdgeInsets? menuPadding; final EdgeInsets? menuPadding;
final CardType cardType;
BasePeerCard( BasePeerCard({required this.peer, this.menuPadding, Key? key})
{required this.peer, required this.cardType, this.menuPadding, Key? key})
: super(key: key); : super(key: key);
@override @override
@ -435,7 +425,7 @@ abstract class BasePeerCard extends StatelessWidget {
if (Navigator.canPop(context)) { if (Navigator.canPop(context)) {
Navigator.pop(context); Navigator.pop(context);
} }
_rdpDialog(id, cardType); _rdpDialog(id);
}, },
)), )),
)) ))
@ -480,6 +470,12 @@ abstract class BasePeerCard extends StatelessWidget {
); );
} }
@protected
Future<bool> _isForceAlwaysRelay(String id) async {
return (await bind.mainGetPeerOption(id: id, key: 'force-always-relay'))
.isNotEmpty;
}
@protected @protected
Future<MenuEntryBase<String>> _forceAlwaysRelayAction(String id) async { Future<MenuEntryBase<String>> _forceAlwaysRelayAction(String id) async {
const option = 'force-always-relay'; const option = 'force-always-relay';
@ -487,16 +483,12 @@ abstract class BasePeerCard extends StatelessWidget {
switchType: SwitchType.scheckbox, switchType: SwitchType.scheckbox,
text: translate('Always connect via relay'), text: translate('Always connect via relay'),
getter: () async { getter: () async {
if (cardType == CardType.ab) { return await _isForceAlwaysRelay(id);
return gFFI.abModel.find(id)?.forceAlwaysRelay ?? false;
} else {
return (await bind.mainGetPeerOption(id: id, key: option)).isNotEmpty;
}
}, },
setter: (bool v) async { setter: (bool v) async {
gFFI.abModel.setPeerForceAlwaysRelay(id, v); gFFI.abModel.setPeerForceAlwaysRelay(id, v);
await bind.mainSetPeerOption( await bind.mainSetPeerOption(
id: id, key: option, value: bool2option('force-always-relay', v)); id: id, key: option, value: bool2option(option, v));
}, },
padding: menuPadding, padding: menuPadding,
dismissOnClicked: true, dismissOnClicked: true,
@ -621,14 +613,13 @@ abstract class BasePeerCard extends StatelessWidget {
); );
} }
@protected
Future<String> _getAlias(String id) async =>
await bind.mainGetPeerOption(id: id, key: 'alias');
void _rename(String id) async { void _rename(String id) async {
RxBool isInProgress = false.obs; RxBool isInProgress = false.obs;
String name; String name = await _getAlias(id);
if (cardType == CardType.ab) {
name = gFFI.abModel.find(id)?.alias ?? "";
} else {
name = await bind.mainGetPeerOption(id: id, key: 'alias');
}
var controller = TextEditingController(text: name); var controller = TextEditingController(text: name);
gFFI.dialogManager.show((setState, close) { gFFI.dialogManager.show((setState, close) {
submit() async { submit() async {
@ -636,7 +627,7 @@ abstract class BasePeerCard extends StatelessWidget {
String name = controller.text.trim(); String name = controller.text.trim();
await bind.mainSetPeerAlias(id: id, alias: name); await bind.mainSetPeerAlias(id: id, alias: name);
gFFI.abModel.setPeerAlias(id, name); gFFI.abModel.setPeerAlias(id, name);
update(); _update();
close(); close();
isInProgress.value = false; isInProgress.value = false;
} }
@ -671,34 +662,13 @@ abstract class BasePeerCard extends StatelessWidget {
}); });
} }
void update() { @protected
switch (cardType) { void _update();
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;
case CardType.grp:
gFFI.groupModel.pull();
break;
}
}
} }
class RecentPeerCard extends BasePeerCard { class RecentPeerCard extends BasePeerCard {
RecentPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key}) RecentPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key})
: super( : super(peer: peer, menuPadding: menuPadding, key: key);
peer: peer,
cardType: CardType.recent,
menuPadding: menuPadding,
key: key);
@override @override
Future<List<MenuEntryBase<String>>> _buildMenuItems( Future<List<MenuEntryBase<String>>> _buildMenuItems(
@ -732,15 +702,15 @@ class RecentPeerCard extends BasePeerCard {
} }
return menuItems; return menuItems;
} }
@protected
@override
void _update() => bind.mainLoadRecentPeers();
} }
class FavoritePeerCard extends BasePeerCard { class FavoritePeerCard extends BasePeerCard {
FavoritePeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key}) FavoritePeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key})
: super( : super(peer: peer, menuPadding: menuPadding, key: key);
peer: peer,
cardType: CardType.fav,
menuPadding: menuPadding,
key: key);
@override @override
Future<List<MenuEntryBase<String>>> _buildMenuItems( Future<List<MenuEntryBase<String>>> _buildMenuItems(
@ -776,15 +746,15 @@ class FavoritePeerCard extends BasePeerCard {
} }
return menuItems; return menuItems;
} }
@protected
@override
void _update() => bind.mainLoadFavPeers();
} }
class DiscoveredPeerCard extends BasePeerCard { class DiscoveredPeerCard extends BasePeerCard {
DiscoveredPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key}) DiscoveredPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key})
: super( : super(peer: peer, menuPadding: menuPadding, key: key);
peer: peer,
cardType: CardType.lan,
menuPadding: menuPadding,
key: key);
@override @override
Future<List<MenuEntryBase<String>>> _buildMenuItems( Future<List<MenuEntryBase<String>>> _buildMenuItems(
@ -811,15 +781,15 @@ class DiscoveredPeerCard extends BasePeerCard {
} }
return menuItems; return menuItems;
} }
@protected
@override
void _update() => bind.mainLoadLanPeers();
} }
class AddressBookPeerCard extends BasePeerCard { class AddressBookPeerCard extends BasePeerCard {
AddressBookPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key}) AddressBookPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key})
: super( : super(peer: peer, menuPadding: menuPadding, key: key);
peer: peer,
cardType: CardType.ab,
menuPadding: menuPadding,
key: key);
@override @override
Future<List<MenuEntryBase<String>>> _buildMenuItems( Future<List<MenuEntryBase<String>>> _buildMenuItems(
@ -851,6 +821,20 @@ class AddressBookPeerCard extends BasePeerCard {
return menuItems; return menuItems;
} }
@protected
@override
Future<bool> _isForceAlwaysRelay(String id) async =>
gFFI.abModel.find(id)?.forceAlwaysRelay ?? false;
@protected
@override
Future<String> _getAlias(String id) async =>
gFFI.abModel.find(id)?.alias ?? '';
@protected
@override
void _update() => gFFI.abModel.pullAb();
@protected @protected
@override @override
MenuEntryBase<String> _removeAction( MenuEntryBase<String> _removeAction(
@ -943,11 +927,7 @@ class AddressBookPeerCard extends BasePeerCard {
class MyGroupPeerCard extends BasePeerCard { class MyGroupPeerCard extends BasePeerCard {
MyGroupPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key}) MyGroupPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key})
: super( : super(peer: peer, menuPadding: menuPadding, key: key);
peer: peer,
cardType: CardType.grp,
menuPadding: menuPadding,
key: key);
@override @override
Future<List<MenuEntryBase<String>>> _buildMenuItems( Future<List<MenuEntryBase<String>>> _buildMenuItems(
@ -974,18 +954,15 @@ class MyGroupPeerCard extends BasePeerCard {
} }
return menuItems; return menuItems;
} }
@protected
@override
void _update() => gFFI.groupModel.pull();
} }
void _rdpDialog(String id, CardType card) async { void _rdpDialog(String id) async {
String port, username; final port = await bind.mainGetPeerOption(id: id, key: 'rdp_port');
if (card == CardType.ab) { final username = await bind.mainGetPeerOption(id: id, key: 'rdp_username');
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 portController = TextEditingController(text: port);
final userController = TextEditingController(text: username); final userController = TextEditingController(text: username);
final passwordController = TextEditingController( final passwordController = TextEditingController(

View File

@ -831,7 +831,7 @@ class _TabState extends State<_Tab> with RestorationMixin {
return ConstrainedBox( return ConstrainedBox(
constraints: BoxConstraints(maxWidth: widget.maxLabelWidth ?? 200), constraints: BoxConstraints(maxWidth: widget.maxLabelWidth ?? 200),
child: Text( child: Text(
translate(widget.label.value), widget.label.value,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
color: isSelected color: isSelected