mpris_player/
metadata.rs

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}