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.
This commit is contained in:
Kyle Simpson
2021-01-17 23:10:57 +00:00
parent cb2398f182
commit 868c44c19f
3 changed files with 21 additions and 2 deletions

View File

@@ -70,8 +70,8 @@ pub(crate) async fn runner(_interconnect: Interconnect, evt_rx: Receiver<EventMe
Mode(mode) => {
let old = state.playing;
state.playing = mode;
if old != mode && mode.is_done() {
global.fire_track_event(TrackEvent::End, i);
if old != mode {
global.fire_track_event(mode.as_track_event(), i);
}
},
Volume(vol) => {

View File

@@ -10,6 +10,14 @@
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[non_exhaustive]
pub enum TrackEvent {
/// The attached track has resumed playing.
///
/// This event will not fire when a track first starts,
/// but will fire when a track changes from, e.g., paused to playing.
/// This is most relevant for queue users.
Play,
/// The attached track has been paused.
Pause,
/// The attached track has ended.
End,
/// The attached track has looped.

View File

@@ -1,3 +1,5 @@
use crate::events::TrackEvent;
/// Playback status of a track.
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[non_exhaustive]
@@ -29,6 +31,15 @@ impl PlayMode {
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 {