1use dbus::arg::{RefArg, Variant};
2use std::collections::HashMap;
3
4#[derive(Debug, Default, Clone, PartialEq)]
5pub struct Metadata {
6 pub length: Option<i64>,
7 pub art_url: Option<String>,
8 pub album: Option<String>,
9 pub album_artist: Option<Vec<String>>,
10 pub artist: Option<Vec<String>>,
11 pub composer: Option<Vec<String>>,
12 pub disc_number: Option<i32>,
13 pub genre: Option<Vec<String>>,
14 pub title: Option<String>,
15 pub track_number: Option<i32>,
16 pub url: Option<String>,
17}
18
19impl Metadata {
20 pub fn new() -> Self {
21 Self::default()
22 }
23
24 pub fn to_hashmap(&self) -> HashMap<String, Variant<Box<dyn RefArg + 'static>>> {
25 let mut metadata = HashMap::new();
26
27 if self.length.is_some() {
28 let x = Box::new(self.length.unwrap().to_string()) as Box<dyn RefArg>;
29 metadata.insert("mpris:length".to_string(), Variant(x));
30 }
31
32 if self.art_url.is_some() {
33 let x = Box::new(self.art_url.clone().unwrap()) as Box<dyn RefArg>;
34 metadata.insert("mpris:artUrl".to_string(), Variant(x));
35 }
36
37 if self.album.is_some() {
38 let x = Box::new(self.album.clone().unwrap()) as Box<dyn RefArg>;
39 metadata.insert("xesam:album".to_string(), Variant(x));
40 }
41
42 if self.album_artist.is_some() {
43 let x = Box::new(self.album_artist.clone().unwrap()) as Box<dyn RefArg>;
44 metadata.insert("xesam:albumArtist".to_string(), Variant(x));
45 }
46
47 if self.artist.is_some() {
48 let x = Box::new(self.artist.clone().unwrap()) as Box<dyn RefArg>;
49 metadata.insert("xesam:artist".to_string(), Variant(x));
50 }
51
52 if self.composer.is_some() {
53 let x = Box::new(self.composer.clone().unwrap()) as Box<dyn RefArg>;
54 metadata.insert("xesam:composer".to_string(), Variant(x));
55 }
56
57 if self.disc_number.is_some() {
58 let x = Box::new(self.disc_number.unwrap()) as Box<dyn RefArg>;
59 metadata.insert("xesam:discNumber".to_string(), Variant(x));
60 }
61
62 if self.genre.is_some() {
63 let x = Box::new(self.clone().genre.unwrap()) as Box<dyn RefArg>;
64 metadata.insert("xesam:genre".to_string(), Variant(x));
65 }
66
67 if self.title.is_some() {
68 let x = Box::new(self.clone().title.unwrap()) as Box<dyn RefArg>;
69 metadata.insert("xesam:title".to_string(), Variant(x));
70 }
71
72 if self.track_number.is_some() {
73 let x = Box::new(self.track_number.unwrap()) as Box<dyn RefArg>;
74 metadata.insert("xesam:trackNumber".to_string(), Variant(x));
75 }
76
77 if self.url.is_some() {
78 let x = Box::new(self.url.clone().unwrap()) as Box<dyn RefArg>;
79 metadata.insert("xesam:url".to_string(), Variant(x));
80 }
81
82 metadata
83 }
84}