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

Function SongDetails

src/components/songdetails.rs:55–312  ·  view source on GitHub ↗
(
    #[prop()] selected_song: T,
    #[prop()] icons: RwSignal<SongDetailIcons>,
    #[prop(optional, default = false)] show_lyrics: bool,
    #[prop(optional)] default_details: RwSignal<DefaultDetai

Source from the content-addressed store, hash-verified

53)]
54#[component()]
55pub fn SongDetails<T>(
56 #[prop()] selected_song: T,
57 #[prop()] icons: RwSignal<SongDetailIcons>,
58 #[prop(optional, default = false)] show_lyrics: bool,
59 #[prop(optional)] default_details: RwSignal<DefaultDetails>,
60 #[prop(optional)] buttons_ref: Option<NodeRef<Div>>,
61 #[prop(optional)] root_ref: Option<NodeRef<Div>>,
62) -> impl IntoView
63where
64 T: Get<Value = Option<Song>> + Copy + 'static,
65{
66 let selected_title = RwSignal::new(default_details.get().title);
67 let selected_artists = RwSignal::new(default_details.get().subtitle);
68 let selected_duration = RwSignal::new(None::<String>);
69 let selected_cover_path = RwSignal::new(default_details.get().icon);
70
71 let selected_lyrics = RwSignal::new(None::<String>);
72 let show_default_cover_img = RwSignal::new(true);
73 let show_lyrics_div = RwSignal::new(false);
74 let show_lyrics_always = RwSignal::new(false);
75
76 let show_lyrics_old = RwSignal::new(false);
77
78 let buttons_ref = if buttons_ref.is_some() {
79 buttons_ref.unwrap()
80 } else {
81 NodeRef::new()
82 };
83
84 let root_ref = if root_ref.is_some() {
85 root_ref.unwrap()
86 } else {
87 NodeRef::new()
88 };
89
90 if show_lyrics {
91 use_resize_observer(document().body().unwrap(), move |entries, _| {
92 if let Some(entry) = entries.first() {
93 let rect = entry.content_rect();
94
95 if rect.width() <= 800f64 {
96 show_lyrics_old.set(show_lyrics_div.get_untracked());
97 show_lyrics_always.set(true);
98 show_lyrics_div.set(true);
99 } else {
100 show_lyrics_div.set(show_lyrics_old.get_untracked());
101 show_lyrics_always.set(show_lyrics_old.get_untracked());
102 }
103 }
104 });
105
106 let provider_store = expect_context::<Arc<ProviderStore>>();
107 Effect::new(move || {
108 let song = selected_song.get();
109 let provider_store = provider_store.clone();
110 spawn_local(async move {
111 let lyrics = fetch_lyrics(&song).await;
112 if lyrics.is_none() {

Callers

nothing calls this directly

Calls 7

fetch_lyricsFunction · 0.85
format_durationFunction · 0.85
get_high_imgFunction · 0.85
getMethod · 0.80
setMethod · 0.80
cloneMethod · 0.80
get_provider_keysMethod · 0.45

Tested by

no test coverage detected