mpris_player2/
metadata.rs

1use dbus::arg::{Variant, RefArg};
2use std::collections::HashMap;
3
4#[derive(Debug, Clone)]
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_id: Option<String>,
16    pub track_number: Option<i32>,
17    pub url: Option<String>,
18}
19
20impl Metadata{
21    pub fn new() -> Self{
22        Metadata{
23            length: None,
24            art_url: None,
25            album: None,
26            album_artist: None,
27            artist: None,
28            composer: None,
29            disc_number: None,
30            genre: None,
31            title: None,
32            track_id: None,
33            track_number: None,
34            url: None,
35        }
36    }
37
38    pub fn to_hashmap(&self) -> HashMap<String, Variant<Box<dyn RefArg + 'static>>> {
39        let mut metadata = HashMap::new();
40
41        if self.length.is_some() {
42            let x = Box::new(self.length.unwrap().to_string()) as Box<dyn RefArg>;
43            metadata.insert("mpris:length".to_string(), Variant(x));
44        }
45
46        if self.art_url.is_some() {
47            let x = Box::new(self.art_url.clone().unwrap().clone()) as Box<dyn RefArg>;
48            metadata.insert("mpris:artUrl".to_string(), Variant(x));
49        }
50
51        if self.album.is_some() {
52            let x = Box::new(self.album.clone().unwrap().clone()) as Box<dyn RefArg>;
53            metadata.insert("xesam:album".to_string(), Variant(x));
54        }
55
56        if self.album_artist.is_some() {
57            let x = Box::new(self.album_artist.clone().unwrap().clone()) as Box<dyn RefArg>;
58            metadata.insert("xesam:albumArtist".to_string(), Variant(x));
59        }
60
61        if self.artist.is_some() {
62            let x = Box::new(self.artist.clone().unwrap().clone()) as Box<dyn RefArg>;
63            metadata.insert("xesam:artist".to_string(), Variant(x));
64        }
65
66        if self.composer.is_some() {
67            let x = Box::new(self.composer.clone().unwrap().clone()) as Box<dyn RefArg>;
68            metadata.insert("xesam:composer".to_string(), Variant(x));
69        }
70
71        if self.disc_number.is_some() {
72            let x = Box::new(self.disc_number.unwrap()) as Box<dyn RefArg>;
73            metadata.insert("xesam:discNumber".to_string(), Variant(x));
74        }
75
76        if self.genre.is_some() {
77            let x = Box::new(self.clone().genre.unwrap().clone()) as Box<dyn RefArg>;
78            metadata.insert("xesam:genre".to_string(), Variant(x));
79        }
80
81        if self.title.is_some() {
82            let x = Box::new(self.clone().title.unwrap().clone()) as Box<dyn RefArg>;
83            metadata.insert("xesam:title".to_string(), Variant(x));
84        }
85        
86        if self.track_id.is_some() {
87            let track_id = self.track_id.clone().unwrap();
88            metadata.insert("mpris:trackid".to_string(), Variant(Box::new(track_id)));
89        }
90
91        if self.track_number.is_some() {
92            let x = Box::new(self.track_number.unwrap()) as Box<dyn RefArg>;
93            metadata.insert("xesam:trackNumber".to_string(), Variant(x));
94        }
95
96        if self.url.is_some() {
97            let x = Box::new(self.url.clone().unwrap().clone()) as Box<dyn RefArg>;
98            metadata.insert("xesam:url".to_string(), Variant(x));
99        }
100
101        metadata
102    }
103}