[geary/mjog/email-plugins: 3/13] Plugin.EmailStore: Ensure email-sent is emitted by email plugins



commit d33cf1dac653f2f7aa87b598767c2dba6b372eab
Author: Michael Gratton <mike vee net>
Date:   Sun Mar 22 16:29:48 2020 +1100

    Plugin.EmailStore: Ensure email-sent is emitted by email plugins

 src/client/application/application-controller.vala     |  4 ++++
 src/client/application/application-email-context.vala  |  5 +++++
 src/client/application/application-plugin-manager.vala | 11 ++++++++++-
 3 files changed, 19 insertions(+), 1 deletion(-)
---
diff --git a/src/client/application/application-controller.vala 
b/src/client/application/application-controller.vala
index 9789dc03..ec892c5e 100644
--- a/src/client/application/application-controller.vala
+++ b/src/client/application/application-controller.vala
@@ -1472,6 +1472,10 @@ internal class Application.Controller : Geary.BaseObject {
                      this.plugins.get_notification_contexts()) {
                 plugin.email_sent(context.account.information, sent);
             }
+            foreach (EmailContext plugin in
+                     this.plugins.get_email_contexts()) {
+                plugin.email_sent(context.account.information, sent);
+            }
         }
     }
 
diff --git a/src/client/application/application-email-context.vala 
b/src/client/application/application-email-context.vala
index 7f78567e..dd8a13df 100644
--- a/src/client/application/application-email-context.vala
+++ b/src/client/application/application-email-context.vala
@@ -29,6 +29,11 @@ internal class Application.EmailContext :
         return this.email;
     }
 
+    internal void email_sent(Geary.AccountInformation account,
+                             Geary.Email email) {
+        this.email.email_sent(email_factory.to_plugin_email(email, account));
+    }
+
     internal void destroy() {
         this.email_factory.destroy_email_store(this.email);
     }
diff --git a/src/client/application/application-plugin-manager.vala 
b/src/client/application/application-plugin-manager.vala
index 7ffc9972..89bc02be 100644
--- a/src/client/application/application-plugin-manager.vala
+++ b/src/client/application/application-plugin-manager.vala
@@ -168,6 +168,8 @@ public class Application.PluginManager : GLib.Object {
         new Gee.HashMap<Peas.PluginInfo,PluginContext>();
     private Gee.Map<Peas.PluginInfo,NotificationContext> notification_contexts =
         new Gee.HashMap<Peas.PluginInfo,NotificationContext>();
+    private Gee.Map<Peas.PluginInfo,EmailContext> email_contexts =
+        new Gee.HashMap<Peas.PluginInfo,EmailContext>();
 
 
     public PluginManager(Client application) throws GLib.Error {
@@ -279,6 +281,10 @@ public class Application.PluginManager : GLib.Object {
         return this.notification_contexts.values.read_only_view;
     }
 
+    internal Gee.Collection<EmailContext> get_email_contexts() {
+        return this.email_contexts.values.read_only_view;
+    }
+
     private void on_load_plugin(Peas.PluginInfo info) {
         var plugin_application = new ApplicationImpl(
             info, this.application, this.folders_factory
@@ -315,10 +321,12 @@ public class Application.PluginManager : GLib.Object {
 
             var email = plugin as Plugin.EmailExtension;
             if (email != null) {
-                email.email = new EmailContext(
+                var context = new EmailContext(
                     this.application,
                     this.email_factory
                 );
+                this.email_contexts.set(info, context);
+                email.email = context;
             }
 
             var folder = plugin as Plugin.FolderExtension;
@@ -407,6 +415,7 @@ public class Application.PluginManager : GLib.Object {
         if (email != null) {
             var email_context = email.email as Application.EmailContext;
             if (email_context != null) {
+                this.email_contexts.unset(context.info);
                 email_context.destroy();
             }
         }


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