mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 16:05:18 +00:00
feat: Sort by Duration (#1238)
This commit is contained in:
parent
3294f657fe
commit
6f8271f5e9
@ -50,10 +50,11 @@ enum SortBy {
|
|||||||
none,
|
none,
|
||||||
ascending,
|
ascending,
|
||||||
descending,
|
descending,
|
||||||
artist,
|
|
||||||
album,
|
|
||||||
newest,
|
newest,
|
||||||
oldest,
|
oldest,
|
||||||
|
duration,
|
||||||
|
artist,
|
||||||
|
album,
|
||||||
}
|
}
|
||||||
|
|
||||||
final localTracksProvider = FutureProvider<List<LocalTrack>>((ref) async {
|
final localTracksProvider = FutureProvider<List<LocalTrack>>((ref) async {
|
||||||
|
@ -48,6 +48,11 @@ class SortTracksDropdown extends StatelessWidget {
|
|||||||
enabled: value != SortBy.oldest,
|
enabled: value != SortBy.oldest,
|
||||||
title: Text(context.l10n.sort_oldest),
|
title: Text(context.l10n.sort_oldest),
|
||||||
),
|
),
|
||||||
|
PopSheetEntry(
|
||||||
|
value: SortBy.duration,
|
||||||
|
enabled: value != SortBy.duration,
|
||||||
|
title: Text(context.l10n.sort_duration),
|
||||||
|
),
|
||||||
PopSheetEntry(
|
PopSheetEntry(
|
||||||
value: SortBy.artist,
|
value: SortBy.artist,
|
||||||
enabled: value != SortBy.artist,
|
enabled: value != SortBy.artist,
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
"sort_z_a": "Sort by Z-A",
|
"sort_z_a": "Sort by Z-A",
|
||||||
"sort_artist": "Sort by Artist",
|
"sort_artist": "Sort by Artist",
|
||||||
"sort_album": "Sort by Album",
|
"sort_album": "Sort by Album",
|
||||||
|
"sort_duration": "Sort by Duration",
|
||||||
"sort_tracks": "Sort Tracks",
|
"sort_tracks": "Sort Tracks",
|
||||||
"currently_downloading": "Currently Downloading ({tracks_length})",
|
"currently_downloading": "Currently Downloading ({tracks_length})",
|
||||||
"cancel_all": "Cancel All",
|
"cancel_all": "Cancel All",
|
||||||
|
@ -292,24 +292,24 @@ abstract class ServiceUtils {
|
|||||||
return List<T>.from(tracks)
|
return List<T>.from(tracks)
|
||||||
..sort((a, b) {
|
..sort((a, b) {
|
||||||
switch (sortBy) {
|
switch (sortBy) {
|
||||||
case SortBy.album:
|
|
||||||
return a.album?.name?.compareTo(b.album?.name ?? "") ?? 0;
|
|
||||||
case SortBy.artist:
|
|
||||||
return a.artists?.first.name
|
|
||||||
?.compareTo(b.artists?.first.name ?? "") ??
|
|
||||||
0;
|
|
||||||
case SortBy.ascending:
|
case SortBy.ascending:
|
||||||
return a.name?.compareTo(b.name ?? "") ?? 0;
|
return a.name?.compareTo(b.name ?? "") ?? 0;
|
||||||
case SortBy.oldest:
|
case SortBy.descending:
|
||||||
final aDate = parseSpotifyAlbumDate(a.album);
|
return b.name?.compareTo(a.name ?? "") ?? 0;
|
||||||
final bDate = parseSpotifyAlbumDate(b.album);
|
|
||||||
return aDate.compareTo(bDate);
|
|
||||||
case SortBy.newest:
|
case SortBy.newest:
|
||||||
final aDate = parseSpotifyAlbumDate(a.album);
|
final aDate = parseSpotifyAlbumDate(a.album);
|
||||||
final bDate = parseSpotifyAlbumDate(b.album);
|
final bDate = parseSpotifyAlbumDate(b.album);
|
||||||
return bDate.compareTo(aDate);
|
return bDate.compareTo(aDate);
|
||||||
case SortBy.descending:
|
case SortBy.oldest:
|
||||||
return b.name?.compareTo(a.name ?? "") ?? 0;
|
final aDate = parseSpotifyAlbumDate(a.album);
|
||||||
|
final bDate = parseSpotifyAlbumDate(b.album);
|
||||||
|
return aDate.compareTo(bDate);
|
||||||
|
case SortBy.duration:
|
||||||
|
return a.durationMs?.compareTo(b.durationMs ?? 0) ?? 0;
|
||||||
|
case SortBy.artist:
|
||||||
|
return a.artists?.first.name?.compareTo(b.artists?.first.name ?? "") ?? 0;
|
||||||
|
case SortBy.album:
|
||||||
|
return a.album?.name?.compareTo(b.album?.name ?? "") ?? 0;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user