From d47024932d584fe922e49427d566a5a29688ea03 Mon Sep 17 00:00:00 2001 From: kilowatt Date: Sun, 1 Nov 2020 19:32:28 +0300 Subject: [PATCH] Sort favorite tracks by adding date --- lib/api/definitions.dart | 12 ++++++++---- lib/api/definitions.g.dart | 2 ++ lib/ui/library.dart | 1 + 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/api/definitions.dart b/lib/api/definitions.dart index cb295a4..4e46d4e 100644 --- a/lib/api/definitions.dart +++ b/lib/api/definitions.dart @@ -33,11 +33,12 @@ class Track { bool favorite; int diskNumber; bool explicit; + int favoriteDate; List playbackDetails; Track({this.id, this.title, this.duration, this.album, this.playbackDetails, this.albumArt, - this.artists, this.trackNumber, this.offline, this.lyrics, this.favorite, this.diskNumber, this.explicit}); + this.artists, this.trackNumber, this.offline, this.lyrics, this.favorite, this.diskNumber, this.explicit, this.favoriteDate}); String get artistString => artists.map((art) => art.name).join(', '); String get durationString => "${duration.inMinutes}:${duration.inSeconds.remainder(60).toString().padLeft(2, '0')}"; @@ -139,7 +140,8 @@ class Track { lyrics: Lyrics(id: json['LYRICS_ID'].toString()), favorite: favorite, diskNumber: int.parse(json['DISK_NUMBER']??'1'), - explicit: (json['EXPLICIT_LYRICS'].toString() == '1') ? true:false + explicit: (json['EXPLICIT_LYRICS'].toString() == '1') ? true:false, + favoriteDate: json['DATE_ADD'] ); } Map toSQL({off = false}) => { @@ -154,7 +156,8 @@ class Track { 'lyrics': jsonEncode(lyrics.toJson()), 'favorite': (favorite??0)?1:0, 'diskNumber': diskNumber, - 'explicit': explicit?1:0 + 'explicit': explicit?1:0, + 'favoriteDate': favoriteDate }; factory Track.fromSQL(Map data) => Track( id: data['trackId']??data['id'], //If loading from downloads table @@ -170,7 +173,8 @@ class Track { lyrics: Lyrics.fromJson(jsonDecode(data['lyrics'])), favorite: (data['favorite'] == 1) ? true:false, diskNumber: data['diskNumber'], - explicit: (data['explicit'] == 1) ? true:false + explicit: (data['explicit'] == 1) ? true:false, + favoriteDate: data['favoriteDate'] ); factory Track.fromJson(Map json) => _$TrackFromJson(json); diff --git a/lib/api/definitions.g.dart b/lib/api/definitions.g.dart index c995899..1ec82cf 100644 --- a/lib/api/definitions.g.dart +++ b/lib/api/definitions.g.dart @@ -32,6 +32,7 @@ Track _$TrackFromJson(Map json) { favorite: json['favorite'] as bool, diskNumber: json['diskNumber'] as int, explicit: json['explicit'] as bool, + favoriteDate: json['favoriteDate'] as int, ); } @@ -49,6 +50,7 @@ Map _$TrackToJson(Track instance) => { 'diskNumber': instance.diskNumber, 'explicit': instance.explicit, 'playbackDetails': instance.playbackDetails, + 'favoriteDate': instance.favoriteDate, }; Album _$AlbumFromJson(Map json) { diff --git a/lib/ui/library.dart b/lib/ui/library.dart index 83855f4..472c323 100644 --- a/lib/ui/library.dart +++ b/lib/ui/library.dart @@ -225,6 +225,7 @@ class _LibraryTracksState extends State { List get _sorted { List tcopy = List.from(tracks); + tcopy.sort((a, b) => a.favoriteDate.compareTo(b.favoriteDate)); switch (_sort) { case SortType.ALPHABETIC: tcopy.sort((a, b) => a.title.compareTo(b.title));