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

Function SinglePlaylist

src/pages/playlists.rs:47–173  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

45#[tracing::instrument(level = "debug", skip())]
46#[component()]
47pub fn SinglePlaylist() -> impl IntoView {
48 let params = use_query_map();
49 let playlist = Memo::new(move |_| {
50 params.with(|params| {
51 let entity = params.get("entity");
52 if let Some(entity) = entity {
53 let album = serde_json::from_str::<QueryablePlaylist>(&entity);
54 if let Ok(album) = album {
55 return Some(album);
56 }
57 }
58 None
59 })
60 });
61
62 let songs = RwSignal::new(vec![]);
63 let selected_songs = RwSignal::new(vec![]);
64
65 let provider_store = use_context::<Arc<ProviderStore>>().unwrap();
66 let provider_store_clone = provider_store.clone();
67 let selected_providers = RwSignal::<Vec<String>>::new(vec![]);
68
69 let (_, filtered_songs, fetch_selected_providers, is_loading) =
70 dyn_provider_songs!(selected_providers, playlist, songs, fetch_playlist_content);
71
72 let default_details = RwSignal::new(DefaultDetails::default());
73
74 let refresh_songs = move || {
75 tracing::debug!("Refreshing song list");
76 let playlist = playlist.get();
77 if let Some(playlist) = playlist {
78 get_songs_by_option(
79 GetSongOptions {
80 playlist: Some(QueryablePlaylist {
81 playlist_id: Some(playlist.playlist_id.unwrap()),
82 ..Default::default()
83 }),
84 ..Default::default()
85 },
86 songs,
87 );
88 }
89 };
90
91 Effect::new(move || {
92 let playlist = playlist.get();
93 if let Some(playlist) = playlist {
94 default_details.update(|d| {
95 d.title = Some(playlist.playlist_name.clone());
96 d.icon = playlist.playlist_coverpath.clone().map(convert_file_src);
97 });
98
99 let playlist_id = playlist.playlist_id.clone().unwrap();
100 let provider_store = provider_store_clone.clone();
101 spawn_local(async move {
102 let provider = provider_store
103 .get_provider_key_by_id(playlist_id.clone())
104 .await;

Callers

nothing calls this directly

Calls 10

get_songs_by_optionFunction · 0.85
get_songs_from_indicesFunction · 0.85
getMethod · 0.80
cloneMethod · 0.80
play_now_multipleMethod · 0.80
setMethod · 0.80
get_is_mobileMethod · 0.80
play_nowMethod · 0.45
add_to_queueMethod · 0.45

Tested by

no test coverage detected