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

Function AudioStream

src/components/audiostream.rs:449–540  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

447#[tracing::instrument(level = "debug", skip())]
448#[component()]
449pub fn AudioStream() -> impl IntoView {
450 let provider_store = use_context::<Arc<ProviderStore>>().unwrap();
451 let player_store = use_context::<RwSignal<PlayerStore>>().unwrap();
452
453 let player_container_ref = NodeRef::<Div>::new();
454
455 let players = PlayerHolder::new(player_container_ref, provider_store.clone());
456 let players = Rc::new(Mutex::new(players));
457 let players_clone = players.clone();
458 spawn_local(async move {
459 let players = players_clone.lock().await;
460 players.initialize_players().await;
461 });
462
463 let current_song_sig =
464 create_read_slice(player_store, |player_store| player_store.get_current_song());
465
466 let last_song_sig = create_read_slice(player_store, |player_store| {
467 player_store.data.player_details.last_song.clone()
468 });
469
470 let force_load_sig =
471 create_read_slice(player_store, |player_store| player_store.get_force_load());
472 let current_volume = create_read_slice(player_store, |player_store| player_store.get_volume());
473
474 let players_clone = players.clone();
475 Effect::new(move || {
476 let current_volume = current_volume.get();
477 let players = players.clone();
478 spawn_local(async move {
479 let players = players.lock().await;
480 players
481 .set_volume(current_volume)
482 .await
483 .expect("Failed to set volume");
484 });
485 });
486
487 let last_song_time = RwSignal::new(Instant::now());
488 Effect::new(move || {
489 let is_providers_initialized = provider_store.is_initialized.get();
490 tracing::info!("providers initialized {}", is_providers_initialized);
491 if !is_providers_initialized {
492 tracing::info!("providers not initialized");
493 return;
494 }
495 let current_song = current_song_sig.get();
496 let _ = force_load_sig.get();
497
498 send_extension_event(ExtensionExtraEvent::SongChanged([current_song.clone()]));
499 if let Some(current_song) = current_song {
500 tracing::info!("Loading song {:?}", current_song.song.title);
501 set_metadata(&current_song);
502
503 let last_song_sig = last_song_sig.get_untracked();
504 let players = players_clone.clone();
505 spawn_local(async move {
506 let mut players = players.lock().await;

Callers

nothing calls this directly

Calls 12

send_extension_eventFunction · 0.85
set_metadataFunction · 0.85
cloneMethod · 0.80
initialize_playersMethod · 0.80
get_current_songMethod · 0.80
get_force_loadMethod · 0.80
getMethod · 0.80
load_audioMethod · 0.80
setMethod · 0.80
stop_playbackMethod · 0.80
get_volumeMethod · 0.45
set_volumeMethod · 0.45

Tested by

no test coverage detected