fix(metadata): preserve the selected recording during download enrichment

This commit is contained in:
zarzet committed 2026-09-30 20:58:18 +07:00
1 parent 88508c806a
commit 2538cdffe1
2 files changed
+70 -4

No files matched your search

+19 -4
View File
@@ -1,6 +1,7 @@
import 'package:spotiflac_android/models/track.dart';
import 'package:spotiflac_android/services/platform_bridge.dart';
import 'package:spotiflac_android/utils/int_utils.dart';
import 'package:spotiflac_android/utils/isrc_utils.dart';
import 'package:spotiflac_android/utils/logger.dart';
import 'package:spotiflac_android/utils/string_utils.dart';
@@ -26,18 +27,32 @@ Future<Track> enrichIncompleteDownloadTrack(
final data = response['track'];
if (data is! Map<String, dynamic>) return track;
String? text(String key) => normalizeOptionalString(data[key]?.toString());
final selectedIsrc = normalizeIsrc(track.isrc);
final resolvedIsrc = normalizeIsrc(text('isrc'));
if (selectedIsrc.isNotEmpty &&
resolvedIsrc.isNotEmpty &&
selectedIsrc != resolvedIsrc) {
AppLogger(
'DownloadMetadata',
).w('Ignoring supplemental metadata for a different recording');
return track;
}
final durationMs = readPositiveInt(data['duration_ms']);
return track.copyWith(
id: text('spotify_id') ?? track.id,
name: text('name') ?? track.name,
artistName: text('artists') ?? track.artistName,
// This lookup fills missing credits; the selected track still determines
// which recording is downloaded and named (including remix qualifiers).
name: normalizeOptionalString(track.name) ?? text('name') ?? track.name,
artistName:
normalizeOptionalString(track.artistName) ??
text('artists') ??
track.artistName,
albumName: text('album_name') ?? track.albumName,
albumArtist: text('album_artist') ?? track.albumArtist,
artistId: text('artist_id') ?? text('artistId') ?? track.artistId,
albumId: text('album_id') ?? track.albumId,
coverUrl: text('images') ?? track.coverUrl,
duration: durationMs == null ? track.duration : durationMs ~/ 1000,
isrc: text('isrc') ?? track.isrc,
isrc: normalizeOptionalString(track.isrc) ?? text('isrc'),
trackNumber: readPositiveInt(data['track_number']) ?? track.trackNumber,
discNumber: readPositiveInt(data['disc_number']) ?? track.discNumber,
totalDiscs: readPositiveInt(data['total_discs']) ?? track.totalDiscs,