diff --git a/lib/provider/download_manager_provider.dart b/lib/provider/download_manager_provider.dart index 66a2b30d0..78c072708 100644 --- a/lib/provider/download_manager_provider.dart +++ b/lib/provider/download_manager_provider.dart @@ -59,7 +59,7 @@ class DownloadManagerProvider extends ChangeNotifier { album: track.album?.name, albumArtist: track.artists?.map((a) => a.name).join(", "), year: track.album?.releaseDate != null - ? int.tryParse(track.album!.releaseDate!) ?? 1969 + ? int.tryParse(track.album!.releaseDate!.split("-").first) ?? 1969 : 1969, trackNumber: track.trackNumber, discNumber: track.discNumber, diff --git a/lib/utils/service_utils.dart b/lib/utils/service_utils.dart index c80e527d5..0be1dd979 100644 --- a/lib/utils/service_utils.dart +++ b/lib/utils/service_utils.dart @@ -272,6 +272,21 @@ abstract class ServiceUtils { router.push(location, extra: extra); } + static DateTime parseSpotifyAlbumDate(AlbumSimple? album) { + if (album == null || album.releaseDate == null) { + return DateTime.parse("1975-01-01"); + } + + switch (album.releaseDatePrecision ?? DatePrecision.year) { + case DatePrecision.day: + return DateTime.parse(album.releaseDate!); + case DatePrecision.month: + return DateTime.parse("${album.releaseDate}-01"); + case DatePrecision.year: + return DateTime.parse("${album.releaseDate}-01-01"); + } + } + static List sortTracks(List tracks, SortBy sortBy) { if (sortBy == SortBy.none) return tracks; return List.from(tracks) @@ -286,12 +301,12 @@ abstract class ServiceUtils { case SortBy.ascending: return a.name?.compareTo(b.name ?? "") ?? 0; case SortBy.oldest: - final aDate = DateTime.parse(a.album?.releaseDate ?? "2069-01-01"); - final bDate = DateTime.parse(b.album?.releaseDate ?? "2069-01-01"); + final aDate = parseSpotifyAlbumDate(a.album); + final bDate = parseSpotifyAlbumDate(b.album); return aDate.compareTo(bDate); case SortBy.newest: - final aDate = DateTime.parse(a.album?.releaseDate ?? "2069-01-01"); - final bDate = DateTime.parse(b.album?.releaseDate ?? "2069-01-01"); + final aDate = parseSpotifyAlbumDate(a.album); + final bDate = parseSpotifyAlbumDate(b.album); return bDate.compareTo(aDate); case SortBy.descending: return b.name?.compareTo(a.name ?? "") ?? 0; diff --git a/lib/utils/type_conversion_utils.dart b/lib/utils/type_conversion_utils.dart index cf658a0e0..68a8d9a43 100644 --- a/lib/utils/type_conversion_utils.dart +++ b/lib/utils/type_conversion_utils.dart @@ -8,9 +8,6 @@ import 'package:path/path.dart'; import 'package:spotube/collections/assets.gen.dart'; import 'package:spotube/components/shared/links/anchor_button.dart'; import 'package:spotify/spotify.dart'; -import 'package:spotube/models/matched_track.dart'; -import 'package:spotube/models/spotube_track.dart'; -import 'package:spotube/services/youtube/youtube.dart'; import 'package:spotube/utils/primitive_utils.dart'; import 'package:spotube/utils/service_utils.dart'; @@ -122,29 +119,12 @@ abstract class TypeConversionUtils { return track; } - static SpotubeTrack localTrack_X_Track( + static Track localTrack_X_Track( File file, { Metadata? metadata, String? art, }) { - final track = SpotubeTrack( - YoutubeVideoInfo( - searchMode: SearchMode.youtube, - id: "dQw4w9WgXcQ", - title: basenameWithoutExtension(file.path), - duration: Duration(milliseconds: metadata?.durationMs?.toInt() ?? 0), - dislikes: 0, - likes: 0, - thumbnailUrl: art ?? "", - views: 0, - channelName: metadata?.albumArtist ?? "Spotube", - channelId: metadata?.albumArtist ?? "Spotube", - publishedAt: - metadata?.year != null ? DateTime(metadata!.year!) : DateTime(2003), - ), - file.path, - [], - ); + final track = Track(); track.album = Album() ..name = metadata?.album ?? "Spotube" ..images = [if (art != null) Image()..url = art]