From 04e5d2ad28af2c0b561ed4443eabddc4ee70d1f2 Mon Sep 17 00:00:00 2001 From: krolxon Date: Fri, 26 Apr 2024 14:32:58 +0530 Subject: alot of edge cases removed, ui improvments --- src/song.rs | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100755 src/song.rs (limited to 'src/song.rs') diff --git a/src/song.rs b/src/song.rs new file mode 100755 index 0000000..f1a10eb --- /dev/null +++ b/src/song.rs @@ -0,0 +1,67 @@ +use mpd::{Client, Song}; + +#[derive(Debug)] +#[derive(Clone )] +pub struct RSong { + pub file: String, + pub artist: Option, + pub title: Option, + pub duration: Option, + pub last_mod: Option, + pub name: Option, + pub place: Option, + pub range: Option, + pub tags: Vec<(String, String)>, +} + +impl RSong { + pub fn new(c: &mut Client, filename: String) -> Self { + let mut s = RSong { + file: filename.clone(), + artist: None, + title: None, + duration: None, + last_mod: None, + name: None, + place: None, + range: None, + tags: vec![], + }; + + // Dummy song + + let song = Song { + file: filename.clone(), + artist: None, + title: None, + duration: None, + last_mod: None, + name: None, + place: None, + range: None, + tags: vec![("".to_string(), "".to_string())], + }; + + for (k, v) in (c.readcomments(song).unwrap()).flatten() { + if k.to_lowercase().contains("artist") { + s.artist = Some(v); + } else if k.to_lowercase().contains("title") { + s.title = Some(v); + } else if k.to_lowercase().contains("duration") { + s.duration = Some(v.parse::().unwrap()); + } else if k.to_lowercase().contains("lastmod") { + s.last_mod = Some(v); + } else if k.to_lowercase().contains("name") { + s.name = Some(v); + } else if k.to_lowercase().contains("place") { + s.place = Some(v); + } else if k.to_lowercase().contains("range") { + s.range = Some(v); + } else { + s.tags.push((k, v)); + } + } + + s + } +} -- cgit v1.2.3