Files
songbird/src/tracks/mode.rs
Kyle Simpson 868c44c19f Events: Add Play/Pause events.
Uses much of the existing machinery to add some more PlayMode state change events—all in all, a pretty simple change.

Closes #29.
2021-01-17 23:10:57 +00:00

50 lines
1.3 KiB
Rust

use crate::events::TrackEvent;
/// Playback status of a track.
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[non_exhaustive]
pub enum PlayMode {
/// The track is currently playing.
Play,
/// The track is currently paused, and may be resumed.
Pause,
/// The track has been manually stopped, and cannot be restarted.
Stop,
/// The track has naturally ended, and cannot be restarted.
End,
}
impl PlayMode {
/// Returns whether the track has irreversibly stopped.
pub fn is_done(self) -> bool {
matches!(self, PlayMode::Stop | PlayMode::End)
}
pub(crate) fn change_to(self, other: Self) -> PlayMode {
use PlayMode::*;
// Idea: a finished track cannot be restarted -- this action is final.
// We may want to change this in future so that seekable tracks can uncancel
// themselves, perhaps, but this requires a bit more machinery to readd...
match self {
Play | Pause => other,
state => state,
}
}
pub(crate) fn as_track_event(self) -> TrackEvent {
use PlayMode::*;
match self {
Play => TrackEvent::Play,
Pause => TrackEvent::Pause,
Stop | End => TrackEvent::End,
}
}
}
impl Default for PlayMode {
fn default() -> Self {
PlayMode::Play
}
}