Krolyxon
Commit bf939a4

rmptuisrcsong.rs

67 lines · 1.9 KB · Rust

1use mpd::{Client, Song};
2
3#[derive(Debug)]
4#[derive(Clone )]
5pub struct RSong {
6 pub file: String,
7 pub artist: Option<String>,
8 pub title: Option<String>,
9 pub duration: Option<u32>,
10 pub last_mod: Option<String>,
11 pub name: Option<String>,
12 pub place: Option<String>,
13 pub range: Option<String>,
14 pub tags: Vec<(String, String)>,
15}
16
17impl RSong {
18 pub fn new(c: &mut Client, filename: String) -> Self {
19 let mut s = RSong {
20 file: filename.clone(),
21 artist: None,
22 title: None,
23 duration: None,
24 last_mod: None,
25 name: None,
26 place: None,
27 range: None,
28 tags: vec![],
29 };
30
31 // Dummy song
32
33 let song = Song {
34 file: filename.clone(),
35 artist: None,
36 title: None,
37 duration: None,
38 last_mod: None,
39 name: None,
40 place: None,
41 range: None,
42 tags: vec![("".to_string(), "".to_string())],
43 };
44
45 for (k, v) in (c.readcomments(song).unwrap()).flatten() {
46 if k.to_lowercase().contains("artist") {
47 s.artist = Some(v);
48 } else if k.to_lowercase().contains("title") {
49 s.title = Some(v);
50 } else if k.to_lowercase().contains("duration") {
51 s.duration = Some(v.parse::<u32>().unwrap());
52 } else if k.to_lowercase().contains("lastmod") {
53 s.last_mod = Some(v);
54 } else if k.to_lowercase().contains("name") {
55 s.name = Some(v);
56 } else if k.to_lowercase().contains("place") {
57 s.place = Some(v);
58 } else if k.to_lowercase().contains("range") {
59 s.range = Some(v);
60 } else {
61 s.tags.push((k, v));
62 }
63 }
64
65 s
66 }
67}