From 1cea95bbda96e706d097e05e15a9a0c9d9552567 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Thu, 21 Mar 2024 00:30:27 +0600 Subject: [PATCH] refactor: artist name string as extension --- lib/components/album/album_card.dart | 3 ++- lib/components/library/user_local_tracks.dart | 3 ++- lib/components/player/player.dart | 6 ++---- lib/components/player/player_actions.dart | 9 +++------ lib/components/player/player_queue.dart | 4 ++-- lib/components/player/player_track_details.dart | 5 ++--- lib/components/player/sibling_tracks_sheet.dart | 3 ++- lib/components/shared/track_tile/track_tile.dart | 5 ++--- lib/extensions/artist_simple.dart | 6 ++++++ lib/pages/lyrics/plain_lyrics.dart | 4 ++-- lib/pages/lyrics/synced_lyrics.dart | 6 ++---- lib/provider/discord_provider.dart | 5 ++--- lib/provider/download_manager_provider.dart | 3 ++- lib/provider/scrobbler_provider.dart | 5 +++-- lib/services/audio_services/audio_services.dart | 2 +- lib/services/audio_services/windows_audio_service.dart | 4 ++-- lib/utils/type_conversion_utils.dart | 4 ---- 17 files changed, 37 insertions(+), 40 deletions(-) diff --git a/lib/components/album/album_card.dart b/lib/components/album/album_card.dart index 97db9d72..1696fc48 100644 --- a/lib/components/album/album_card.dart +++ b/lib/components/album/album_card.dart @@ -3,6 +3,7 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:spotify/spotify.dart'; import 'package:spotube/components/shared/playbutton_card.dart'; +import 'package:spotube/extensions/artist_simple.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/image.dart'; import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; @@ -59,7 +60,7 @@ class AlbumCard extends HookConsumerWidget { updating.value, title: album.name!, description: - "${album.albumType?.formatted} • ${TypeConversionUtils.artists_X_String(album.artists ?? [])}", + "${album.albumType?.formatted} • ${album.artists?.asString() ?? ""}", onTap: () { ServiceUtils.push(context, "/album/${album.id}", extra: album); }, diff --git a/lib/components/library/user_local_tracks.dart b/lib/components/library/user_local_tracks.dart index b8f647a5..f9b53330 100644 --- a/lib/components/library/user_local_tracks.dart +++ b/lib/components/library/user_local_tracks.dart @@ -21,6 +21,7 @@ import 'package:spotube/components/shared/fallbacks/not_found.dart'; import 'package:spotube/components/shared/inter_scrollbar/inter_scrollbar.dart'; import 'package:spotube/components/shared/sort_tracks_dropdown.dart'; import 'package:spotube/components/shared/track_tile/track_tile.dart'; +import 'package:spotube/extensions/artist_simple.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/models/local_track.dart'; import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; @@ -242,7 +243,7 @@ class UserLocalTracks extends HookConsumerWidget { return sortedTracks .map((e) => ( weightedRatio( - "${e.name} - ${TypeConversionUtils.artists_X_String(e.artists ?? [])}", + "${e.name} - ${e.artists?.asString() ?? ""}", searchController.text, ), e, diff --git a/lib/components/player/player.dart b/lib/components/player/player.dart index 6fcbbd1c..04dd90df 100644 --- a/lib/components/player/player.dart +++ b/lib/components/player/player.dart @@ -16,6 +16,7 @@ import 'package:spotube/components/shared/dialogs/track_details_dialog.dart'; import 'package:spotube/components/shared/page_window_title_bar.dart'; import 'package:spotube/components/shared/image/universal_image.dart'; import 'package:spotube/components/shared/panels/sliding_up_panel.dart'; +import 'package:spotube/extensions/artist_simple.dart'; import 'package:spotube/extensions/constrains.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/image.dart'; @@ -239,10 +240,7 @@ class PlayerView extends HookConsumerWidget { ), if (isLocalTrack) Text( - TypeConversionUtils.artists_X_String< - Artist>( - currentTrack?.artists ?? [], - ), + currentTrack?.artists?.asString() ?? "", style: theme.textTheme.bodyMedium!.copyWith( fontWeight: FontWeight.bold, color: bodyTextColor, diff --git a/lib/components/player/player_actions.dart b/lib/components/player/player_actions.dart index 18168af1..4102e2ba 100644 --- a/lib/components/player/player_actions.dart +++ b/lib/components/player/player_actions.dart @@ -3,11 +3,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:spotify/spotify.dart' hide Offset; import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/components/player/sibling_tracks_sheet.dart'; import 'package:spotube/components/shared/adaptive/adaptive_pop_sheet_list.dart'; import 'package:spotube/components/shared/heart_button.dart'; +import 'package:spotube/extensions/artist_simple.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/duration.dart'; import 'package:spotube/models/local_track.dart'; @@ -16,7 +16,6 @@ import 'package:spotube/provider/download_manager_provider.dart'; import 'package:spotube/provider/authentication_provider.dart'; import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; import 'package:spotube/provider/sleep_timer_provider.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class PlayerActions extends HookConsumerWidget { final MainAxisAlignment mainAxisAlignment; @@ -56,10 +55,8 @@ class PlayerActions extends HookConsumerWidget { (element) => element.name == playlist.activeTrack?.name && element.album?.name == playlist.activeTrack?.album?.name && - TypeConversionUtils.artists_X_String( - element.artists ?? []) == - TypeConversionUtils.artists_X_String( - playlist.activeTrack?.artists ?? []), + element.artists?.asString() == + playlist.activeTrack?.artists?.asString(), ) == true; }, [localTracks, playlist.activeTrack]); diff --git a/lib/components/player/player_queue.dart b/lib/components/player/player_queue.dart index 449b6c2e..141479a6 100644 --- a/lib/components/player/player_queue.dart +++ b/lib/components/player/player_queue.dart @@ -12,11 +12,11 @@ import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/components/shared/fallbacks/not_found.dart'; import 'package:spotube/components/shared/inter_scrollbar/inter_scrollbar.dart'; import 'package:spotube/components/shared/track_tile/track_tile.dart'; +import 'package:spotube/extensions/artist_simple.dart'; import 'package:spotube/extensions/constrains.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/hooks/controllers/use_auto_scroll_controller.dart'; import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class PlayerQueue extends HookConsumerWidget { final bool floating; @@ -55,7 +55,7 @@ class PlayerQueue extends HookConsumerWidget { return tracks .map((e) => ( weightedRatio( - '${e.name!} - ${TypeConversionUtils.artists_X_String(e.artists!)}', + '${e.name!} - ${e.artists?.asString() ?? ""}', searchText.value, ), e diff --git a/lib/components/player/player_track_details.dart b/lib/components/player/player_track_details.dart index fd97fd74..268f4b76 100644 --- a/lib/components/player/player_track_details.dart +++ b/lib/components/player/player_track_details.dart @@ -5,6 +5,7 @@ import 'package:spotify/spotify.dart'; import 'package:spotube/collections/assets.gen.dart'; import 'package:spotube/components/shared/image/universal_image.dart'; import 'package:spotube/components/shared/links/link_text.dart'; +import 'package:spotube/extensions/artist_simple.dart'; import 'package:spotube/extensions/constrains.dart'; import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; import 'package:spotube/utils/service_utils.dart'; @@ -54,9 +55,7 @@ class PlayerTrackDetails extends HookConsumerWidget { ), ), Text( - TypeConversionUtils.artists_X_String( - playback.activeTrack?.artists ?? [], - ), + playback.activeTrack?.artists?.asString() ?? "", overflow: TextOverflow.ellipsis, style: theme.textTheme.bodySmall!.copyWith(color: color), ) diff --git a/lib/components/player/sibling_tracks_sheet.dart b/lib/components/player/sibling_tracks_sheet.dart index c805cb42..a0684075 100644 --- a/lib/components/player/sibling_tracks_sheet.dart +++ b/lib/components/player/sibling_tracks_sheet.dart @@ -10,6 +10,7 @@ import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/components/shared/image/universal_image.dart'; import 'package:spotube/components/shared/inter_scrollbar/inter_scrollbar.dart'; +import 'package:spotube/extensions/artist_simple.dart'; import 'package:spotube/extensions/constrains.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/duration.dart'; @@ -67,7 +68,7 @@ class SiblingTracksSheet extends HookConsumerWidget { ).trim(); final defaultSearchTerm = - "$title - ${TypeConversionUtils.artists_X_String(playlist.activeTrack?.artists ?? [])}"; + "$title - ${playlist.activeTrack?.artists?.asString() ?? ""}"; final searchController = useTextEditingController( text: defaultSearchTerm, ); diff --git a/lib/components/shared/track_tile/track_tile.dart b/lib/components/shared/track_tile/track_tile.dart index afdc19a4..77caaaef 100644 --- a/lib/components/shared/track_tile/track_tile.dart +++ b/lib/components/shared/track_tile/track_tile.dart @@ -11,6 +11,7 @@ import 'package:spotube/components/shared/hover_builder.dart'; import 'package:spotube/components/shared/image/universal_image.dart'; import 'package:spotube/components/shared/links/link_text.dart'; import 'package:spotube/components/shared/track_tile/track_options.dart'; +import 'package:spotube/extensions/artist_simple.dart'; import 'package:spotube/extensions/constrains.dart'; import 'package:spotube/extensions/duration.dart'; import 'package:spotube/extensions/image.dart'; @@ -230,9 +231,7 @@ class TrackTile extends HookConsumerWidget { alignment: Alignment.centerLeft, child: track is LocalTrack ? Text( - TypeConversionUtils.artists_X_String( - track.artists ?? [], - ), + track.artists?.asString() ?? '', ) : ClipRect( child: ConstrainedBox( diff --git a/lib/extensions/artist_simple.dart b/lib/extensions/artist_simple.dart index caf2e510..6a80300e 100644 --- a/lib/extensions/artist_simple.dart +++ b/lib/extensions/artist_simple.dart @@ -11,3 +11,9 @@ extension ArtistJson on ArtistSimple { }; } } + +extension ArtistExtension on List { + String asString() { + return map((e) => e.name?.replaceAll(",", " ")).join(", "); + } +} diff --git a/lib/pages/lyrics/plain_lyrics.dart b/lib/pages/lyrics/plain_lyrics.dart index 96ad8d41..7513ad96 100644 --- a/lib/pages/lyrics/plain_lyrics.dart +++ b/lib/pages/lyrics/plain_lyrics.dart @@ -8,6 +8,7 @@ import 'package:spotify/spotify.dart'; import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/components/lyrics/zoom_controls.dart'; import 'package:spotube/components/shared/shimmers/shimmer_lyrics.dart'; +import 'package:spotube/extensions/artist_simple.dart'; import 'package:spotube/extensions/constrains.dart'; import 'package:spotube/extensions/context.dart'; @@ -55,8 +56,7 @@ class PlainLyrics extends HookConsumerWidget { ), Center( child: Text( - TypeConversionUtils.artists_X_String( - playlist.activeTrack?.artists ?? []), + playlist.activeTrack?.artists?.asString() ?? "", style: (mediaQuery.mdAndUp ? textTheme.headlineSmall : textTheme.titleLarge) diff --git a/lib/pages/lyrics/synced_lyrics.dart b/lib/pages/lyrics/synced_lyrics.dart index 872ad514..5e7a24c8 100644 --- a/lib/pages/lyrics/synced_lyrics.dart +++ b/lib/pages/lyrics/synced_lyrics.dart @@ -3,10 +3,10 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:gap/gap.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:palette_generator/palette_generator.dart'; -import 'package:spotify/spotify.dart' hide Offset; import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/components/lyrics/zoom_controls.dart'; import 'package:spotube/components/shared/shimmers/shimmer_lyrics.dart'; +import 'package:spotube/extensions/artist_simple.dart'; import 'package:spotube/extensions/constrains.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/hooks/controllers/use_auto_scroll_controller.dart'; @@ -16,7 +16,6 @@ import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; import 'package:spotube/provider/spotify/spotify.dart'; import 'package:spotube/services/audio_player/audio_player.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; import 'package:stroke_text/stroke_text.dart'; class SyncedLyrics extends HookConsumerWidget { @@ -84,8 +83,7 @@ class SyncedLyrics extends HookConsumerWidget { if (isModal != true) Center( child: Text( - TypeConversionUtils.artists_X_String( - playlist.activeTrack?.artists ?? []), + playlist.activeTrack?.artists?.asString() ?? "", style: mediaQuery.mdAndUp ? textTheme.headlineSmall : textTheme.titleLarge, diff --git a/lib/provider/discord_provider.dart b/lib/provider/discord_provider.dart index 3aa547a9..e07e2d3b 100644 --- a/lib/provider/discord_provider.dart +++ b/lib/provider/discord_provider.dart @@ -4,9 +4,9 @@ import 'package:flutter_desktop_tools/flutter_desktop_tools.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:spotify/spotify.dart'; import 'package:spotube/collections/env.dart'; +import 'package:spotube/extensions/artist_simple.dart'; import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; import 'package:spotube/provider/user_preferences/user_preferences_provider.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class Discord extends ChangeNotifier { final DiscordRPC? discordRPC; @@ -23,8 +23,7 @@ class Discord extends ChangeNotifier { void updatePresence(Track track) { clear(); - final artistNames = - TypeConversionUtils.artists_X_String(track.artists ?? []); + final artistNames = track.artists?.asString() ?? ""; discordRPC?.updatePresence( DiscordPresence( details: "Song: ${track.name} by $artistNames", diff --git a/lib/provider/download_manager_provider.dart b/lib/provider/download_manager_provider.dart index abf4ed6c..32c5c98c 100644 --- a/lib/provider/download_manager_provider.dart +++ b/lib/provider/download_manager_provider.dart @@ -9,6 +9,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:metadata_god/metadata_god.dart'; import 'package:path/path.dart'; import 'package:spotify/spotify.dart'; +import 'package:spotube/extensions/artist_simple.dart'; import 'package:spotube/extensions/image.dart'; import 'package:spotube/provider/user_preferences/user_preferences_provider.dart'; import 'package:spotube/services/download_manager/download_manager.dart'; @@ -137,7 +138,7 @@ class DownloadManagerProvider extends ChangeNotifier { String getTrackFileUrl(Track track) { final name = - "${track.name} - ${TypeConversionUtils.artists_X_String(track.artists ?? [])}.${downloadCodec.name}"; + "${track.name} - ${track.artists?.asString() ?? ""}.${downloadCodec.name}"; return join(downloadDirectory, PrimitiveUtils.toSafeFileName(name)); } diff --git a/lib/provider/scrobbler_provider.dart b/lib/provider/scrobbler_provider.dart index bf234e62..0c204664 100644 --- a/lib/provider/scrobbler_provider.dart +++ b/lib/provider/scrobbler_provider.dart @@ -5,6 +5,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:scrobblenaut/scrobblenaut.dart'; import 'package:spotify/spotify.dart'; import 'package:spotube/collections/env.dart'; +import 'package:spotube/extensions/artist_simple.dart'; import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; import 'package:spotube/utils/persisted_state_notifier.dart'; import 'package:spotube/utils/type_conversion_utils.dart'; @@ -85,14 +86,14 @@ class ScrobblerNotifier extends PersistedStateNotifier { Future love(Track track) async { await state?.scrobblenaut.track.love( - artist: TypeConversionUtils.artists_X_String(track.artists!), + artist: track.artists!.asString(), track: track.name!, ); } Future unlove(Track track) async { await state?.scrobblenaut.track.unLove( - artist: TypeConversionUtils.artists_X_String(track.artists!), + artist: track.artists!.asString(), track: track.name!, ); } diff --git a/lib/services/audio_services/audio_services.dart b/lib/services/audio_services/audio_services.dart index 068b41ba..4fa0ae1d 100644 --- a/lib/services/audio_services/audio_services.dart +++ b/lib/services/audio_services/audio_services.dart @@ -47,7 +47,7 @@ class AudioServices { id: track.id!, album: track.album?.name ?? "", title: track.name!, - artist: TypeConversionUtils.artists_X_String(track.artists ?? []), + artist: track.artists?.toString() ?? "", duration: track is SourcedTrack ? track.sourceInfo.duration : Duration(milliseconds: track.durationMs ?? 0), diff --git a/lib/services/audio_services/windows_audio_service.dart b/lib/services/audio_services/windows_audio_service.dart index 2df0e9fe..8a58ecd8 100644 --- a/lib/services/audio_services/windows_audio_service.dart +++ b/lib/services/audio_services/windows_audio_service.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:smtc_windows/smtc_windows.dart'; import 'package:spotify/spotify.dart'; +import 'package:spotube/extensions/artist_simple.dart'; import 'package:spotube/extensions/image.dart'; import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; import 'package:spotube/services/audio_player/audio_player.dart'; @@ -85,8 +86,7 @@ class WindowsAudioService { MusicMetadata( title: track.name!, albumArtist: track.artists?.firstOrNull?.name ?? "Unknown", - artist: - TypeConversionUtils.artists_X_String(track.artists ?? []), + artist: track.artists?.asString() ?? "Unknown", album: track.album?.name ?? "Unknown", thumbnail: (track.album?.images).asUrlString( placeholder: ImagePlaceholder.albumArt, diff --git a/lib/utils/type_conversion_utils.dart b/lib/utils/type_conversion_utils.dart index 639299a1..668123eb 100644 --- a/lib/utils/type_conversion_utils.dart +++ b/lib/utils/type_conversion_utils.dart @@ -17,10 +17,6 @@ enum ImagePlaceholder { } abstract class TypeConversionUtils { - static String artists_X_String(List artists) { - return artists.map((e) => e.name?.replaceAll(",", " ")).join(", "); - } - static Widget artists_X_ClickableArtists( List artists, { WrapCrossAlignment crossAxisAlignment = WrapCrossAlignment.center,