refactor strings in a separate class, added alias and remote host sort types

This commit is contained in:
NicKoehler 2023-03-08 20:10:08 +01:00
parent bcfb649815
commit f042ed44bd
No known key found for this signature in database
GPG Key ID: BAE01394EB51AC58
2 changed files with 33 additions and 8 deletions

View File

@ -435,7 +435,6 @@ class PeerSortDropdown extends StatefulWidget {
} }
class _PeerSortDropdownState extends State<PeerSortDropdown> { class _PeerSortDropdownState extends State<PeerSortDropdown> {
final List<String> sort_names = ['Remote ID', 'Username', "Status"];
String _sortType = peerSort.value; String _sortType = peerSort.value;
@override @override
@ -449,7 +448,9 @@ class _PeerSortDropdownState extends State<PeerSortDropdown> {
decoration: deco, decoration: deco,
child: DropdownButtonHideUnderline( child: DropdownButtonHideUnderline(
child: DropdownButton2<String>( child: DropdownButton2<String>(
value: sort_names.contains(_sortType) ? _sortType : sort_names[0], value: PeerSortType.values.contains(_sortType)
? _sortType
: PeerSortType.remoteId,
onChanged: (v) async { onChanged: (v) async {
if (v != null) { if (v != null) {
setState(() => _sortType = v); setState(() => _sortType = v);
@ -480,7 +481,7 @@ class _PeerSortDropdownState extends State<PeerSortDropdown> {
), ),
enabled: false, enabled: false,
), ),
...sort_names ...PeerSortType.values
.map<DropdownMenuItem<String>>( .map<DropdownMenuItem<String>>(
(String value) => DropdownMenuItem<String>( (String value) => DropdownMenuItem<String>(
value: value, value: value,

View File

@ -16,6 +16,22 @@ import 'peer_card.dart';
typedef PeerFilter = bool Function(Peer peer); typedef PeerFilter = bool Function(Peer peer);
typedef PeerCardBuilder = Widget Function(Peer peer); typedef PeerCardBuilder = Widget Function(Peer peer);
class PeerSortType {
static const String remoteId = 'Remote ID';
static const String remoteHost = 'Remote Host';
static const String alias = 'Alias';
static const String username = 'Username';
static const String status = 'Status';
static List<String> values = [
PeerSortType.remoteId,
PeerSortType.remoteHost,
PeerSortType.alias,
PeerSortType.username,
PeerSortType.status
];
}
/// for peer search text, global obs value /// for peer search text, global obs value
final peerSearchText = "".obs; final peerSearchText = "".obs;
@ -193,8 +209,8 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
} }
// fallback to id sorting // fallback to id sorting
if (sortedBy.isEmpty) { if (!PeerSortType.values.contains(sortedBy)) {
sortedBy = 'id'; sortedBy = PeerSortType.remoteId;
bind.setLocalFlutterConfig( bind.setLocalFlutterConfig(
k: "peer-sorting", k: "peer-sorting",
v: sortedBy, v: sortedBy,
@ -203,14 +219,22 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
if (widget.peers.loadEvent != 'load_recent_peers') { if (widget.peers.loadEvent != 'load_recent_peers') {
switch (sortedBy) { switch (sortedBy) {
case 'id': case PeerSortType.remoteId:
peers.sort((p1, p2) => p1.id.compareTo(p2.id)); peers.sort((p1, p2) => p1.id.compareTo(p2.id));
break; break;
case 'username': case PeerSortType.remoteHost:
peers.sort((p1, p2) =>
p1.hostname.toLowerCase().compareTo(p2.hostname.toLowerCase()));
break;
case PeerSortType.alias:
peers.sort((p1, p2) =>
p1.alias.toLowerCase().compareTo(p2.alias.toLowerCase()));
break;
case PeerSortType.username:
peers.sort((p1, p2) => peers.sort((p1, p2) =>
p1.username.toLowerCase().compareTo(p2.username.toLowerCase())); p1.username.toLowerCase().compareTo(p2.username.toLowerCase()));
break; break;
case 'status': case PeerSortType.status:
peers.sort((p1, p2) => p1.online ? -1 : 1); peers.sort((p1, p2) => p1.online ? -1 : 1);
break; break;
} }