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

Method load_audio

src/components/audiostream.rs:234–290  ·  view source on GitHub ↗
(
        &mut self,
        song: &Song,
        current_volume: f64,
        player_store: RwSignal<PlayerStore>,
    )

Source from the content-addressed store, hash-verified

232
233 #[tracing::instrument(level = "debug", skip(self, song, current_volume, player_store))]
234 pub async fn load_audio(
235 &mut self,
236 song: &Song,
237 current_volume: f64,
238 player_store: RwSignal<PlayerStore>,
239 ) -> Result<Option<Song>> {
240 let autoplay = create_read_slice(player_store, |p| {
241 let state = p.get_player_state();
242 state == PlayerState::Playing || state == PlayerState::Loading
243 })
244 .get_untracked();
245
246 let player_state = create_read_slice(player_store, |p| p.get_player_state());
247 tracing::debug!("Autoplay {} {:?}", autoplay, player_state.get());
248
249 let (pos, new_song) = self.get_player(player_store, song).await?;
250
251 // Stop current player only if we need to switch;
252 let old_pos = self.active_player.load(Ordering::Relaxed);
253 if old_pos != pos {
254 self.stop_playback().await?;
255 }
256
257 let ret = new_song.clone();
258 let src = if let Some(new_song) = new_song {
259 new_song
260 .song
261 .playback_url
262 .clone()
263 .or(new_song.song.path.clone())
264 } else {
265 song.song.playback_url.clone().or(song.song.path.clone())
266 };
267
268 let mut players = self.players.lock().await;
269 let player = players.get_mut(pos).unwrap();
270
271 self.set_player_listeners(player);
272 self.active_player.store(pos, Ordering::Relaxed);
273 tracing::debug!("Active player: {}", player.key());
274
275 let (resolver_tx, resolver_rx) = oneshot::channel();
276 player.load(src.unwrap(), autoplay, resolver_tx);
277
278 resolver_rx.await.expect("Load failed to resolve");
279 tracing::debug!("Setting volume {}", current_volume);
280 player.set_volume(current_volume).unwrap();
281
282 // if autoplay {
283 // tracing::info!("Autoplaying");
284 // player.play()?;
285 // } else {
286 // player.pause()?;
287 // }
288
289 Ok(ret)
290 }
291

Callers 1

AudioStreamFunction · 0.80

Calls 7

get_player_stateMethod · 0.80
get_playerMethod · 0.80
stop_playbackMethod · 0.80
cloneMethod · 0.80
set_player_listenersMethod · 0.80
loadMethod · 0.45
set_volumeMethod · 0.45

Tested by

no test coverage detected