Skip to content

Commit 20c835c

Browse files
committed
chore: reduce media item calls
1 parent a28adc8 commit 20c835c

File tree

1 file changed

+39
-29
lines changed

1 file changed

+39
-29
lines changed

lib/player/player_manager.dart

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:safe_change_notifier/safe_change_notifier.dart';
66
import 'package:yaru/yaru.dart';
77

88
import '../common/logging.dart';
9+
import '../extensions/string_x.dart';
910
import 'data/local_media.dart';
1011
import 'data/unique_media.dart';
1112
import '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

Comments
 (0)