From cea6a58c18ac99f08b44091291a87ff4adf67a11 Mon Sep 17 00:00:00 2001 From: zarzet Date: Sat, 11 Jul 2026 17:31:11 +0700 Subject: [PATCH] refactor(playlist): parse tracks via Track.fromBackendMap Removes the screen's private copy of the backend-map parser; the factory is a strict superset (broader duration coercion, source/albumType/ itemType, and empty-spotify_id fallback to the native id). --- lib/screens/playlist_screen.dart | 38 +------------------------------- 1 file changed, 1 insertion(+), 37 deletions(-) diff --git a/lib/screens/playlist_screen.dart b/lib/screens/playlist_screen.dart index 438446af..7ee8f08b 100644 --- a/lib/screens/playlist_screen.dart +++ b/lib/screens/playlist_screen.dart @@ -8,7 +8,6 @@ import 'package:spotiflac_android/providers/download_queue_provider.dart'; import 'package:spotiflac_android/providers/extension_provider.dart'; import 'package:spotiflac_android/providers/library_collections_provider.dart'; import 'package:spotiflac_android/utils/image_cache_utils.dart'; -import 'package:spotiflac_android/utils/string_utils.dart'; import 'package:spotiflac_android/utils/cover_art_utils.dart'; import 'package:spotiflac_android/utils/nav_bar_inset.dart'; import 'package:spotiflac_android/utils/provider_resource_ids.dart'; @@ -154,7 +153,7 @@ class _PlaylistScreenState extends ConsumerState { final trackList = result['track_list'] as List? ?? []; final tracks = trackList - .map((t) => _parseTrack(t as Map)) + .map((t) => Track.fromBackendMap(t as Map)) .toList(); final headerVideo = playlistInfo?['header_video']?.toString(); @@ -180,41 +179,6 @@ class _PlaylistScreenState extends ConsumerState { } } - Track _parseTrack(Map data) { - int durationMs = 0; - final durationValue = data['duration_ms']; - if (durationValue is int) { - durationMs = durationValue; - } else if (durationValue is double) { - durationMs = durationValue.toInt(); - } - - return Track( - id: (data['spotify_id'] ?? data['id'] ?? '').toString(), - name: (data['name'] ?? '').toString(), - artistName: (data['artists'] ?? data['artist'] ?? '').toString(), - albumName: (data['album_name'] ?? data['album'] ?? '').toString(), - albumArtist: data['album_artist']?.toString(), - artistId: (data['artist_id'] ?? data['artistId'])?.toString(), - albumId: data['album_id']?.toString(), - coverUrl: normalizeCoverReference( - (data['cover_url'] ?? data['images'])?.toString(), - ), - isrc: data['isrc']?.toString(), - duration: (durationMs / 1000).round(), - trackNumber: data['track_number'] as int?, - discNumber: data['disc_number'] as int?, - totalDiscs: data['total_discs'] as int?, - releaseDate: data['release_date']?.toString(), - totalTracks: data['total_tracks'] as int?, - composer: data['composer']?.toString(), - audioQuality: data['audio_quality']?.toString(), - audioModes: data['audio_modes']?.toString(), - previewUrl: data['preview_url']?.toString(), - explicit: parseExplicitFlag(data['explicit']), - ); - } - void _onScroll() { final expandedHeight = _calculateExpandedHeight(context); final shouldShow =