fix(metadata): preserve track tags across collection screens

This commit is contained in:
zarzet
2026-09-07 18:01:37 +07:00
parent c27dc7c1b6
commit cadd60ce8d
5 changed files with 247 additions and 48 deletions
+7
View File
@@ -320,6 +320,13 @@ class _AlbumScreenState extends ConsumerState<AlbumScreen>
totalTracksFallback ??
_albumTotalTracks,
composer: data['composer']?.toString(),
genre: data['genre']?.toString(),
label: data['label']?.toString(),
copyright: data['copyright']?.toString(),
comment: data['comment']?.toString(),
upc: normalizeOptionalString(
(data['upc'] ?? data['barcode'])?.toString(),
),
audioQuality: data['audio_quality']?.toString(),
audioModes: data['audio_modes']?.toString(),
previewUrl: data['preview_url']?.toString(),
+9
View File
@@ -428,6 +428,15 @@ class _ArtistScreenState extends ConsumerState<ArtistScreen>
album?.albumType,
totalTracks: data['total_tracks'] as int? ?? album?.totalTracks,
composer: data['composer']?.toString(),
genre: data['genre']?.toString(),
label: data['label']?.toString(),
copyright: data['copyright']?.toString(),
comment: data['comment']?.toString(),
upc: normalizeOptionalString(
(data['upc'] ?? data['barcode'])?.toString(),
),
audioQuality: data['audio_quality']?.toString(),
audioModes: data['audio_modes']?.toString(),
source: data['provider_id']?.toString() ?? widget.extensionId,
previewUrl: data['preview_url']?.toString(),
explicit: parseExplicitFlag(data['explicit']),
+3 -48
View File
@@ -1018,10 +1018,8 @@ class _ExtensionAlbumScreenState extends ConsumerState<ExtensionAlbumScreen> {
int? totalTracksFallback,
}) {
final base = Track.fromBackendMap(data, source: widget.extensionId);
return Track(
return base.copyWith(
id: (data['id'] ?? '').toString(),
name: base.name,
artistName: base.artistName,
albumName: (data['album_name'] ?? widget.albumName).toString(),
albumArtist: normalizeOptionalString(data['album_artist']?.toString()),
artistId: base.artistId ?? _artistId,
@@ -1030,20 +1028,9 @@ class _ExtensionAlbumScreenState extends ConsumerState<ExtensionAlbumScreen> {
data['cover_url']?.toString(),
widget.coverUrl,
),
isrc: base.isrc,
duration: (_legacyTrackDurationMs(data) / 1000).round(),
trackNumber: base.trackNumber,
discNumber: base.discNumber,
totalDiscs: base.totalDiscs,
releaseDate: base.releaseDate,
albumType: base.albumType ?? albumTypeFallback ?? _albumType,
totalTracks: base.totalTracks ?? totalTracksFallback ?? _albumTotalTracks,
composer: base.composer,
source: base.source,
audioQuality: base.audioQuality,
audioModes: base.audioModes,
previewUrl: base.previewUrl,
explicit: base.explicit,
);
}
@@ -1170,30 +1157,13 @@ class _ExtensionPlaylistScreenState
source: widget.extensionId,
playlistName: widget.playlistName,
);
return Track(
return base.copyWith(
id: (data['id'] ?? '').toString(),
name: base.name,
artistName: base.artistName,
albumName: base.albumName,
artistId: base.artistId,
albumId: base.albumId,
coverUrl: _resolveTrackCoverUrl(
data['cover_url']?.toString(),
widget.coverUrl,
),
isrc: base.isrc,
duration: (_legacyTrackDurationMs(data) / 1000).round(),
trackNumber: base.trackNumber,
discNumber: base.discNumber,
totalDiscs: base.totalDiscs,
releaseDate: base.releaseDate,
totalTracks: base.totalTracks,
composer: base.composer,
source: base.source,
audioQuality: base.audioQuality,
audioModes: base.audioModes,
previewUrl: base.previewUrl,
explicit: base.explicit,
);
}
@@ -1341,26 +1311,11 @@ class _ExtensionArtistScreenState extends ConsumerState<ExtensionArtistScreen>
Track _parseTrack(Map<String, dynamic> data) {
final base = Track.fromBackendMap(data);
return Track(
return base.copyWith(
id: (data['id'] ?? data['spotify_id'] ?? '').toString(),
name: base.name,
artistName: base.artistName,
albumName: base.albumName,
albumArtist: base.albumArtist,
artistId: base.artistId ?? widget.artistId,
albumId: base.albumId,
coverUrl: base.coverUrl,
isrc: base.isrc,
duration: (_legacyTrackDurationMs(data) / 1000).round(),
trackNumber: base.trackNumber,
discNumber: base.discNumber,
totalDiscs: base.totalDiscs,
releaseDate: base.releaseDate,
totalTracks: base.totalTracks,
composer: base.composer,
source: (data['provider_id'] ?? widget.extensionId).toString(),
previewUrl: base.previewUrl,
explicit: base.explicit,
);
}