MCPcopy Create free account
hub / github.com/Moosync/Moosync / get_player

Method get_player

src/components/audiostream.rs:149–202  ·  view source on GitHub ↗
(
        &self,
        player_store: RwSignal<PlayerStore>,
        song: &Song,
    )

Source from the content-addressed store, hash-verified

147
148 #[tracing::instrument(level = "debug", skip(self, player_store, song))]
149 pub async fn get_player(
150 &self,
151 player_store: RwSignal<PlayerStore>,
152 song: &Song,
153 ) -> Result<(usize, Option<Song>)> {
154 tracing::debug!("Getting players for song {:?}", song);
155 let players = self.players.lock().await;
156 let player_blacklist = create_read_slice(player_store, |player_store| {
157 player_store.get_player_blacklist()
158 });
159 let player = players.iter().position(|p| {
160 tracing::debug!("Checking player capabilities {}", p.key());
161 let res = !player_blacklist.get_untracked().contains(&p.key())
162 && p.provides().contains(&song.song.type_)
163 && p.can_play(song);
164
165 tracing::debug!("Checked player capabilities {}", p.key());
166 res
167 });
168
169 if let Some(player) = player {
170 tracing::info!("Found player {}", player);
171 return Ok((player, None));
172 }
173
174 if player.is_none() {
175 tracing::warn!("Found no players, trying to refetch playback url");
176 let mut song_tmp = song.clone();
177 for (i, player) in players.iter().enumerate() {
178 if player_blacklist.get_untracked().contains(&player.key()) {
179 tracing::debug!("Player {} is blacklisted. Not trying", player.key());
180 continue;
181 }
182 tracing::debug!("Trying player {}", player.key());
183 let playback_url = self.get_playback_url(song, player.key()).await;
184 if let Ok(playback_url) = playback_url {
185 tracing::info!("Got new playback url {}", playback_url);
186 song_tmp.song.playback_url = Some(playback_url);
187 if player.can_play(&song_tmp) {
188 tracing::info!("Using player {}", player.key());
189 return Ok((i, Some(song_tmp)));
190 }
191 } else {
192 tracing::error!(
193 "Failed to get playback url for player {}: {:?}",
194 player.key(),
195 playback_url
196 );
197 }
198 }
199 }
200
201 Err(MoosyncError::String("Player not found".into()))
202 }
203
204 #[tracing::instrument(level = "debug", skip(self, volume))]
205 pub async fn set_volume(&self, volume: f64) -> Result<()> {

Callers 1

load_audioMethod · 0.80

Calls 6

get_player_blacklistMethod · 0.80
cloneMethod · 0.80
keyMethod · 0.45
providesMethod · 0.45
can_playMethod · 0.45
get_playback_urlMethod · 0.45

Tested by

no test coverage detected