mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-07-26 14:01:03 +02:00
refactor(ui): share legacy provider-id resource helpers
legacyProviderIdFromResourceId and stripPrefixedResourceId were copy-pasted in the album, artist, and playlist screens with slightly different null semantics; the shared nullable variant plus explicit ?? 'spotify' fallbacks makes the difference visible at the call sites.
This commit is contained in:
@@ -14,6 +14,7 @@ import 'package:spotiflac_android/services/platform_bridge.dart';
|
||||
import 'package:spotiflac_android/utils/image_cache_utils.dart';
|
||||
import 'package:spotiflac_android/utils/string_utils.dart';
|
||||
import 'package:spotiflac_android/utils/nav_bar_inset.dart';
|
||||
import 'package:spotiflac_android/utils/provider_resource_ids.dart';
|
||||
import 'package:spotiflac_android/widgets/download_service_picker.dart';
|
||||
import 'package:spotiflac_android/widgets/animation_utils.dart';
|
||||
import 'package:spotiflac_android/providers/library_collections_provider.dart';
|
||||
@@ -92,31 +93,17 @@ class _AlbumScreenState extends ConsumerState<AlbumScreen> {
|
||||
bool _tallHeader = false;
|
||||
final ScrollController _scrollController = ScrollController();
|
||||
|
||||
String _legacyProviderIdFromResourceId(String value) {
|
||||
if (value.startsWith('deezer:')) return 'deezer';
|
||||
if (value.startsWith('qobuz:')) return 'qobuz';
|
||||
if (value.startsWith('tidal:')) return 'tidal';
|
||||
if (value.startsWith('spotify:')) return 'spotify';
|
||||
return 'spotify';
|
||||
}
|
||||
|
||||
String _effectiveMetadataProviderIdFromAlbumId() {
|
||||
if (widget.extensionId != null && widget.extensionId!.isNotEmpty) {
|
||||
return widget.extensionId!;
|
||||
}
|
||||
return resolveEffectiveMetadataProvider(
|
||||
_legacyProviderIdFromResourceId(widget.albumId),
|
||||
legacyProviderIdFromResourceId(widget.albumId) ?? 'spotify',
|
||||
ref.read(extensionProvider),
|
||||
);
|
||||
}
|
||||
|
||||
String _stripPrefixedResourceId(String value) {
|
||||
final colonIndex = value.indexOf(':');
|
||||
if (colonIndex <= 0 || colonIndex == value.length - 1) {
|
||||
return value;
|
||||
}
|
||||
return value.substring(colonIndex + 1);
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -336,7 +323,7 @@ class _AlbumScreenState extends ConsumerState<AlbumScreen> {
|
||||
}
|
||||
|
||||
String _metadataResourceId(String providerId) {
|
||||
return _stripPrefixedResourceId(widget.albumId);
|
||||
return stripPrefixedResourceId(widget.albumId);
|
||||
}
|
||||
|
||||
double _albumTitleFontSize() {
|
||||
|
||||
@@ -14,6 +14,7 @@ import 'package:spotiflac_android/providers/local_library_provider.dart';
|
||||
import 'package:spotiflac_android/services/platform_bridge.dart';
|
||||
import 'package:spotiflac_android/utils/string_utils.dart';
|
||||
import 'package:spotiflac_android/utils/nav_bar_inset.dart';
|
||||
import 'package:spotiflac_android/utils/provider_resource_ids.dart';
|
||||
import 'package:spotiflac_android/screens/album_screen.dart';
|
||||
import 'package:spotiflac_android/screens/home_tab.dart'
|
||||
show ExtensionAlbumScreen;
|
||||
@@ -168,31 +169,17 @@ class _ArtistScreenState extends ConsumerState<ArtistScreen> {
|
||||
return _directMetadataProviderId();
|
||||
}
|
||||
|
||||
String _legacyProviderIdFromResourceId(String value) {
|
||||
if (value.startsWith('deezer:')) return 'deezer';
|
||||
if (value.startsWith('qobuz:')) return 'qobuz';
|
||||
if (value.startsWith('tidal:')) return 'tidal';
|
||||
if (value.startsWith('spotify:')) return 'spotify';
|
||||
return 'spotify';
|
||||
}
|
||||
|
||||
String _effectiveMetadataProviderIdFromArtistId() {
|
||||
if (widget.extensionId != null && widget.extensionId!.isNotEmpty) {
|
||||
return widget.extensionId!;
|
||||
}
|
||||
return resolveEffectiveMetadataProvider(
|
||||
_legacyProviderIdFromResourceId(widget.artistId),
|
||||
legacyProviderIdFromResourceId(widget.artistId) ?? 'spotify',
|
||||
ref.read(extensionProvider),
|
||||
);
|
||||
}
|
||||
|
||||
String _stripPrefixedResourceId(String value) {
|
||||
final colonIndex = value.indexOf(':');
|
||||
if (colonIndex <= 0 || colonIndex == value.length - 1) {
|
||||
return value;
|
||||
}
|
||||
return value.substring(colonIndex + 1);
|
||||
}
|
||||
|
||||
String? _directMetadataProviderId() {
|
||||
final providerId = _effectiveMetadataProviderIdFromArtistId();
|
||||
@@ -200,7 +187,7 @@ class _ArtistScreenState extends ConsumerState<ArtistScreen> {
|
||||
}
|
||||
|
||||
String _metadataResourceId(String providerId) {
|
||||
return _stripPrefixedResourceId(widget.artistId);
|
||||
return stripPrefixedResourceId(widget.artistId);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -1104,7 +1091,7 @@ class _ArtistScreenState extends ConsumerState<ArtistScreen> {
|
||||
Future<List<Track>> _fetchAlbumTracks(ArtistAlbum album) async {
|
||||
final providerId = album.providerId;
|
||||
if (providerId != null && providerId.isNotEmpty) {
|
||||
final resourceId = _stripPrefixedResourceId(album.id);
|
||||
final resourceId = stripPrefixedResourceId(album.id);
|
||||
final metadata = await PlatformBridge.getProviderMetadata(
|
||||
providerId,
|
||||
'album',
|
||||
|
||||
@@ -10,6 +10,7 @@ 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/nav_bar_inset.dart';
|
||||
import 'package:spotiflac_android/utils/provider_resource_ids.dart';
|
||||
import 'package:spotiflac_android/providers/settings_provider.dart';
|
||||
import 'package:spotiflac_android/providers/local_library_provider.dart';
|
||||
import 'package:spotiflac_android/widgets/download_service_picker.dart';
|
||||
@@ -57,23 +58,10 @@ class _PlaylistScreenState extends ConsumerState<PlaylistScreen> {
|
||||
String? get _headerVideoUrl =>
|
||||
_resolvedHeaderVideoUrl ?? widget.headerVideoUrl;
|
||||
|
||||
String? _legacyProviderIdFromResourceId(String value) {
|
||||
if (value.startsWith('deezer:')) return 'deezer';
|
||||
if (value.startsWith('qobuz:')) return 'qobuz';
|
||||
if (value.startsWith('tidal:')) return 'tidal';
|
||||
return null;
|
||||
}
|
||||
|
||||
String _stripPrefixedResourceId(String value) {
|
||||
final colonIndex = value.indexOf(':');
|
||||
if (colonIndex <= 0 || colonIndex == value.length - 1) {
|
||||
return value;
|
||||
}
|
||||
return value.substring(colonIndex + 1);
|
||||
}
|
||||
|
||||
String? _metadataProviderId(String playlistId) {
|
||||
final providerId = _legacyProviderIdFromResourceId(playlistId);
|
||||
final providerId = legacyProviderIdFromResourceId(playlistId);
|
||||
if (providerId == null) return null;
|
||||
final effective = resolveEffectiveMetadataProvider(
|
||||
providerId,
|
||||
@@ -83,7 +71,7 @@ class _PlaylistScreenState extends ConsumerState<PlaylistScreen> {
|
||||
}
|
||||
|
||||
String _metadataResourceId(String providerId, String playlistId) {
|
||||
return _stripPrefixedResourceId(playlistId);
|
||||
return stripPrefixedResourceId(playlistId);
|
||||
}
|
||||
|
||||
String? _recommendedDownloadService() {
|
||||
@@ -109,7 +97,7 @@ class _PlaylistScreenState extends ConsumerState<PlaylistScreen> {
|
||||
}
|
||||
|
||||
final trackId = _tracks.firstOrNull?.id ?? '';
|
||||
final trackProviderId = _legacyProviderIdFromResourceId(trackId);
|
||||
final trackProviderId = legacyProviderIdFromResourceId(trackId);
|
||||
if (trackProviderId != null) {
|
||||
return resolveEffectiveDownloadService(
|
||||
trackProviderId,
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
/// Maps a legacy prefixed resource id (e.g. "deezer:123") to its provider id,
|
||||
/// or null when the value carries no known provider prefix.
|
||||
String? legacyProviderIdFromResourceId(String value) {
|
||||
if (value.startsWith('deezer:')) return 'deezer';
|
||||
if (value.startsWith('qobuz:')) return 'qobuz';
|
||||
if (value.startsWith('tidal:')) return 'tidal';
|
||||
if (value.startsWith('spotify:')) return 'spotify';
|
||||
return null;
|
||||
}
|
||||
|
||||
/// Strips a leading "provider:" prefix from a resource id, if present.
|
||||
String stripPrefixedResourceId(String value) {
|
||||
final colonIndex = value.indexOf(':');
|
||||
if (colonIndex <= 0 || colonIndex == value.length - 1) {
|
||||
return value;
|
||||
}
|
||||
return value.substring(colonIndex + 1);
|
||||
}
|
||||
Reference in New Issue
Block a user