Procházet zdrojové kódy

feat(core): add plugin register API on the `Manager` trait (#2340)

Lucas Fernandes Nogueira před 4 roky
rodič
revize
5b7be8133a
3 změnil soubory, kde provedl 17 přidání a 1 odebrání
  1. 5 0
      .changes/dynamic-plugin.md
  2. 11 0
      core/tauri/src/lib.rs
  3. 1 1
      core/tauri/src/manager.rs

+ 5 - 0
.changes/dynamic-plugin.md

@@ -0,0 +1,5 @@
+---
+"tauri": patch
+---
+
+Allow registering a plugin on structs that implements the `Manager` trait (`App`, `AppHandle`, `Window`) using the trait's `plugin` method.

+ 11 - 0
core/tauri/src/lib.rs

@@ -315,6 +315,17 @@ pub trait Manager<R: Runtime>: sealed::ManagerBase<R> {
   {
     self.manager().inner.state.get()
   }
+
+  /// Adds a plugin to the runtime.
+  fn plugin<P: plugin::Plugin<R> + 'static>(&self, plugin: P) {
+    self
+      .manager()
+      .inner
+      .plugins
+      .lock()
+      .unwrap()
+      .register(plugin);
+  }
 }
 
 /// Prevent implementation details from leaking out of the [`Manager`] trait.

+ 1 - 1
core/tauri/src/manager.rs

@@ -60,7 +60,7 @@ const MENU_EVENT: &str = "tauri://menu";
 #[default_runtime(crate::Wry, wry)]
 pub struct InnerWindowManager<R: Runtime> {
   windows: Mutex<HashMap<String, Window<R>>>,
-  plugins: Mutex<PluginStore<R>>,
+  pub(crate) plugins: Mutex<PluginStore<R>>,
   listeners: Listeners,
   pub(crate) state: Arc<StateManager>,