()
| 447 | #[tracing::instrument(level = "debug", skip())] |
| 448 | #[component()] |
| 449 | pub 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(¤t_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; |
nothing calls this directly
no test coverage detected