use super::*;
use crate::*;
pub(crate) fn fetch_lyrics_blocking(
artist: &str,
title: &str,
album: &str,
duration_ms: u32,
) -> (Vec<(u32, String)>, bool) {
let client = http_client();
let url = format!(
"https://lrclib.net/api/get?artist_name={}&track_name={}&album_name={}&duration={}",
urlencode(artist),
urlencode(title),
urlencode(album),
duration_ms / 1000
);
let Ok(resp) = client
.get(&url)
.header("User-Agent", "myx (terminal spotify player)")
.send()
else {
return (Vec::new(), false);
};
if !resp.status().is_success() {
return (Vec::new(), false);
}
let Ok(v) = resp.json::<serde_json::Value>() else {
return (Vec::new(), false);
};
if let Some(synced) = v["syncedLyrics"].as_str().filter(|s| !s.is_empty()) {
return (parse_lrc(synced), true);
}
if let Some(plain) = v["plainLyrics"].as_str().filter(|s| !s.is_empty()) {
let lines = plain.lines().map(|l| (0u32, l.to_string())).collect();
return (lines, false);
}
(Vec::new(), false)
}