1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
use crate::types::Config;
use dbus::blocking::stdintf::org_freedesktop_dbus::Properties;
use dbus::{arg, blocking::Connection};
use std::time::Duration;
// getting spotify current artist and title.
// FIXME: I know im lazy asshole, this error handling looks ugly, i dont like it too, need to fix soon.
pub fn get_spotify(config: &Config) -> String {
let conn = match Connection::new_session() {
Ok(conn) => conn,
_ => return String::from(""),
};
let p = conn.with_proxy(
"org.mpris.MediaPlayer2.spotify",
"/org/mpris/MediaPlayer2",
Duration::from_millis(5000),
);
let metadata: arg::PropMap = match p.get("org.mpris.MediaPlayer2.Player", "Metadata") {
Ok(data) => data,
_ => return String::from(""),
};
let title: Option<&String> = arg::prop_cast(&metadata, "xesam:title");
let artist: Option<&Vec<String>> = arg::prop_cast(&metadata, "xesam:artist");
let title = match title {
Some(title) => title,
_ => "",
};
let artist = match artist {
Some(artist_vec) => match artist_vec.first() {
Some(name) => name,
_ => "",
},
None => "",
};
format!(
" {} {} - {} {}",
config.spotify.icon, artist, title, config.seperator
)
}
|