1
0
Fork 0
mirror of https://github.com/Zedfrigg/ironbar.git synced 2025-04-19 19:34:24 +02:00

fix(music): correctly show/hide popup elements based on player capabilities

This commit is contained in:
Jake Stanger 2023-06-30 17:59:40 +01:00
parent 12053f111a
commit 1759945912
No known key found for this signature in database
GPG key ID: C51FC8F9CB0BEA61
2 changed files with 37 additions and 19 deletions

View file

@ -162,10 +162,7 @@ impl Client {
let track_list = player.get_track_list();
let volume_percent = player
.get_volume()
.map(|vol| (vol * 100.0) as u8)
.unwrap_or(0);
let volume_percent = player.get_volume().map(|vol| (vol * 100.0) as u8).ok();
let status = Status {
// MRPIS doesn't seem to provide playlist info reliably,
@ -284,9 +281,7 @@ impl MusicClient for Client {
playlist_position: 0,
playlist_length: 0,
state: PlayerState::Stopped,
elapsed: None,
duration: None,
volume_percent: 0,
volume_percent: None,
};
send!(self.tx, PlayerUpdate::Update(Box::new(None), status));
}
@ -305,9 +300,18 @@ impl From<Metadata> for Track {
const KEY_GENRE: &str = "xesam:genre";
Self {
title: value.title().map(std::string::ToString::to_string),
album: value.album_name().map(std::string::ToString::to_string),
artist: value.artists().map(|artists| artists.join(", ")),
title: value
.title()
.map(std::string::ToString::to_string)
.and_then(replace_empty_none),
album: value
.album_name()
.map(std::string::ToString::to_string)
.and_then(replace_empty_none),
artist: value
.artists()
.map(|artists| artists.join(", "))
.and_then(replace_empty_none),
date: value
.get(KEY_DATE)
.and_then(mpris::MetadataValue::as_string)
@ -332,3 +336,11 @@ impl From<PlaybackStatus> for PlayerState {
}
}
}
fn replace_empty_none(string: String) -> Option<String> {
if string.is_empty() {
None
} else {
Some(string)
}
}

View file

@ -423,15 +423,9 @@ impl Module<Button> for MusicModule {
}
}
title_label
.label
.set_text(&update.song.title.unwrap_or_default());
album_label
.label
.set_text(&update.song.album.unwrap_or_default());
artist_label
.label
.set_text(&update.song.artist.unwrap_or_default());
update_popup_metadata_label(update.song.title, &title_label);
update_popup_metadata_label(update.song.album, &album_label);
update_popup_metadata_label(update.song.artist, &artist_label);
match update.status.state {
PlayerState::Stopped => {
@ -500,6 +494,18 @@ impl Module<Button> for MusicModule {
}
}
fn update_popup_metadata_label(text: Option<String>, label: &IconLabel) {
match text {
Some(value) => {
label.label.set_text(&value);
label.container.show_all();
}
None => {
label.container.hide();
}
}
}
/// Replaces each of the formatting tokens in the formatting string
/// with actual data pulled from the music player
fn replace_tokens(format_string: &str, tokens: &Vec<String>, song: &Track) -> String {