Driver: Add ability to clear all global event handlers.
Closes #32. This should make event handler cleanup considerably easier depending on use case.
This commit is contained in:
@@ -238,6 +238,12 @@ impl Driver {
|
|||||||
self.send(CoreMessage::AddEvent(EventData::new(event, action)));
|
self.send(CoreMessage::AddEvent(EventData::new(event, action)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Removes all global event handlers from an audio context.
|
||||||
|
#[instrument(skip(self))]
|
||||||
|
pub fn remove_all_global_events(&mut self) {
|
||||||
|
self.send(CoreMessage::RemoveGlobalEvents);
|
||||||
|
}
|
||||||
|
|
||||||
/// Sends a message to the inner tasks, restarting it if necessary.
|
/// Sends a message to the inner tasks, restarting it if necessary.
|
||||||
fn send(&mut self, status: CoreMessage) {
|
fn send(&mut self, status: CoreMessage) {
|
||||||
// Restart thread if it errored.
|
// Restart thread if it errored.
|
||||||
|
|||||||
@@ -43,6 +43,9 @@ pub(crate) async fn runner(_interconnect: Interconnect, evt_rx: Receiver<EventMe
|
|||||||
|
|
||||||
global.fire_core_event(evt, ctx).await;
|
global.fire_core_event(evt, ctx).await;
|
||||||
},
|
},
|
||||||
|
Ok(RemoveGlobalEvents) => {
|
||||||
|
global.remove_handlers();
|
||||||
|
},
|
||||||
Ok(AddTrack(store, state, handle)) => {
|
Ok(AddTrack(store, state, handle)) => {
|
||||||
events.push(store);
|
events.push(store);
|
||||||
states.push(state);
|
states.push(state);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ pub enum CoreMessage {
|
|||||||
AddTrack(Track),
|
AddTrack(Track),
|
||||||
SetBitrate(Bitrate),
|
SetBitrate(Bitrate),
|
||||||
AddEvent(EventData),
|
AddEvent(EventData),
|
||||||
|
RemoveGlobalEvents,
|
||||||
SetConfig(Config),
|
SetConfig(Config),
|
||||||
Mute(bool),
|
Mute(bool),
|
||||||
Reconnect,
|
Reconnect,
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ pub enum EventMessage {
|
|||||||
AddGlobalEvent(EventData),
|
AddGlobalEvent(EventData),
|
||||||
AddTrackEvent(usize, EventData),
|
AddTrackEvent(usize, EventData),
|
||||||
FireCoreEvent(CoreContext),
|
FireCoreEvent(CoreContext),
|
||||||
|
RemoveGlobalEvents,
|
||||||
|
|
||||||
AddTrack(EventStore, TrackState, TrackHandle),
|
AddTrack(EventStore, TrackState, TrackHandle),
|
||||||
ChangeState(usize, TrackStateChange),
|
ChangeState(usize, TrackStateChange),
|
||||||
|
|||||||
@@ -109,6 +109,9 @@ async fn runner(mut config: Config, rx: Receiver<CoreMessage>, tx: Sender<CoreMe
|
|||||||
Ok(CoreMessage::AddEvent(evt)) => {
|
Ok(CoreMessage::AddEvent(evt)) => {
|
||||||
let _ = interconnect.events.send(EventMessage::AddGlobalEvent(evt));
|
let _ = interconnect.events.send(EventMessage::AddGlobalEvent(evt));
|
||||||
},
|
},
|
||||||
|
Ok(CoreMessage::RemoveGlobalEvents) => {
|
||||||
|
let _ = interconnect.events.send(EventMessage::RemoveGlobalEvents);
|
||||||
|
},
|
||||||
Ok(CoreMessage::Mute(m)) => {
|
Ok(CoreMessage::Mute(m)) => {
|
||||||
let _ = interconnect.mixer.send(MixerMessage::SetMute(m));
|
let _ = interconnect.mixer.send(MixerMessage::SetMute(m));
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -164,6 +164,10 @@ impl GlobalEvents {
|
|||||||
holder.push(index);
|
holder.push(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn remove_handlers(&mut self) {
|
||||||
|
self.store = EventStore::new();
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) async fn tick(
|
pub(crate) async fn tick(
|
||||||
&mut self,
|
&mut self,
|
||||||
events: &mut Vec<EventStore>,
|
events: &mut Vec<EventStore>,
|
||||||
|
|||||||
Reference in New Issue
Block a user