mpris_player2/
metadata.rs1use 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}