Re-organized providers and added a few
This commit is contained in:
@@ -265,6 +265,56 @@ pub fn settings_page() -> Html {
|
||||
html! {}
|
||||
};
|
||||
|
||||
let lastfm_key_html = {
|
||||
let key_set = ytauth.as_ref().map(|s| s.lastfm_api_key_set).unwrap_or(false);
|
||||
if key_set {
|
||||
html! {
|
||||
<p class="text-sm" style="margin: 0.25rem 0 0 0;">
|
||||
<span style="color: var(--success);">{ "\u{2713}" }</span>
|
||||
{ " API key configured via " }
|
||||
<code>{ "SHANTY_LASTFM_API_KEY" }</code>
|
||||
</p>
|
||||
}
|
||||
} else {
|
||||
html! {
|
||||
<p class="text-sm" style="margin: 0.25rem 0 0 0; color: var(--warning);">
|
||||
{ "Set " }
|
||||
<code>{ "SHANTY_LASTFM_API_KEY" }</code>
|
||||
{ " environment variable. Get a key at " }
|
||||
<a href="https://www.last.fm/api/account/create" target="_blank">{ "last.fm/api/account/create" }</a>
|
||||
{ " (use any name, leave callback URL blank)." }
|
||||
</p>
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let fanart_key_html = {
|
||||
let key_set = ytauth
|
||||
.as_ref()
|
||||
.map(|s| s.fanart_api_key_set)
|
||||
.unwrap_or(false);
|
||||
if key_set {
|
||||
html! {
|
||||
<p class="text-sm" style="margin: 0.25rem 0 0 0;">
|
||||
<span style="color: var(--success);">{ "\u{2713}" }</span>
|
||||
{ " API key configured via " }
|
||||
<code>{ "SHANTY_FANART_API_KEY" }</code>
|
||||
{ ". Provides artist thumbnails and HD banners." }
|
||||
</p>
|
||||
}
|
||||
} else {
|
||||
html! {
|
||||
<p class="text-sm" style="margin: 0.25rem 0 0 0; color: var(--warning);">
|
||||
{ "Set " }
|
||||
<code>{ "SHANTY_FANART_API_KEY" }</code>
|
||||
{ " environment variable. Get a key at " }
|
||||
<a href="https://fanart.tv/get-an-api-key/" target="_blank">{ "fanart.tv" }</a>
|
||||
{ "." }
|
||||
</p>
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
html! {
|
||||
<div>
|
||||
<div class="page-header">
|
||||
@@ -441,6 +491,82 @@ pub fn settings_page() -> Html {
|
||||
{ ytauth_html }
|
||||
</div>
|
||||
|
||||
// Metadata Providers
|
||||
<div class="card">
|
||||
<h3>{ "Metadata Providers" }</h3>
|
||||
<div class="form-group">
|
||||
<label>{ "Music Database" }</label>
|
||||
<select onchange={let config = config.clone(); Callback::from(move |e: Event| {
|
||||
let select: HtmlSelectElement = e.target_unchecked_into();
|
||||
let mut cfg = (*config).clone().unwrap();
|
||||
cfg.metadata.metadata_source = select.value();
|
||||
config.set(Some(cfg));
|
||||
})}>
|
||||
{ for [("musicbrainz", "MusicBrainz")].iter().map(|(v, label)| html! {
|
||||
<option value={*v} selected={c.metadata.metadata_source == *v}>{ label }</option>
|
||||
})}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>{ "Artist Images" }</label>
|
||||
<select onchange={let config = config.clone(); Callback::from(move |e: Event| {
|
||||
let select: HtmlSelectElement = e.target_unchecked_into();
|
||||
let mut cfg = (*config).clone().unwrap();
|
||||
cfg.metadata.artist_image_source = select.value();
|
||||
config.set(Some(cfg));
|
||||
})}>
|
||||
{ for [("wikipedia", "Wikipedia"), ("fanarttv", "fanart.tv")].iter().map(|(v, label)| html! {
|
||||
<option value={*v} selected={c.metadata.artist_image_source == *v}>{ label }</option>
|
||||
})}
|
||||
</select>
|
||||
</div>
|
||||
if c.metadata.artist_image_source == "fanarttv" {
|
||||
{ fanart_key_html.clone() }
|
||||
}
|
||||
<div class="form-group">
|
||||
<label>{ "Artist Bios" }</label>
|
||||
<select onchange={let config = config.clone(); Callback::from(move |e: Event| {
|
||||
let select: HtmlSelectElement = e.target_unchecked_into();
|
||||
let mut cfg = (*config).clone().unwrap();
|
||||
cfg.metadata.artist_bio_source = select.value();
|
||||
config.set(Some(cfg));
|
||||
})}>
|
||||
{ for [("wikipedia", "Wikipedia"), ("lastfm", "Last.fm")].iter().map(|(v, label)| html! {
|
||||
<option value={*v} selected={c.metadata.artist_bio_source == *v}>{ label }</option>
|
||||
})}
|
||||
</select>
|
||||
</div>
|
||||
if c.metadata.artist_bio_source == "lastfm" {
|
||||
{ lastfm_key_html.clone() }
|
||||
}
|
||||
<div class="form-group">
|
||||
<label>{ "Lyrics" }</label>
|
||||
<select onchange={let config = config.clone(); Callback::from(move |e: Event| {
|
||||
let select: HtmlSelectElement = e.target_unchecked_into();
|
||||
let mut cfg = (*config).clone().unwrap();
|
||||
cfg.metadata.lyrics_source = select.value();
|
||||
config.set(Some(cfg));
|
||||
})}>
|
||||
{ for [("lrclib", "LRCLIB")].iter().map(|(v, label)| html! {
|
||||
<option value={*v} selected={c.metadata.lyrics_source == *v}>{ label }</option>
|
||||
})}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>{ "Cover Art" }</label>
|
||||
<select onchange={let config = config.clone(); Callback::from(move |e: Event| {
|
||||
let select: HtmlSelectElement = e.target_unchecked_into();
|
||||
let mut cfg = (*config).clone().unwrap();
|
||||
cfg.metadata.cover_art_source = select.value();
|
||||
config.set(Some(cfg));
|
||||
})}>
|
||||
{ for [("coverartarchive", "Cover Art Archive")].iter().map(|(v, label)| html! {
|
||||
<option value={*v} selected={c.metadata.cover_art_source == *v}>{ label }</option>
|
||||
})}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
// Indexing
|
||||
<div class="card">
|
||||
<h3>{ "Indexing" }</h3>
|
||||
|
||||
Reference in New Issue
Block a user