rsblocks/src/utils/spotify.rs
Shoelace 2a23bd2044
Threaded to async (#58)
* Add async deps

* Rename blocks to 'BlockManager'

* Refactor "Blocks" to own module

* Make all util fn async

* Remove stray println
2021-05-19 22:44:58 +03:00

60 lines
1.6 KiB
Rust

use crate::config::CONFIG;
use crate::types::ThreadsData;
use dbus::blocking::stdintf::org_freedesktop_dbus::Properties;
use dbus::{arg, blocking::Connection};
use std::time::Duration;
// getting spotify current artist and title.
pub async fn get_spotify() -> ThreadsData {
let empty_data = ThreadsData::Spotify(String::from(""));
let conn = match Connection::new_session() {
Ok(conn) => conn,
_ => return empty_data,
};
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 empty_data,
};
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) => {
if title.len() > 30 {
&title[..30]
} else {
title.as_str()
}
}
_ => "",
};
let artist = match artist {
Some(artist_vec) => match artist_vec.first() {
Some(name) => {
if name.len() > 30 {
&name[..30]
} else {
name.as_str()
}
}
_ => "",
},
None => "",
};
let data = format!(
" {} {} - {} {}",
CONFIG.spotify.icon, artist, title, CONFIG.seperator
);
ThreadsData::Spotify(data)
}