@@ -6,6 +6,7 @@ import 'package:safe_change_notifier/safe_change_notifier.dart';
66import 'package:yaru/yaru.dart' ;
77
88import '../common/logging.dart' ;
9+ import '../extensions/string_x.dart' ;
910import 'data/local_media.dart' ;
1011import 'data/unique_media.dart' ;
1112import 'view/player_view_state.dart' ;
@@ -46,16 +47,32 @@ class PlayerManager extends BaseAudioHandler with SeekHandler {
4647 Color ? color,
4748 String ? remoteSourceArtUrl,
4849 String ? remoteSourceTitle,
49- }) => playerViewState.value = playerViewState.value.copyWith (
50- fullMode: fullMode,
51- showPlayerExplorer: showPlayerExplorer,
52- explorerIndex: explorerIndex,
53- color: color,
54- remoteSourceArtUrl: remoteSourceArtUrl? .endsWith ('.ico' ) == true
50+ }) {
51+ final art = remoteSourceArtUrl? .endsWith ('.ico' ) == true
5552 ? null
56- : remoteSourceArtUrl,
57- remoteSourceTitle: remoteSourceTitle,
58- );
53+ : remoteSourceArtUrl;
54+ playerViewState.value = playerViewState.value.copyWith (
55+ fullMode: fullMode,
56+ showPlayerExplorer: showPlayerExplorer,
57+ explorerIndex: explorerIndex,
58+ color: color,
59+ remoteSourceArtUrl: art,
60+ remoteSourceTitle: remoteSourceTitle,
61+ );
62+
63+ if (remoteSourceTitle != null ) {
64+ final uri = Uri .tryParse (art ?? '' );
65+ final split = remoteSourceTitle.splitByDash;
66+ mediaItem.add (
67+ MediaItem (
68+ id: remoteSourceTitle,
69+ title: remoteSourceTitle,
70+ artist: currentMedia? .artist ?? split.artist,
71+ artUri: uri,
72+ ),
73+ );
74+ }
75+ }
5976
6077 Player get _player => _controller.player;
6178 Player get player => _player;
@@ -107,21 +124,8 @@ class PlayerManager extends BaseAudioHandler with SeekHandler {
107124 Playlist get playlist => _player.state.playlist;
108125
109126 Stream <UniqueMedia > get currentMediaStream =>
110- _player.stream.duration.asyncMap ((e) async {
111- final media =
112- _player.state.playlist.medias[_player.state.playlist.index]
113- as UniqueMedia ;
114-
115- final id = playerViewState.value.remoteSourceArtUrl ?? media.id;
116-
117- final title =
118- (media is LocalMedia ||
119- (playerViewState.value.remoteSourceTitle == null )
120- ? media.title
121- : playerViewState.value.remoteSourceTitle) ??
122- media.id;
123-
124- final artist = media.artist;
127+ _player.stream.playlist.asyncMap ((playlist) async {
128+ final media = playlist.medias[playlist.index] as UniqueMedia ;
125129
126130 final artUri =
127131 media is LocalMedia ||
@@ -131,16 +135,19 @@ class PlayerManager extends BaseAudioHandler with SeekHandler {
131135
132136 mediaItem.add (
133137 MediaItem (
134- id: id,
135- title: title,
136- artist: artist,
138+ id: media.id,
139+ title: media.title ?? media.uri.toString (),
140+ artist: media.artist,
141+ album: media.collectionName,
142+ duration: media.duration ?? duration,
137143 artUri: artUri,
138- duration: e,
139144 ),
140145 );
146+
141147 if (media is LocalMedia ) {
142148 await _setLocalColor (media);
143149 }
150+
144151 return media;
145152 }).distinct ();
146153
@@ -173,7 +180,10 @@ class PlayerManager extends BaseAudioHandler with SeekHandler {
173180 Future <void > setPlaylist (List <UniqueMedia > mediaList, {int index = 0 }) async {
174181 if (mediaList.isEmpty) return ;
175182 updateState (
176- remoteSourceArtUrl: mediaList.elementAtOrNull (index)? .artUrl,
183+ remoteSourceArtUrl:
184+ mediaList.elementAtOrNull (index)? .artUrl? .endsWith ('.ico' ) == true
185+ ? null
186+ : mediaList.elementAtOrNull (index)? .artUrl,
177187 remoteSourceTitle: mediaList.elementAtOrNull (index)? .title,
178188 );
179189 await _player.open (Playlist (mediaList, index: index));
0 commit comments