Bottom player

This commit is contained in:
2024-08-27 14:35:16 +08:00
parent 41e248f8cc
commit e7ea852725
16 changed files with 328 additions and 66 deletions

View File

@ -1,6 +1,12 @@
import 'package:spotify/spotify.dart';
extension ArtistExtension on List<ArtistSimple> {
extension ArtistSimpleExtension on List<ArtistSimple> {
String asString() {
return map((e) => e.name?.replaceAll(",", " ")).join(", ");
}
}
extension ArtistExtension on List<Artist> {
String asString() {
return map((e) => e.name?.replaceAll(",", " ")).join(", ");
}

View File

@ -48,11 +48,11 @@ class AudioServices with WidgetsBindingObserver {
duration: track is SourcedTrack
? track.sourceInfo.duration
: Duration(milliseconds: track.durationMs ?? 0),
artUri: Uri.parse(
(track.album?.images).asUrlString(
placeholder: ImagePlaceholder.albumArt,
),
),
artUri: track.album?.images != null
? Uri.parse(
(track.album?.images).asUrlString()!,
)
: null,
playable: true,
));
}

View File

@ -1,6 +1,4 @@
import 'package:rhythm_box/services/primitive.dart';
import 'package:spotify/spotify.dart';
import 'package:rhythm_box/collections/assets.gen.dart';
import 'package:collection/collection.dart';
enum ImagePlaceholder {
@ -11,24 +9,13 @@ enum ImagePlaceholder {
}
extension SpotifyImageExtensions on List<Image>? {
String asUrlString({
String? asUrlString({
int index = 1,
required ImagePlaceholder placeholder,
}) {
final String placeholderUrl = {
ImagePlaceholder.albumArt: Assets.albumPlaceholder.path,
ImagePlaceholder.artist: Assets.userPlaceholder.path,
ImagePlaceholder.collection: Assets.placeholder.path,
ImagePlaceholder.online:
"https://avatars.dicebear.com/api/bottts/${PrimitiveUtils.uuid.v4()}.png",
}[placeholder]!;
final sortedImage = this?.sorted((a, b) => a.width!.compareTo(b.width!));
return sortedImage != null && sortedImage.isNotEmpty
? sortedImage[
index > sortedImage.length - 1 ? sortedImage.length - 1 : index]
.url!
: placeholderUrl;
return sortedImage?[
index > sortedImage.length - 1 ? sortedImage.length - 1 : index]
.url;
}
}

View File

@ -84,9 +84,7 @@ class WindowsAudioService {
albumArtist: track.artists?.firstOrNull?.name ?? "Unknown",
artist: track.artists?.asString() ?? "Unknown",
album: track.album?.name ?? "Unknown",
thumbnail: (track.album?.images).asUrlString(
placeholder: ImagePlaceholder.albumArt,
),
thumbnail: (track.album?.images).asUrlString(),
),
);
}

View File

@ -4,6 +4,7 @@ import 'package:rhythm_box/providers/audio_player.dart';
import 'package:rhythm_box/services/audio_player/audio_player.dart';
import 'package:rhythm_box/services/local_track.dart';
import 'package:rhythm_box/services/sourced_track/sourced_track.dart';
import 'package:rhythm_box/widgets/tracks/querying_track_info.dart';
import 'package:spotify/spotify.dart';
class SourcedTrackProvider extends GetxController {
@ -17,6 +18,7 @@ class SourcedTrackProvider extends GetxController {
}
final AudioPlayerProvider playback = Get.find();
final QueryingTrackInfoProvider query = Get.find();
ever(playback.state.value.tracks.obs, (List<Track> tracks) {
if (tracks.isEmpty || tracks.none((element) => element.id == track.id)) {
@ -24,7 +26,9 @@ class SourcedTrackProvider extends GetxController {
}
});
query.isQueryingTrackInfo.value = true;
sourcedTrack.value = await SourcedTrack.fetchFromTrack(track: track);
query.isQueryingTrackInfo.value = false;
return sourcedTrack.value;
}