From 9f96b5c537ef485e2ce15318bd00357b910c7928 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Thu, 21 Mar 2024 00:48:21 +0600 Subject: [PATCH] refactor: use extension methods for simple album to album and simple track to track conversion --- lib/components/album/album_card.dart | 7 +- lib/components/artist/artist_card.dart | 1 - .../playlist_generate/simple_track_tile.dart | 1 - lib/components/library/user_albums.dart | 8 +- .../library/user_downloads/download_item.dart | 1 - lib/components/library/user_local_tracks.dart | 4 +- lib/components/player/player.dart | 2 +- .../player/player_track_details.dart | 1 - .../player/sibling_tracks_sheet.dart | 1 - lib/components/playlist/playlist_card.dart | 1 - .../playlist/playlist_create_dialog.dart | 1 - lib/components/root/bottom_player.dart | 1 - lib/components/root/sidebar.dart | 1 - .../dialogs/playlist_add_track_dialog.dart | 1 - .../shared/track_tile/track_options.dart | 2 +- .../shared/track_tile/track_tile.dart | 1 - lib/extensions/album_simple.dart | 20 ++++- lib/extensions/image.dart | 8 +- lib/extensions/track.dart | 64 ++++++++++++- lib/models/local_track.dart | 2 +- lib/pages/album/album.dart | 1 - lib/pages/artist/section/footer.dart | 2 +- lib/pages/artist/section/header.dart | 1 - .../playlist_generate/playlist_generate.dart | 1 - lib/pages/lyrics/lyrics.dart | 1 - lib/pages/lyrics/plain_lyrics.dart | 2 - lib/pages/playlist/playlist.dart | 1 - lib/pages/search/sections/albums.dart | 4 +- lib/pages/track/track.dart | 2 +- lib/provider/download_manager_provider.dart | 1 - .../proxy_playlist_provider.dart | 1 - lib/provider/scrobbler_provider.dart | 1 - lib/provider/spotify/album/releases.dart | 5 +- lib/provider/spotify/album/tracks.dart | 5 +- lib/provider/spotify/spotify.dart | 3 +- .../audio_services/audio_services.dart | 1 - .../audio_services/linux_audio_service.dart | 1 - .../audio_services/windows_audio_service.dart | 1 - lib/utils/type_conversion_utils.dart | 89 ------------------- 39 files changed, 105 insertions(+), 146 deletions(-) delete mode 100644 lib/utils/type_conversion_utils.dart diff --git a/lib/components/album/album_card.dart b/lib/components/album/album_card.dart index 1696fc48..083c1949 100644 --- a/lib/components/album/album_card.dart +++ b/lib/components/album/album_card.dart @@ -6,11 +6,11 @@ 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/extensions/track.dart'; 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/service_utils.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; extension FormattedAlbumType on AlbumType { String get formatted => name.replaceFirst(name[0], name[0].toUpperCase()); @@ -41,10 +41,7 @@ class AlbumCard extends HookConsumerWidget { Future> fetchAllTrack() async { if (album.tracks != null && album.tracks!.isNotEmpty) { - return album.tracks! - .map((track) => - TypeConversionUtils.simpleTrack_X_Track(track, album)) - .toList(); + return album.tracks!.map((track) => track.asTrack(album)).toList(); } await ref.read(albumTracksProvider(album).future); return ref.read(albumTracksProvider(album).notifier).fetchAll(); diff --git a/lib/components/artist/artist_card.dart b/lib/components/artist/artist_card.dart index 322ad501..ebe18e72 100644 --- a/lib/components/artist/artist_card.dart +++ b/lib/components/artist/artist_card.dart @@ -11,7 +11,6 @@ import 'package:spotube/hooks/utils/use_breakpoint_value.dart'; import 'package:spotube/hooks/utils/use_brightness_value.dart'; import 'package:spotube/provider/blacklist_provider.dart'; import 'package:spotube/utils/service_utils.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class ArtistCard extends HookConsumerWidget { final Artist artist; diff --git a/lib/components/library/playlist_generate/simple_track_tile.dart b/lib/components/library/playlist_generate/simple_track_tile.dart index 08d5060f..cf4ddb1a 100644 --- a/lib/components/library/playlist_generate/simple_track_tile.dart +++ b/lib/components/library/playlist_generate/simple_track_tile.dart @@ -5,7 +5,6 @@ import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/components/shared/image/universal_image.dart'; import 'package:spotube/extensions/image.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class SimpleTrackTile extends HookWidget { final Track track; diff --git a/lib/components/library/user_albums.dart b/lib/components/library/user_albums.dart index 07ba7a40..be421a40 100644 --- a/lib/components/library/user_albums.dart +++ b/lib/components/library/user_albums.dart @@ -12,12 +12,11 @@ import 'package:spotube/components/shared/fallbacks/not_found.dart'; import 'package:spotube/components/shared/inter_scrollbar/inter_scrollbar.dart'; import 'package:spotube/components/shared/fallbacks/anonymous_fallback.dart'; import 'package:spotube/components/shared/waypoint.dart'; +import 'package:spotube/extensions/album_simple.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/provider/authentication_provider.dart'; import 'package:spotube/provider/spotify/spotify.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; - class UserAlbums extends HookConsumerWidget { const UserAlbums({super.key}); @@ -99,10 +98,7 @@ class UserAlbums extends HookConsumerWidget { mainAxisAlignment: MainAxisAlignment.center, children: [NotFound()], ), - for (final album in albums) - AlbumCard( - TypeConversionUtils.simpleAlbum_X_Album(album), - ), + for (final album in albums) AlbumCard(album.toAlbum()), if (albums.isNotEmpty && albumsQuery.asData?.value.hasMore == true) Skeletonizer( diff --git a/lib/components/library/user_downloads/download_item.dart b/lib/components/library/user_downloads/download_item.dart index aed567ab..a145fdad 100644 --- a/lib/components/library/user_downloads/download_item.dart +++ b/lib/components/library/user_downloads/download_item.dart @@ -10,7 +10,6 @@ import 'package:spotube/extensions/image.dart'; import 'package:spotube/provider/download_manager_provider.dart'; import 'package:spotube/services/download_manager/download_status.dart'; import 'package:spotube/services/sourced_track/sourced_track.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class DownloadItem extends HookConsumerWidget { final Track track; diff --git a/lib/components/library/user_local_tracks.dart b/lib/components/library/user_local_tracks.dart index f9b53330..5450bc34 100644 --- a/lib/components/library/user_local_tracks.dart +++ b/lib/components/library/user_local_tracks.dart @@ -23,11 +23,11 @@ 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/extensions/track.dart'; import 'package:spotube/models/local_track.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/service_utils.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; import 'package:flutter_rust_bridge/flutter_rust_bridge.dart' show FfiException; const supportedAudioTypes = [ @@ -112,7 +112,7 @@ final localTracksProvider = FutureProvider>((ref) async { final tracks = filesWithMetadata .map( (fileWithMetadata) => LocalTrack.fromTrack( - track: TypeConversionUtils.localTrack_X_Track( + track: Track().fromFile( fileWithMetadata["file"], metadata: fileWithMetadata["metadata"], art: fileWithMetadata["art"], diff --git a/lib/components/player/player.dart b/lib/components/player/player.dart index 941bc3eb..5559be73 100644 --- a/lib/components/player/player.dart +++ b/lib/components/player/player.dart @@ -27,7 +27,7 @@ import 'package:spotube/pages/lyrics/lyrics.dart'; import 'package:spotube/provider/authentication_provider.dart'; import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; import 'package:spotube/services/sourced_track/sources/youtube.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; + import 'package:url_launcher/url_launcher_string.dart'; class PlayerView extends HookConsumerWidget { diff --git a/lib/components/player/player_track_details.dart b/lib/components/player/player_track_details.dart index bbf8c995..95fecdc2 100644 --- a/lib/components/player/player_track_details.dart +++ b/lib/components/player/player_track_details.dart @@ -10,7 +10,6 @@ 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'; -import 'package:spotube/utils/type_conversion_utils.dart'; class PlayerTrackDetails extends HookConsumerWidget { final String? albumArt; diff --git a/lib/components/player/sibling_tracks_sheet.dart b/lib/components/player/sibling_tracks_sheet.dart index a0684075..99ab223f 100644 --- a/lib/components/player/sibling_tracks_sheet.dart +++ b/lib/components/player/sibling_tracks_sheet.dart @@ -25,7 +25,6 @@ import 'package:spotube/services/sourced_track/sources/jiosaavn.dart'; import 'package:spotube/services/sourced_track/sources/piped.dart'; import 'package:spotube/services/sourced_track/sources/youtube.dart'; import 'package:spotube/utils/service_utils.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; final sourceInfoToIconMap = { YoutubeSourceInfo: const Icon(SpotubeIcons.youtube, color: Color(0xFFFF0000)), diff --git a/lib/components/playlist/playlist_card.dart b/lib/components/playlist/playlist_card.dart index 83e25a85..8915e97a 100644 --- a/lib/components/playlist/playlist_card.dart +++ b/lib/components/playlist/playlist_card.dart @@ -8,7 +8,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/service_utils.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class PlaylistCard extends HookConsumerWidget { final PlaylistSimple playlist; diff --git a/lib/components/playlist/playlist_create_dialog.dart b/lib/components/playlist/playlist_create_dialog.dart index cae51444..bac98b64 100644 --- a/lib/components/playlist/playlist_create_dialog.dart +++ b/lib/components/playlist/playlist_create_dialog.dart @@ -17,7 +17,6 @@ import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/image.dart'; import 'package:spotube/provider/spotify/spotify.dart'; import 'package:spotube/provider/spotify_provider.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class PlaylistCreateDialog extends HookConsumerWidget { /// Track ids to add to the playlist diff --git a/lib/components/root/bottom_player.dart b/lib/components/root/bottom_player.dart index e6cf17dc..16633f7c 100644 --- a/lib/components/root/bottom_player.dart +++ b/lib/components/root/bottom_player.dart @@ -23,7 +23,6 @@ import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; import 'package:spotube/provider/user_preferences/user_preferences_provider.dart'; import 'package:spotube/provider/user_preferences/user_preferences_state.dart'; import 'package:spotube/utils/platform.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class BottomPlayer extends HookConsumerWidget { BottomPlayer({super.key}); diff --git a/lib/components/root/sidebar.dart b/lib/components/root/sidebar.dart index 9049ecf1..903e812e 100644 --- a/lib/components/root/sidebar.dart +++ b/lib/components/root/sidebar.dart @@ -21,7 +21,6 @@ import 'package:spotube/provider/spotify/spotify.dart'; import 'package:spotube/provider/user_preferences/user_preferences_provider.dart'; import 'package:spotube/provider/user_preferences/user_preferences_state.dart'; import 'package:spotube/utils/platform.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class Sidebar extends HookConsumerWidget { final int? selectedIndex; diff --git a/lib/components/shared/dialogs/playlist_add_track_dialog.dart b/lib/components/shared/dialogs/playlist_add_track_dialog.dart index 28044b41..5d493a68 100644 --- a/lib/components/shared/dialogs/playlist_add_track_dialog.dart +++ b/lib/components/shared/dialogs/playlist_add_track_dialog.dart @@ -9,7 +9,6 @@ import 'package:spotube/components/shared/image/universal_image.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/image.dart'; import 'package:spotube/provider/spotify/spotify.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class PlaylistAddTrackDialog extends HookConsumerWidget { /// The id of the playlist this dialog was opened from diff --git a/lib/components/shared/track_tile/track_options.dart b/lib/components/shared/track_tile/track_options.dart index 1288783e..76c91003 100644 --- a/lib/components/shared/track_tile/track_options.dart +++ b/lib/components/shared/track_tile/track_options.dart @@ -26,7 +26,7 @@ import 'package:spotube/provider/download_manager_provider.dart'; import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; import 'package:spotube/provider/spotify/spotify.dart'; import 'package:spotube/provider/spotify_provider.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; + import 'package:url_launcher/url_launcher_string.dart'; enum TrackOptionValue { diff --git a/lib/components/shared/track_tile/track_tile.dart b/lib/components/shared/track_tile/track_tile.dart index 930d922c..897abdae 100644 --- a/lib/components/shared/track_tile/track_tile.dart +++ b/lib/components/shared/track_tile/track_tile.dart @@ -19,7 +19,6 @@ import 'package:spotube/extensions/image.dart'; import 'package:spotube/models/local_track.dart'; import 'package:spotube/provider/blacklist_provider.dart'; import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class TrackTile extends HookConsumerWidget { /// [index] will not be shown if null diff --git a/lib/extensions/album_simple.dart b/lib/extensions/album_simple.dart index 00db4dca..7c8ae09e 100644 --- a/lib/extensions/album_simple.dart +++ b/lib/extensions/album_simple.dart @@ -1,6 +1,6 @@ import 'package:spotify/spotify.dart'; -extension AlbumJson on AlbumSimple { +extension AlbumExtensions on AlbumSimple { Map toJson() { return { "albumType": albumType?.name, @@ -15,4 +15,22 @@ extension AlbumJson on AlbumSimple { .toList(), }; } + + Album toAlbum() { + Album album = Album(); + album.albumType = albumType; + album.artists = artists; + album.availableMarkets = availableMarkets; + album.externalUrls = externalUrls; + album.href = href; + album.id = id; + album.images = images; + album.name = name; + album.releaseDate = releaseDate; + album.releaseDatePrecision = releaseDatePrecision; + album.tracks = tracks; + album.type = type; + album.uri = uri; + return album; + } } diff --git a/lib/extensions/image.dart b/lib/extensions/image.dart index f84bd37a..ee78653a 100644 --- a/lib/extensions/image.dart +++ b/lib/extensions/image.dart @@ -1,9 +1,15 @@ import 'package:spotify/spotify.dart'; import 'package:spotube/collections/assets.gen.dart'; import 'package:spotube/utils/primitive_utils.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; import 'package:collection/collection.dart'; +enum ImagePlaceholder { + albumArt, + artist, + collection, + online, +} + extension SpotifyImageExtensions on List? { String asUrlString({ int index = 1, diff --git a/lib/extensions/track.dart b/lib/extensions/track.dart index 51498b33..d8258a6d 100644 --- a/lib/extensions/track.dart +++ b/lib/extensions/track.dart @@ -1,10 +1,46 @@ +import 'dart:io'; + +import 'package:metadata_god/metadata_god.dart'; +import 'package:path/path.dart'; import 'package:spotify/spotify.dart'; import 'package:spotube/extensions/album_simple.dart'; import 'package:spotube/extensions/artist_simple.dart'; -extension TrackJson on Track { +extension TrackExtensions on Track { + Track fromFile( + File file, { + Metadata? metadata, + String? art, + }) { + album = Album() + ..name = metadata?.album ?? "Unknown" + ..images = [if (art != null) Image()..url = art] + ..genres = [if (metadata?.genre != null) metadata!.genre!] + ..artists = [ + Artist() + ..name = metadata?.albumArtist ?? "Unknown" + ..id = metadata?.albumArtist ?? "Unknown" + ..type = "artist", + ] + ..id = metadata?.album + ..releaseDate = metadata?.year?.toString(); + artists = [ + Artist() + ..name = metadata?.artist ?? "Unknown" + ..id = metadata?.artist ?? "Unknown" + ]; + + id = metadata?.title ?? basenameWithoutExtension(file.path); + name = metadata?.title ?? basenameWithoutExtension(file.path); + type = "track"; + uri = file.path; + durationMs = (metadata?.durationMs?.toInt() ?? 0); + + return this; + } + Map toJson() { - return TrackJson.trackToJson(this); + return TrackExtensions.trackToJson(this); } static Map trackToJson(Track track) { @@ -30,3 +66,27 @@ extension TrackJson on Track { }; } } + +extension TrackSimpleExtensions on TrackSimple { + Track asTrack(AlbumSimple album) { + Track track = Track(); + track.name = name; + track.album = album; + track.artists = artists; + track.availableMarkets = availableMarkets; + track.discNumber = discNumber; + track.durationMs = durationMs; + track.explicit = explicit; + track.externalUrls = externalUrls; + track.href = href; + track.id = id; + track.isPlayable = isPlayable; + track.linkedFrom = linkedFrom; + track.name = name; + track.previewUrl = previewUrl; + track.trackNumber = trackNumber; + track.type = type; + track.uri = uri; + return track; + } +} diff --git a/lib/models/local_track.dart b/lib/models/local_track.dart index 134cd327..923f5f26 100644 --- a/lib/models/local_track.dart +++ b/lib/models/local_track.dart @@ -37,7 +37,7 @@ class LocalTrack extends Track { Map toJson() { return { - ...TrackJson.trackToJson(this), + ...TrackExtensions.trackToJson(this), 'path': path, }; } diff --git a/lib/pages/album/album.dart b/lib/pages/album/album.dart index 0f36756f..7c03b6dd 100644 --- a/lib/pages/album/album.dart +++ b/lib/pages/album/album.dart @@ -6,7 +6,6 @@ import 'package:spotube/components/shared/tracks_view/track_view_props.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/image.dart'; import 'package:spotube/provider/spotify/spotify.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class AlbumPage extends HookConsumerWidget { final AlbumSimple album; diff --git a/lib/pages/artist/section/footer.dart b/lib/pages/artist/section/footer.dart index c53f2c54..835dbdd3 100644 --- a/lib/pages/artist/section/footer.dart +++ b/lib/pages/artist/section/footer.dart @@ -7,7 +7,7 @@ import 'package:spotube/components/shared/image/universal_image.dart'; import 'package:spotube/extensions/constrains.dart'; import 'package:spotube/extensions/image.dart'; import 'package:spotube/provider/spotify/spotify.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; + import 'package:url_launcher/url_launcher_string.dart'; class ArtistPageFooter extends ConsumerWidget { diff --git a/lib/pages/artist/section/header.dart b/lib/pages/artist/section/header.dart index dcf3114e..1f1d028d 100644 --- a/lib/pages/artist/section/header.dart +++ b/lib/pages/artist/section/header.dart @@ -14,7 +14,6 @@ import 'package:spotube/provider/authentication_provider.dart'; import 'package:spotube/provider/blacklist_provider.dart'; import 'package:spotube/provider/spotify/spotify.dart'; import 'package:spotube/utils/primitive_utils.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class ArtistPageHeader extends HookConsumerWidget { final String artistId; diff --git a/lib/pages/library/playlist_generate/playlist_generate.dart b/lib/pages/library/playlist_generate/playlist_generate.dart index 81fbbfe3..49a33164 100644 --- a/lib/pages/library/playlist_generate/playlist_generate.dart +++ b/lib/pages/library/playlist_generate/playlist_generate.dart @@ -20,7 +20,6 @@ import 'package:spotube/models/spotify/recommendation_seeds.dart'; import 'package:spotube/provider/spotify/spotify.dart'; import 'package:spotube/provider/spotify_provider.dart'; import 'package:spotube/provider/user_preferences/user_preferences_provider.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; const RecommendationAttribute zeroValues = (min: 0, target: 0, max: 0); diff --git a/lib/pages/lyrics/lyrics.dart b/lib/pages/lyrics/lyrics.dart index 0482cfe9..6d406e33 100644 --- a/lib/pages/lyrics/lyrics.dart +++ b/lib/pages/lyrics/lyrics.dart @@ -19,7 +19,6 @@ import 'package:spotube/pages/lyrics/synced_lyrics.dart'; import 'package:spotube/provider/authentication_provider.dart'; import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; import 'package:spotube/utils/platform.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class LyricsPage extends HookConsumerWidget { final bool isModal; diff --git a/lib/pages/lyrics/plain_lyrics.dart b/lib/pages/lyrics/plain_lyrics.dart index 7513ad96..f1c6ec2e 100644 --- a/lib/pages/lyrics/plain_lyrics.dart +++ b/lib/pages/lyrics/plain_lyrics.dart @@ -15,8 +15,6 @@ import 'package:spotube/extensions/context.dart'; import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; import 'package:spotube/provider/spotify/spotify.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; - class PlainLyrics extends HookConsumerWidget { final PaletteColor palette; final bool? isModal; diff --git a/lib/pages/playlist/playlist.dart b/lib/pages/playlist/playlist.dart index 3a0f9ec6..ce070b06 100644 --- a/lib/pages/playlist/playlist.dart +++ b/lib/pages/playlist/playlist.dart @@ -8,7 +8,6 @@ import 'package:spotube/components/shared/tracks_view/track_view_props.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/image.dart'; import 'package:spotube/provider/spotify/spotify.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class PlaylistPage extends HookConsumerWidget { final PlaylistSimple playlist; diff --git a/lib/pages/search/sections/albums.dart b/lib/pages/search/sections/albums.dart index 6d0f1508..dee27041 100644 --- a/lib/pages/search/sections/albums.dart +++ b/lib/pages/search/sections/albums.dart @@ -4,9 +4,9 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:spotify/spotify.dart'; import 'package:spotube/components/shared/horizontal_playbutton_card_view/horizontal_playbutton_card_view.dart'; +import 'package:spotube/extensions/album_simple.dart'; import 'package:spotube/extensions/context.dart'; import 'package:spotube/provider/spotify/spotify.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class SearchAlbumsSection extends HookConsumerWidget { const SearchAlbumsSection({ @@ -21,7 +21,7 @@ class SearchAlbumsSection extends HookConsumerWidget { () => query.asData?.value.items .cast() - .map(TypeConversionUtils.simpleAlbum_X_Album) + .map((e) => e.toAlbum()) .toList() ?? [], [query.value], diff --git a/lib/pages/track/track.dart b/lib/pages/track/track.dart index cbb75ed8..829256d4 100644 --- a/lib/pages/track/track.dart +++ b/lib/pages/track/track.dart @@ -17,7 +17,7 @@ import 'package:spotube/extensions/image.dart'; 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:spotube/extensions/constrains.dart'; class TrackPage extends HookConsumerWidget { diff --git a/lib/provider/download_manager_provider.dart b/lib/provider/download_manager_provider.dart index 32c5c98c..c964f982 100644 --- a/lib/provider/download_manager_provider.dart +++ b/lib/provider/download_manager_provider.dart @@ -16,7 +16,6 @@ import 'package:spotube/services/download_manager/download_manager.dart'; import 'package:spotube/services/sourced_track/enums.dart'; import 'package:spotube/services/sourced_track/sourced_track.dart'; import 'package:spotube/utils/primitive_utils.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class DownloadManagerProvider extends ChangeNotifier { DownloadManagerProvider({required this.ref}) diff --git a/lib/provider/proxy_playlist/proxy_playlist_provider.dart b/lib/provider/proxy_playlist/proxy_playlist_provider.dart index aea873dd..aa63e3f3 100644 --- a/lib/provider/proxy_playlist/proxy_playlist_provider.dart +++ b/lib/provider/proxy_playlist/proxy_playlist_provider.dart @@ -33,7 +33,6 @@ import 'package:spotube/services/sourced_track/sources/piped.dart'; import 'package:spotube/services/sourced_track/sources/youtube.dart'; import 'package:spotube/utils/persisted_state_notifier.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; /// Things implemented: /// * [x] Sponsor-Block skip diff --git a/lib/provider/scrobbler_provider.dart b/lib/provider/scrobbler_provider.dart index 0c204664..9ad2a58b 100644 --- a/lib/provider/scrobbler_provider.dart +++ b/lib/provider/scrobbler_provider.dart @@ -8,7 +8,6 @@ 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'; class ScrobblerState { final String username; diff --git a/lib/provider/spotify/album/releases.dart b/lib/provider/spotify/album/releases.dart index 471df707..cacddbdf 100644 --- a/lib/provider/spotify/album/releases.dart +++ b/lib/provider/spotify/album/releases.dart @@ -36,10 +36,7 @@ class AlbumReleasesNotifier .newReleases(country: market) .getPage(limit, offset); - return albums.items - ?.map(TypeConversionUtils.simpleAlbum_X_Album) - .toList() ?? - []; + return albums.items?.map((album) => album.toAlbum()).toList() ?? []; } @override diff --git a/lib/provider/spotify/album/tracks.dart b/lib/provider/spotify/album/tracks.dart index 9556cc52..e9f712e7 100644 --- a/lib/provider/spotify/album/tracks.dart +++ b/lib/provider/spotify/album/tracks.dart @@ -31,10 +31,7 @@ class AlbumTracksNotifier extends AutoDisposeFamilyPaginatedAsyncNotifier TypeConversionUtils.simpleTrack_X_Track(e, arg)) - .toList() ?? - []; + return tracks.items?.map((e) => e.asTrack(arg)).toList() ?? []; } @override diff --git a/lib/provider/spotify/spotify.dart b/lib/provider/spotify/spotify.dart index ea28b6d8..b152db65 100644 --- a/lib/provider/spotify/spotify.dart +++ b/lib/provider/spotify/spotify.dart @@ -12,6 +12,7 @@ import 'package:spotify/spotify.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; // ignore: depend_on_referenced_packages, implementation_imports import 'package:riverpod/src/async_notifier.dart'; +import 'package:spotube/extensions/album_simple.dart'; import 'package:spotube/extensions/map.dart'; import 'package:spotube/extensions/track.dart'; import 'package:spotube/models/lyrics.dart'; @@ -23,7 +24,7 @@ import 'package:spotube/provider/user_preferences/user_preferences_provider.dart import 'package:spotube/services/wikipedia/wikipedia.dart'; import 'package:spotube/utils/persisted_state_notifier.dart'; import 'package:http/http.dart' as http; -import 'package:spotube/utils/type_conversion_utils.dart'; + import 'package:wikipedia_api/wikipedia_api.dart'; part 'album/favorite.dart'; diff --git a/lib/services/audio_services/audio_services.dart b/lib/services/audio_services/audio_services.dart index 4fa0ae1d..facbcc4c 100644 --- a/lib/services/audio_services/audio_services.dart +++ b/lib/services/audio_services/audio_services.dart @@ -7,7 +7,6 @@ import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; import 'package:spotube/services/audio_services/mobile_audio_service.dart'; import 'package:spotube/services/audio_services/windows_audio_service.dart'; import 'package:spotube/services/sourced_track/sourced_track.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class AudioServices { final MobileAudioService? mobile; diff --git a/lib/services/audio_services/linux_audio_service.dart b/lib/services/audio_services/linux_audio_service.dart index 11399e67..84a6f7b8 100644 --- a/lib/services/audio_services/linux_audio_service.dart +++ b/lib/services/audio_services/linux_audio_service.dart @@ -9,7 +9,6 @@ import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart'; import 'package:spotube/services/audio_player/audio_player.dart'; import 'package:spotube/services/audio_player/loop_mode.dart'; import 'package:spotube/services/sourced_track/sourced_track.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; final dbus = DBusClient.session(); diff --git a/lib/services/audio_services/windows_audio_service.dart b/lib/services/audio_services/windows_audio_service.dart index 8a58ecd8..a3ee31e1 100644 --- a/lib/services/audio_services/windows_audio_service.dart +++ b/lib/services/audio_services/windows_audio_service.dart @@ -8,7 +8,6 @@ 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'; import 'package:spotube/services/audio_player/playback_state.dart'; -import 'package:spotube/utils/type_conversion_utils.dart'; class WindowsAudioService { final SMTCWindows smtc; diff --git a/lib/utils/type_conversion_utils.dart b/lib/utils/type_conversion_utils.dart deleted file mode 100644 index 18d42040..00000000 --- a/lib/utils/type_conversion_utils.dart +++ /dev/null @@ -1,89 +0,0 @@ -// ignore_for_file: non_constant_identifier_names - -import 'dart:io'; - -import 'package:metadata_god/metadata_god.dart'; -import 'package:path/path.dart'; -import 'package:spotify/spotify.dart'; - -enum ImagePlaceholder { - albumArt, - artist, - collection, - online, -} - -abstract class TypeConversionUtils { - static Album simpleAlbum_X_Album(AlbumSimple albumSimple) { - Album album = Album(); - album.albumType = albumSimple.albumType; - album.artists = albumSimple.artists; - album.availableMarkets = albumSimple.availableMarkets; - album.externalUrls = albumSimple.externalUrls; - album.href = albumSimple.href; - album.id = albumSimple.id; - album.images = albumSimple.images; - album.name = albumSimple.name; - album.releaseDate = albumSimple.releaseDate; - album.releaseDatePrecision = albumSimple.releaseDatePrecision; - album.tracks = albumSimple.tracks; - album.type = albumSimple.type; - album.uri = albumSimple.uri; - return album; - } - - static Track simpleTrack_X_Track(TrackSimple trackSmp, AlbumSimple album) { - Track track = Track(); - track.name = trackSmp.name; - track.album = album; - track.artists = trackSmp.artists; - track.availableMarkets = trackSmp.availableMarkets; - track.discNumber = trackSmp.discNumber; - track.durationMs = trackSmp.durationMs; - track.explicit = trackSmp.explicit; - track.externalUrls = trackSmp.externalUrls; - track.href = trackSmp.href; - track.id = trackSmp.id; - track.isPlayable = trackSmp.isPlayable; - track.linkedFrom = trackSmp.linkedFrom; - track.name = trackSmp.name; - track.previewUrl = trackSmp.previewUrl; - track.trackNumber = trackSmp.trackNumber; - track.type = trackSmp.type; - track.uri = trackSmp.uri; - return track; - } - - static Track localTrack_X_Track( - File file, { - Metadata? metadata, - String? art, - }) { - final track = Track(); - track.album = Album() - ..name = metadata?.album ?? "Unknown" - ..images = [if (art != null) Image()..url = art] - ..genres = [if (metadata?.genre != null) metadata!.genre!] - ..artists = [ - Artist() - ..name = metadata?.albumArtist ?? "Unknown" - ..id = metadata?.albumArtist ?? "Unknown" - ..type = "artist", - ] - ..id = metadata?.album - ..releaseDate = metadata?.year?.toString(); - track.artists = [ - Artist() - ..name = metadata?.artist ?? "Unknown" - ..id = metadata?.artist ?? "Unknown" - ]; - - track.id = metadata?.title ?? basenameWithoutExtension(file.path); - track.name = metadata?.title ?? basenameWithoutExtension(file.path); - track.type = "track"; - track.uri = file.path; - track.durationMs = (metadata?.durationMs?.toInt() ?? 0); - - return track; - } -}