aboutsummaryrefslogtreecommitdiff
path: root/src/utils/spotify.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/spotify.rs')
-rw-r--r--src/utils/spotify.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/utils/spotify.rs b/src/utils/spotify.rs
new file mode 100644
index 0000000..4954f3b
--- /dev/null
+++ b/src/utils/spotify.rs
@@ -0,0 +1,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
+ )
+}