Improve the get cover mecarthim
This commit is contained in:
parent
b75d56485c
commit
391ca67890
5 changed files with 31 additions and 11 deletions
|
@ -1,8 +1,8 @@
|
||||||
use cmus_notify::{
|
use cmus_notify::{
|
||||||
cmus::{self, query::CmusQueryResponse},
|
cmus::{self, events::CmusEvent, query::CmusQueryResponse},
|
||||||
notification,
|
notification,
|
||||||
settings::Settings,
|
settings::Settings,
|
||||||
TrackCover,
|
track_cover, TrackCover,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(feature = "debug")]
|
#[cfg(feature = "debug")]
|
||||||
|
@ -80,11 +80,32 @@ fn main() {
|
||||||
// Update the previous response.
|
// Update the previous response.
|
||||||
previous_response = response;
|
previous_response = response;
|
||||||
|
|
||||||
|
if events.len() == 1 {
|
||||||
|
// If the track is changed, we need to update the cover.
|
||||||
|
match &events[0] {
|
||||||
|
CmusEvent::TrackChanged(track) => {
|
||||||
|
previous_cover = track_cover(&track.path, settings.depth,
|
||||||
|
settings.force_use_external_cover,
|
||||||
|
settings.no_use_external_cover);
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
if previous_cover == TrackCover::None {
|
||||||
|
// If the cover is not found, we need to update it.
|
||||||
|
if let Ok(track) = &previous_response.track() {
|
||||||
|
previous_cover = track_cover(&track.path, settings.depth,
|
||||||
|
settings.force_use_external_cover,
|
||||||
|
settings.no_use_external_cover);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
notification::show_notification(
|
notification::show_notification(
|
||||||
events,
|
events,
|
||||||
&settings,
|
&settings,
|
||||||
&mut notification,
|
&mut notification,
|
||||||
&mut previous_cover,
|
&previous_cover,
|
||||||
);
|
);
|
||||||
// TODO: Handle the error.
|
// TODO: Handle the error.
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use crate::cmus::player_settings::{AAAMode, Shuffle};
|
use crate::cmus::player_settings::{AAAMode, Shuffle};
|
||||||
use crate::cmus::{Track, TrackStatus};
|
use crate::cmus::{Track, TrackStatus};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug, PartialEq)]
|
||||||
pub enum CmusEvent {
|
pub enum CmusEvent {
|
||||||
StatusChanged(Track),
|
StatusChanged(Track),
|
||||||
TrackChanged(Track),
|
TrackChanged(Track),
|
||||||
|
|
|
@ -67,6 +67,8 @@ impl CmusQueryResponse {
|
||||||
#[cfg(feature = "debug")]
|
#[cfg(feature = "debug")]
|
||||||
debug!("Track changed: {:?} -> {:?}", other_track, track);
|
debug!("Track changed: {:?} -> {:?}", other_track, track);
|
||||||
events.push(CmusEvent::TrackChanged(other_track));
|
events.push(CmusEvent::TrackChanged(other_track));
|
||||||
|
// We don't need to check for other changes, since the track changed.
|
||||||
|
return Ok(events);
|
||||||
} else if track.status != other_track.status {
|
} else if track.status != other_track.status {
|
||||||
#[cfg(feature = "debug")]
|
#[cfg(feature = "debug")]
|
||||||
debug!(
|
debug!(
|
||||||
|
|
|
@ -104,7 +104,7 @@ pub fn search_for(
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The cover of a track.
|
/// The cover of a track.
|
||||||
#[derive(Debug)]
|
#[derive(Debug, PartialEq)]
|
||||||
pub enum TrackCover {
|
pub enum TrackCover {
|
||||||
/// The cover is embedded in the track.
|
/// The cover is embedded in the track.
|
||||||
/// The `TempFile` object contains the contents of the embedded picture.
|
/// The `TempFile` object contains the contents of the embedded picture.
|
||||||
|
|
|
@ -3,14 +3,14 @@ use crate::cmus::{Track, TrackStatus};
|
||||||
use crate::settings::Settings;
|
use crate::settings::Settings;
|
||||||
use crate::{process_template_placeholders, track_cover, TrackCover};
|
use crate::{process_template_placeholders, track_cover, TrackCover};
|
||||||
#[cfg(feature = "debug")]
|
#[cfg(feature = "debug")]
|
||||||
use log::{info,debug};
|
use log::{debug, info};
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn show_notification(
|
pub fn show_notification(
|
||||||
events: Vec<CmusEvent>,
|
events: Vec<CmusEvent>,
|
||||||
settings: &Settings,
|
settings: &Settings,
|
||||||
notification: &mut notify_rust::Notification,
|
notification: &mut notify_rust::Notification,
|
||||||
previous_cover: &mut TrackCover,
|
cover: &TrackCover,
|
||||||
) -> Result<(), notify_rust::error::Error> {
|
) -> Result<(), notify_rust::error::Error> {
|
||||||
if events.is_empty() {
|
if events.is_empty() {
|
||||||
#[cfg(feature = "debug")]
|
#[cfg(feature = "debug")]
|
||||||
|
@ -19,16 +19,13 @@ pub fn show_notification(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the image of the notification.
|
// Set the image of the notification.
|
||||||
previous_cover.set_notification_image(notification);
|
cover.set_notification_image(notification);
|
||||||
|
|
||||||
for event in events {
|
for event in events {
|
||||||
#[cfg(feature = "debug")]
|
#[cfg(feature = "debug")]
|
||||||
info!("event: {:?}", event);
|
info!("event: {:?}", event);
|
||||||
|
|
||||||
match event {
|
match event {
|
||||||
CmusEvent::TrackChanged(track) => {
|
|
||||||
*previous_cover = track_cover(track.path.as_str(), settings.depth, settings.force_use_external_cover, settings.no_use_external_cover);
|
|
||||||
}
|
|
||||||
CmusEvent::StatusChanged(track) => {
|
CmusEvent::StatusChanged(track) => {
|
||||||
#[cfg(feature = "debug")]
|
#[cfg(feature = "debug")]
|
||||||
debug!("Status changed: {:?}", track.status);
|
debug!("Status changed: {:?}", track.status);
|
||||||
|
|
Loading…
Reference in a new issue