use kithara_events::{Event, TrackId};
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum AdvanceReason {
InitialLoad,
NaturalEof,
CrossfadePreArm,
UserSelect,
UserNext,
UserPrev,
TrackFailed,
RemovedCurrent,
Repeat,
Cancelled,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum QueueRepeatMode {
Off,
One,
All,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum TrackStatus {
Pending,
Loading,
Slow,
Loaded,
Failed(String),
Consumed,
Cancelled,
}
#[derive(Clone, Debug, Event)]
pub enum QueueEvent {
TrackAdded {
id: TrackId,
index: usize,
},
TrackRemoved {
id: TrackId,
},
TrackStatusChanged {
id: TrackId,
status: TrackStatus,
},
CurrentTrackChanged {
id: Option<TrackId>,
},
CurrentTrackAdvance {
id: Option<TrackId>,
reason: AdvanceReason,
},
QueueEnded,
TrackLoadFailed {
id: TrackId,
reason: String,
auto_skipped: bool,
},
CrossfadeSettingsChanged {
settings: crate::CrossfadeSettings,
},
PlaybackOrderChanged {
order: crate::PlaybackOrder,
},
ActionAtItemEndChanged {
action: crate::ActionAtItemEnd,
},
RepeatModeChanged {
mode: QueueRepeatMode,
},
NextTrackReady {
id: TrackId,
index: usize,
},
CrossfadeStarted {
settings: crate::CrossfadeSettings,
},
}
#[derive(Clone, Debug, Event)]
pub enum ItemEvent {
PlaybackLikelyToKeepUp,
PlaybackStalled,
}
#[cfg(test)]
mod tests {
use kithara_test_utils::kithara;
use super::*;
#[kithara::test]
fn queue_and_item_events_are_owned_by_kithara_queue() {
assert_eq!(
::core::any::type_name::<QueueEvent>(),
"kithara_queue::event::QueueEvent"
);
assert_eq!(
::core::any::type_name::<ItemEvent>(),
"kithara_queue::event::ItemEvent"
);
}
}