mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 16:05:18 +00:00
fix: sorting by date crashes app (#551)
This commit is contained in:
parent
fb360035ad
commit
48e90a4229
@ -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,
|
||||||
|
@ -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;
|
||||||
|
@ -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]
|
||||||
|
Loading…
Reference in New Issue
Block a user