fix: 0:00 media duration in queue after application restart #782

This commit is contained in:
Kingkor Roy Tirtho 2023-10-29 20:19:03 +06:00
parent 4956bf367b
commit 83c0b49da9
4 changed files with 33 additions and 60 deletions

View File

@ -4,26 +4,29 @@ import 'package:spotube/extensions/artist_simple.dart';
extension TrackJson on Track { extension TrackJson on Track {
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
return TrackJson.trackToJson(this);
}
static Map<String, dynamic> trackToJson(Track track) {
return { return {
"album": album?.toJson(), "album": track.album?.toJson(),
"artists": artists?.map((artist) => artist.toJson()).toList(), "artists": track.artists?.map((artist) => artist.toJson()).toList(),
"availableMarkets": availableMarkets?.map((e) => e.name).toList(), "available_markets": track.availableMarkets?.map((e) => e.name).toList(),
"discNumber": discNumber, "disc_number": track.discNumber,
"duration": duration.toString(), "duration_ms": track.durationMs,
"durationMs": durationMs, "explicit": track.explicit,
"explicit": explicit, // "external_ids"track.: externalIds,
// "externalIds": externalIds, // "external_urls"track.: externalUrls,
// "externalUrls": externalUrls, "href": track.href,
"href": href, "id": track.id,
"id": id, "is_playable": track.isPlayable,
"isPlayable": isPlayable, // "linked_from"track.: linkedFrom,
// "linkedFrom": linkedFrom, "name": track.name,
"name": name, "popularity": track.popularity,
"popularity": popularity, "preview_rrl": track.previewUrl,
"previewUrl": previewUrl, "track_number": track.trackNumber,
"trackNumber": trackNumber, "type": track.type,
"type": type, "uri": track.uri,
"uri": uri,
}; };
} }
} }

View File

@ -1,6 +1,5 @@
import 'package:spotify/spotify.dart'; import 'package:spotify/spotify.dart';
import 'package:spotube/extensions/album_simple.dart'; import 'package:spotube/extensions/track.dart';
import 'package:spotube/extensions/artist_simple.dart';
class LocalTrack extends Track { class LocalTrack extends Track {
final String path; final String path;
@ -38,22 +37,7 @@ class LocalTrack extends Track {
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
return { return {
"album": album?.toJson(), ...TrackJson.trackToJson(this),
"artists": artists?.map((artist) => artist.toJson()).toList(),
"availableMarkets": availableMarkets?.map((m) => m.name),
"discNumber": discNumber,
"duration": duration.toString(),
"durationMs": durationMs,
"explicit": explicit,
"href": href,
"id": id,
"isPlayable": isPlayable,
"name": name,
"popularity": popularity,
"previewUrl": previewUrl,
"trackNumber": trackNumber,
"type": type,
"uri": uri,
'path': path, 'path': path,
}; };
} }

View File

@ -1,8 +1,7 @@
import 'dart:async'; import 'dart:async';
import 'package:spotify/spotify.dart'; import 'package:spotify/spotify.dart';
import 'package:spotube/extensions/album_simple.dart'; import 'package:spotube/extensions/track.dart';
import 'package:spotube/extensions/artist_simple.dart';
import 'package:spotube/models/matched_track.dart'; import 'package:spotube/models/matched_track.dart';
import 'package:spotube/provider/user_preferences_provider.dart'; import 'package:spotube/provider/user_preferences_provider.dart';
import 'package:spotube/services/youtube/youtube.dart'; import 'package:spotube/services/youtube/youtube.dart';
@ -264,22 +263,7 @@ class SpotubeTrack extends Track {
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
return { return {
// super values // super values
"album": album?.toJson(), ...TrackJson.trackToJson(this),
"artists": artists?.map((artist) => artist.toJson()).toList(),
"availableMarkets": availableMarkets?.map((m) => m.name),
"discNumber": discNumber,
"duration": duration.toString(),
"durationMs": durationMs,
"explicit": explicit,
"href": href,
"id": id,
"isPlayable": isPlayable,
"name": name,
"popularity": popularity,
"previewUrl": previewUrl,
"trackNumber": trackNumber,
"type": type,
"uri": uri,
// this values // this values
"ytTrack": ytTrack.toJson(), "ytTrack": ytTrack.toJson(),
"ytUri": ytUri, "ytUri": ytUri,

View File

@ -54,12 +54,14 @@ class ProxyPlaylist {
} }
} }
/// To make sure proper instance method is used for JSON serialization
/// Otherwise default super.toJson() is used
static Map<String, dynamic> _makeAppropriateTrackJson(Track track) { static Map<String, dynamic> _makeAppropriateTrackJson(Track track) {
if (track is LocalTrack) { return switch (track.runtimeType) {
return track.toJson(); LocalTrack => track.toJson(),
} else { SpotubeTrack => track.toJson(),
return track.toJson(); _ => track.toJson(),
} };
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {