From fb5204b0a6fb792785500e9135e64495973cd817 Mon Sep 17 00:00:00 2001 From: zarzet Date: Sat, 13 Jun 2026 20:31:24 +0700 Subject: [PATCH] fix(metadata): use high-res cover in track metadata header --- lib/screens/track_metadata_screen.dart | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/screens/track_metadata_screen.dart b/lib/screens/track_metadata_screen.dart index 1df9403a..f1817d6e 100644 --- a/lib/screens/track_metadata_screen.dart +++ b/lib/screens/track_metadata_screen.dart @@ -25,6 +25,7 @@ import 'package:spotiflac_android/utils/mime_utils.dart'; import 'package:spotiflac_android/utils/image_cache_utils.dart'; import 'package:spotiflac_android/utils/string_utils.dart'; import 'package:spotiflac_android/utils/int_utils.dart'; +import 'package:spotiflac_android/utils/nav_bar_inset.dart'; import 'package:spotiflac_android/widgets/audio_analysis_widget.dart'; import 'package:spotiflac_android/widgets/cached_cover_image.dart'; import 'package:spotiflac_android/widgets/settings_group.dart'; @@ -725,8 +726,24 @@ class _TrackMetadataScreenState extends ConsumerState { String get _coverHeroTag => widget.coverHeroTag ?? (_isLocalItem ? 'cover_lib_$_itemId' : 'cover_$_itemId'); - String? get _coverUrl => - _isLocalItem ? null : normalizeRemoteHttpUrl(_downloadItem!.coverUrl); + String? get _coverUrl => _isLocalItem + ? null + : _highResCoverUrl(normalizeRemoteHttpUrl(_downloadItem!.coverUrl)); + + String? _highResCoverUrl(String? url) { + if (url == null) return null; + if (url.contains('ab67616d00001e02')) { + return url.replaceAll('ab67616d00001e02', 'ab67616d0000b273'); + } + final deezerRegex = RegExp(r'/(\d+)x(\d+)-(\d+)-(\d+)-(\d+)-(\d+)\.jpg$'); + if (url.contains('cdn-images.dzcdn.net') && deezerRegex.hasMatch(url)) { + return url.replaceAllMapped( + deezerRegex, + (m) => '/1000x1000-${m[3]}-${m[4]}-${m[5]}-${m[6]}.jpg', + ); + } + return url; + } String? get _localCoverPath => _isLocalItem ? _localLibraryItem!.coverPath : null; String? get _spotifyId => _isLocalItem ? null : _downloadItem!.spotifyId; @@ -1066,6 +1083,7 @@ class _TrackMetadataScreenState extends ConsumerState { Widget build(BuildContext context) { final colorScheme = Theme.of(context).colorScheme; final expandedHeight = _calculateExpandedHeight(context); + final bottomInset = context.navBarBottomInset; return GestureDetector( behavior: HitTestBehavior.translucent, @@ -1144,6 +1162,7 @@ class _TrackMetadataScreenState extends ConsumerState { SliverToBoxAdapter( child: _buildAnimatedTrackContent(context, ref, colorScheme), ), + SliverToBoxAdapter(child: SizedBox(height: bottomInset)), ], ), ),