Skip to content

Commit

Permalink
feat: Sort by Duration (#1238)
Browse files Browse the repository at this point in the history
  • Loading branch information
Kuyumee authored Feb 18, 2024
1 parent 3294f65 commit 6f8271f
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 14 deletions.
5 changes: 3 additions & 2 deletions lib/components/library/user_local_tracks.dart
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,11 @@ enum SortBy {
none,
ascending,
descending,
artist,
album,
newest,
oldest,
duration,
artist,
album,
}

final localTracksProvider = FutureProvider<List<LocalTrack>>((ref) async {
Expand Down
5 changes: 5 additions & 0 deletions lib/components/shared/sort_tracks_dropdown.dart
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@ class SortTracksDropdown extends StatelessWidget {
enabled: value != SortBy.oldest,
title: Text(context.l10n.sort_oldest),
),
PopSheetEntry(
value: SortBy.duration,
enabled: value != SortBy.duration,
title: Text(context.l10n.sort_duration),
),
PopSheetEntry(
value: SortBy.artist,
enabled: value != SortBy.artist,
Expand Down
1 change: 1 addition & 0 deletions lib/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
"sort_z_a": "Sort by Z-A",
"sort_artist": "Sort by Artist",
"sort_album": "Sort by Album",
"sort_duration": "Sort by Duration",
"sort_tracks": "Sort Tracks",
"currently_downloading": "Currently Downloading ({tracks_length})",
"cancel_all": "Cancel All",
Expand Down
24 changes: 12 additions & 12 deletions lib/utils/service_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -292,24 +292,24 @@ abstract class ServiceUtils {
return List<T>.from(tracks)
..sort((a, b) {
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:
return a.name?.compareTo(b.name ?? "") ?? 0;
case SortBy.oldest:
final aDate = parseSpotifyAlbumDate(a.album);
final bDate = parseSpotifyAlbumDate(b.album);
return aDate.compareTo(bDate);
case SortBy.descending:
return b.name?.compareTo(a.name ?? "") ?? 0;
case SortBy.newest:
final aDate = parseSpotifyAlbumDate(a.album);
final bDate = parseSpotifyAlbumDate(b.album);
return bDate.compareTo(aDate);
case SortBy.descending:
return b.name?.compareTo(a.name ?? "") ?? 0;
case SortBy.oldest:
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:
return 0;
}
Expand Down

0 comments on commit 6f8271f

Please sign in to comment.