fix: sorting by date crashes app (#551)

This commit is contained in:
Kingkor Roy Tirtho 2023-08-26 12:20:14 +06:00
parent fb360035ad
commit 48e90a4229
3 changed files with 22 additions and 27 deletions

View File

@ -59,7 +59,7 @@ class DownloadManagerProvider extends ChangeNotifier {
album: track.album?.name, album: track.album?.name,
albumArtist: track.artists?.map((a) => a.name).join(", "), albumArtist: track.artists?.map((a) => a.name).join(", "),
year: track.album?.releaseDate != null year: track.album?.releaseDate != null
? int.tryParse(track.album!.releaseDate!) ?? 1969 ? int.tryParse(track.album!.releaseDate!.split("-").first) ?? 1969
: 1969, : 1969,
trackNumber: track.trackNumber, trackNumber: track.trackNumber,
discNumber: track.discNumber, discNumber: track.discNumber,

View File

@ -272,6 +272,21 @@ abstract class ServiceUtils {
router.push(location, extra: extra); 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<T> sortTracks<T extends Track>(List<T> tracks, SortBy sortBy) { static List<T> sortTracks<T extends Track>(List<T> tracks, SortBy sortBy) {
if (sortBy == SortBy.none) return tracks; if (sortBy == SortBy.none) return tracks;
return List<T>.from(tracks) return List<T>.from(tracks)
@ -286,12 +301,12 @@ abstract class ServiceUtils {
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.oldest:
final aDate = DateTime.parse(a.album?.releaseDate ?? "2069-01-01"); final aDate = parseSpotifyAlbumDate(a.album);
final bDate = DateTime.parse(b.album?.releaseDate ?? "2069-01-01"); final bDate = parseSpotifyAlbumDate(b.album);
return aDate.compareTo(bDate); return aDate.compareTo(bDate);
case SortBy.newest: case SortBy.newest:
final aDate = DateTime.parse(a.album?.releaseDate ?? "2069-01-01"); final aDate = parseSpotifyAlbumDate(a.album);
final bDate = DateTime.parse(b.album?.releaseDate ?? "2069-01-01"); final bDate = parseSpotifyAlbumDate(b.album);
return bDate.compareTo(aDate); return bDate.compareTo(aDate);
case SortBy.descending: case SortBy.descending:
return b.name?.compareTo(a.name ?? "") ?? 0; return b.name?.compareTo(a.name ?? "") ?? 0;

View File

@ -8,9 +8,6 @@ import 'package:path/path.dart';
import 'package:spotube/collections/assets.gen.dart'; import 'package:spotube/collections/assets.gen.dart';
import 'package:spotube/components/shared/links/anchor_button.dart'; import 'package:spotube/components/shared/links/anchor_button.dart';
import 'package:spotify/spotify.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/primitive_utils.dart';
import 'package:spotube/utils/service_utils.dart'; import 'package:spotube/utils/service_utils.dart';
@ -122,29 +119,12 @@ abstract class TypeConversionUtils {
return track; return track;
} }
static SpotubeTrack localTrack_X_Track( static Track localTrack_X_Track(
File file, { File file, {
Metadata? metadata, Metadata? metadata,
String? art, String? art,
}) { }) {
final track = SpotubeTrack( final track = Track();
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,
[],
);
track.album = Album() track.album = Album()
..name = metadata?.album ?? "Spotube" ..name = metadata?.album ?? "Spotube"
..images = [if (art != null) Image()..url = art] ..images = [if (art != null) Image()..url = art]