mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-12 23:45:18 +00:00
refactor: use extension methods for simple album to album and simple track to track conversion
This commit is contained in:
parent
1a6cea926f
commit
9f96b5c537
@ -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<List<Track>> 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();
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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(
|
||||
|
@ -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;
|
||||
|
@ -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<List<LocalTrack>>((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"],
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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)),
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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});
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
@ -1,6 +1,6 @@
|
||||
import 'package:spotify/spotify.dart';
|
||||
|
||||
extension AlbumJson on AlbumSimple {
|
||||
extension AlbumExtensions on AlbumSimple {
|
||||
Map<String, dynamic> 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;
|
||||
}
|
||||
}
|
||||
|
@ -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<Image>? {
|
||||
String asUrlString({
|
||||
int index = 1,
|
||||
|
@ -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<String, dynamic> toJson() {
|
||||
return TrackJson.trackToJson(this);
|
||||
return TrackExtensions.trackToJson(this);
|
||||
}
|
||||
|
||||
static Map<String, dynamic> 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;
|
||||
}
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ class LocalTrack extends Track {
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
...TrackJson.trackToJson(this),
|
||||
...TrackExtensions.trackToJson(this),
|
||||
'path': path,
|
||||
};
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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<AlbumSimple>()
|
||||
.map(TypeConversionUtils.simpleAlbum_X_Album)
|
||||
.map((e) => e.toAlbum())
|
||||
.toList() ??
|
||||
[],
|
||||
[query.value],
|
||||
|
@ -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 {
|
||||
|
@ -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})
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -31,10 +31,7 @@ class AlbumTracksNotifier extends AutoDisposeFamilyPaginatedAsyncNotifier<Track,
|
||||
@override
|
||||
fetch(arg, offset, limit) async {
|
||||
final tracks = await spotify.albums.tracks(arg.id!).getPage(limit, offset);
|
||||
return tracks.items
|
||||
?.map((e) => TypeConversionUtils.simpleTrack_X_Track(e, arg))
|
||||
.toList() ??
|
||||
[];
|
||||
return tracks.items?.map((e) => e.asTrack(arg)).toList() ?? [];
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -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';
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user