[geary/mjog/plugin-support: 5/6] Add a libpeas Plugin.Notification extension, hook it up



commit 368823433ac8ebdc7c502696fe7d0ee6e4a99bea
Author: Michael Gratton <mike vee net>
Date:   Fri Sep 27 01:03:34 2019 +1000

    Add a libpeas Plugin.Notification extension, hook it up

 po/POTFILES.in                                     |  1 +
 src/client/application/application-controller.vala |  2 +-
 .../application/application-plugin-manager.vala    | 19 +++++++++++++++--
 src/client/meson.build                             |  2 ++
 src/client/plugin/plugin-notification.vala         | 24 ++++++++++++++++++++++
 5 files changed, 45 insertions(+), 3 deletions(-)
---
diff --git a/po/POTFILES.in b/po/POTFILES.in
index db79d4b8..4cb50a03 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -83,6 +83,7 @@ src/client/notification/new-messages-indicator.vala
 src/client/notification/notification-desktop.vala
 src/client/notification/null-indicator.vala
 src/client/notification/unity-launcher.vala
+src/client/plugin/plugin-notification.vala
 src/client/sidebar/sidebar-branch.vala
 src/client/sidebar/sidebar-common.vala
 src/client/sidebar/sidebar-count-cell-renderer.vala
diff --git a/src/client/application/application-controller.vala 
b/src/client/application/application-controller.vala
index 4be6860c..2a489cb6 100644
--- a/src/client/application/application-controller.vala
+++ b/src/client/application/application-controller.vala
@@ -280,7 +280,7 @@ public class Application.Controller : Geary.BaseObject {
             this.get_contact_store_for_account,
             this.should_notify_new_messages
         );
-
+        this.plugin_manager.load();
 
         // Create the main window (must be done after creating actions.)
         main_window = new MainWindow(this.application);
diff --git a/src/client/application/application-plugin-manager.vala 
b/src/client/application/application-plugin-manager.vala
index 9f472478..85421982 100644
--- a/src/client/application/application-plugin-manager.vala
+++ b/src/client/application/application-plugin-manager.vala
@@ -5,7 +5,7 @@
  * (version 2.1 or later). See the COPYING file in this distribution.
  */
 
-/*
+/**
  * Finds and manages application plugins.
  */
 public class Application.PluginManager : GLib.Object {
@@ -14,13 +14,28 @@ public class Application.PluginManager : GLib.Object {
     public NotificationContext notifications { get; set; }
 
     private Peas.Engine engine;
+    private Peas.ExtensionSet? notification_extensions = null;
 
 
     public PluginManager(GLib.File app_plugin_dir) {
         this.engine = Peas.Engine.get_default();
         this.engine.add_search_path(app_plugin_dir.get_path(), null);
+    }
 
-        // Load built-in plugins
+    public void load() {
+        this.notification_extensions = new Peas.ExtensionSet(
+            this.engine,
+            typeof(Plugin.Notification),
+            "context", this.notifications
+        );
+        this.notification_extensions.extension_added.connect((info, extension) => {
+                (extension as Plugin.Notification).activate();
+            });
+        this.notification_extensions.extension_removed.connect((info, extension) => {
+                (extension as Plugin.Notification).deactivate();
+            });
+
+        // Load built-in plugins by default
         foreach (Peas.PluginInfo info in this.engine.get_plugin_list()) {
             if (info.is_builtin()) {
                 this.engine.load_plugin(info);
diff --git a/src/client/meson.build b/src/client/meson.build
index 961b19da..6e0e3d7f 100644
--- a/src/client/meson.build
+++ b/src/client/meson.build
@@ -91,6 +91,8 @@ geary_client_vala_sources = files(
   'notification/null-indicator.vala',
   'notification/unity-launcher.vala',
 
+  'plugin/plugin-notification.vala',
+
   'sidebar/sidebar-branch.vala',
   'sidebar/sidebar-common.vala',
   'sidebar/sidebar-count-cell-renderer.vala',
diff --git a/src/client/plugin/plugin-notification.vala b/src/client/plugin/plugin-notification.vala
new file mode 100644
index 00000000..92e825fc
--- /dev/null
+++ b/src/client/plugin/plugin-notification.vala
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019 Michael Gratton <mike vee net>
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+/**
+ * A plugin for notifying of new mail being delivered.
+ */
+public abstract class Plugin.Notification : Geary.BaseObject {
+
+    /** Context object for notification information. */
+    public abstract Application.NotificationContext context {
+        get; construct set;
+    }
+
+    /* Invoked to activate the plugin, after loading. */
+    public abstract void activate();
+
+    /* Invoked to deactivate the plugin, prior to unloading */
+    public abstract void deactivate();
+
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]