aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/event_dispatcher/event_dispatcher.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/event_dispatcher/event_dispatcher.rs')
-rw-r--r--crates/shirabe/src/event_dispatcher/event_dispatcher.rs71
1 files changed, 67 insertions, 4 deletions
diff --git a/crates/shirabe/src/event_dispatcher/event_dispatcher.rs b/crates/shirabe/src/event_dispatcher/event_dispatcher.rs
index f74b4a2..091160e 100644
--- a/crates/shirabe/src/event_dispatcher/event_dispatcher.rs
+++ b/crates/shirabe/src/event_dispatcher/event_dispatcher.rs
@@ -125,10 +125,8 @@ impl EventDispatcher {
}
/// Set whether script handlers are active or not
- pub fn set_run_scripts(&mut self, run_scripts: bool) -> &mut Self {
+ pub fn set_run_scripts(&mut self, run_scripts: bool) {
self.run_scripts = run_scripts;
-
- self
}
/// Dispatch an event
@@ -1193,7 +1191,7 @@ impl EventDispatcher {
let installation_manager = composer.get_installation_manager();
let package_map = generator.build_package_map(
- &mut installation_manager.borrow_mut(),
+ &mut *installation_manager.borrow_mut(),
package.clone(),
packages,
)?;
@@ -1245,3 +1243,68 @@ impl EventDispatcher {
}
}
}
+
+// Composer's PartialComposer::setEventDispatcher() accepts any EventDispatcher subclass, so plugins
+// may swap in a replacement. The interface captures the methods reached through Composer's accessor
+// and through the `Rc<RefCell<dyn EventDispatcherInterface>>` references fed from it.
+pub trait EventDispatcherInterface: std::fmt::Debug {
+ fn dispatch(
+ &mut self,
+ event_name: Option<&str>,
+ event: Option<&mut dyn EventInterface>,
+ ) -> anyhow::Result<i64>;
+ fn dispatch_script(
+ &mut self,
+ event_name: &str,
+ dev_mode: bool,
+ additional_args: Vec<String>,
+ flags: IndexMap<String, PhpMixed>,
+ ) -> anyhow::Result<i64>;
+ fn dispatch_installer_event(
+ &mut self,
+ event_name: &str,
+ dev_mode: bool,
+ execute_operations: bool,
+ transaction: Transaction,
+ ) -> anyhow::Result<i64>;
+ fn add_listener(&mut self, event_name: &str, listener: Callable, priority: i64);
+ fn has_event_listeners(&mut self, event: &dyn EventInterface) -> bool;
+}
+
+impl EventDispatcherInterface for EventDispatcher {
+ fn dispatch(
+ &mut self,
+ event_name: Option<&str>,
+ event: Option<&mut dyn EventInterface>,
+ ) -> anyhow::Result<i64> {
+ self.dispatch(event_name, event)
+ }
+
+ fn dispatch_script(
+ &mut self,
+ event_name: &str,
+ dev_mode: bool,
+ additional_args: Vec<String>,
+ flags: IndexMap<String, PhpMixed>,
+ ) -> anyhow::Result<i64> {
+ self.dispatch_script(event_name, dev_mode, additional_args, flags)
+ }
+
+ fn dispatch_installer_event(
+ &mut self,
+ event_name: &str,
+ dev_mode: bool,
+ execute_operations: bool,
+ transaction: Transaction,
+ ) -> anyhow::Result<i64> {
+ self.dispatch_installer_event(event_name, dev_mode, execute_operations, transaction)
+ }
+
+ fn add_listener(&mut self, event_name: &str, listener: Callable, priority: i64) {
+ self.add_listener(event_name, listener, priority);
+ }
+
+ fn has_event_listeners(&mut self, event: &dyn EventInterface) -> bool {
+ self.has_event_listeners(event)
+ }
+}