use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Deserialize, Default, Clone)]
pub struct WsPayload {
#[serde(default)]
pub songid: i64,
#[serde(default)]
pub title: Option<String>,
#[serde(default)]
pub artist: Option<String>,
#[serde(default)]
pub album: Option<String>,
#[serde(default)]
pub circle: Option<String>,
#[serde(default)]
pub vocal: Option<String>,
#[serde(default)]
pub original: Option<String>,
#[serde(default)]
pub year: Option<Value>,
#[serde(default)]
pub duration: Option<u64>,
#[serde(default)]
pub played: Option<Value>,
#[serde(default)]
pub albumart: Option<String>,
}
#[derive(Deserialize, Default, Clone)]
pub struct ApiInfo {
#[serde(rename = "SERVERINFO", default)]
pub server_info: ServerInfo,
#[serde(rename = "MISC", default)]
pub misc: MiscInfo,
#[serde(rename = "SONGDATA", default)]
pub song_data: ApiSongData,
}
#[derive(Deserialize, Default, Clone)]
pub struct ServerInfo {
#[serde(rename = "LISTENERS", default)]
pub listeners: u64,
}
#[derive(Deserialize, Default, Clone)]
pub struct MiscInfo {
#[serde(rename = "CIRCLELINK", default)]
pub circle_link: String,
}
#[derive(Deserialize, Default, Clone)]
pub struct ApiSongData {
#[serde(rename = "RATING", default)]
pub rating: String,
#[serde(rename = "TIMESRATED", default)]
pub times_rated: u64,
}
#[derive(Default, Clone, Debug)]
pub struct MpvSong {
pub title: String,
pub artist: String,
}
pub fn parse_mpv_media_title(title: &str) -> Option<MpvSong> {
let trimmed = title.trim();
trimmed
.find(" - ")
.map(|idx| MpvSong { artist: trimmed[..idx].trim().to_string(), title: trimmed[idx + 3..].trim().to_string() })
}
#[derive(Default, Clone)]
pub struct SongData {
pub id: i64,
pub title: String,
pub artist: String,
pub album: String,
pub circle: String,
pub circle_link: String,
pub vocal: String,
pub original: String,
pub year: String,
pub duration: u64,
pub played: u64,
pub art_url: String,
pub listeners: u64,
pub rating: String,
pub times_rated: u64,
}
#[derive(Serialize, Deserialize, Clone)]
pub struct LikedSong {
pub id: i64,
pub title: String,
pub artist: String,
pub album: String,
pub duration: u64,
pub timestamp: u64,
#[serde(default)]
pub circle: String,
#[serde(default)]
pub vocal: String,
#[serde(default)]
pub original: String,
#[serde(default)]
pub year: String,
}