Skip to content

Commit

Permalink
feat: get artist is ok
Browse files Browse the repository at this point in the history
  • Loading branch information
ttimochan committed Jul 20, 2023
1 parent 68b1af1 commit f22d211
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 22 deletions.
47 changes: 39 additions & 8 deletions src/get_media.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,19 @@
* @Author: timochan
* @Date: 2023-07-17 15:23:40
* @LastEditors: timochan
* @LastEditTime: 2023-07-20 12:35:42
* @LastEditTime: 2023-07-20 15:23:01
* @FilePath: /processforlinux/src/get_media.rs
*/
use dbus::arg::RefArg;
use dbus::blocking::stdintf::org_freedesktop_dbus::Properties;
use dbus::blocking::{Connection, Proxy};

pub fn get_media() -> Option<(String, String)> {
pub struct MediaMetadata {
pub title: Option<String>,
pub artist: Option<String>,
}

pub fn get_media_metadata() -> Option<MediaMetadata> {
let media_player_identifiers = [
"org.mpris.MediaPlayer2.yesplaymusic",
"org.mpris.MediaPlayer2.netease-cloud-music",
Expand Down Expand Up @@ -39,17 +44,43 @@ pub fn get_media() -> Option<(String, String)> {
Err(_) => continue, // Try the next media player identifier.
};

if let Some(title) = metadata.get("xesam:title") {
if let Some(title_str) = title.as_str() {
if let Some(artist) = metadata.get("xesam:artist") {
if let Some(artist_str) = artist.as_str() {
return Some((title_str.to_string(), artist_str.to_string()));
let title = metadata
.get("xesam:title")
.and_then(|title| title.as_str())
.map(|title_str| title_str.to_string());

let artist = if let Some(artist_variant) = metadata.get("xesam:artist") {
match artist_variant {
dbus::arg::Variant(boxed_value) => {
if let Some(artist_str) = boxed_value.as_str() {
Some(artist_str.to_string())
} else if let Some(artist_array) = boxed_value.as_iter() {
let artists: Vec<String> = artist_array
.filter_map(|a| a.as_str().map(String::from))
.collect();

if !artists.is_empty() {
let artists_str = artists.join(", ");
Some(artists_str)
} else {
println!("No artist information available.");
None
}
} else {
println!("Unknown artist format.");
None
}
}
}
} else {
None
};

if title.is_some() || artist.is_some() {
return Some(MediaMetadata { title, artist });
}
}
}

None
None // Return None if no valid media player connection or metadata is found.
}
27 changes: 15 additions & 12 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* @Author: timochan
* @Date: 2023-07-17 11:48:02
* @LastEditors: timochan
* @LastEditTime: 2023-07-20 12:35:16
* @LastEditTime: 2023-07-20 15:24:01
* @FilePath: /processforlinux/src/main.rs
*/
mod get_active_window;
Expand All @@ -25,17 +25,20 @@ async fn run_loop() {
break;
}
};
let (media_title, media_artist) = match media_enable.as_str() {
"true" => match get_media::get_media() {
Some((title, artist)) => (title, artist),
None => (String::from("None"), String::new()),
},
_ => (String::from("None"), String::new()),
};
println!(
"media_title: {} media_artlist: {:?}",
media_title, media_artist
);

let mut media_title = String::new();
let mut media_artist = String::new();
if media_enable == "true" {
let media_metadata = match get_media::get_media_metadata() {
Some(metadata) => metadata,
None => {
eprintln!("Failed to get media metadata");
continue;
}
};
media_title = media_metadata.title.unwrap_or_else(|| "None".to_string());
media_artist = media_metadata.artist.unwrap_or_else(|| "None".to_string());
}
let process_name = match get_active_window::get_active_window_process_and_title() {
Ok(name) => name,
Err(e) => {
Expand Down
3 changes: 1 addition & 2 deletions src/reportprocess.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* @Author: timochan
* @Date: 2023-07-17 13:50:34
* @LastEditors: timochan
* @LastEditTime: 2023-07-20 12:05:50
* @LastEditTime: 2023-07-20 15:24:09
* @FilePath: /processforlinux/src/reportprocess.rs
*/
use chrono::Utc;
Expand Down Expand Up @@ -86,7 +86,6 @@ pub async fn process_report(

println!("--------------------------------------------------");
println!("This Report Time: {}", this_report_time);
println!("This Report payload: {}", &payload);
println!("Response: {}", &response);
println!("Next Report Time: {}", next_report_time);
println!("--------------------------------------------------");
Expand Down

0 comments on commit f22d211

Please sign in to comment.