[Xfce4-commits] <postler:master> Implement Unity.LauncherEntry interface

Christian Dywan noreply at xfce.org
Sat Jun 4 14:30:06 CEST 2011


Updating branch refs/heads/master
         to 1b3156812d94e4dddfb7923d54f42456a9c6b772 (commit)
       from 2682481ef7a06e1c6a3d895a94b442b1e1cb406f (commit)

commit 1b3156812d94e4dddfb7923d54f42456a9c6b772
Author: Christian Dywan <christian at twotoasts.de>
Date:   Thu Jun 2 21:13:00 2011 +0200

    Implement Unity.LauncherEntry interface
    
    Expose Unread as a public property through DBus.

 postler/postler-service.vala |   53 ++++++++++++++++++++++++++++++++---------
 1 files changed, 41 insertions(+), 12 deletions(-)

diff --git a/postler/postler-service.vala b/postler/postler-service.vala
index 0155162..8a906f2 100644
--- a/postler/postler-service.vala
+++ b/postler/postler-service.vala
@@ -98,10 +98,35 @@ namespace Postler {
         internal signal void done (string error_message="");
     }
 
+    [DBus (name = "com.canonical.Unity.LauncherEntry")]
+    class LauncherEntry : Object {
+        PostlerService service;
+
+        public HashTable<string, Variant> query () {
+            var properties = new HashTable<string, Variant> (str_hash, str_equal);
+            properties.insert ("count", (int64)service.unread);
+            properties.insert ("count-visible", service.unread > 0);
+            properties.insert ("progress", 0.0);
+            properties.insert ("progress-visible", false);
+            properties.insert ("urgent", false);
+            return properties;
+        }
+
+        public signal void update (string app_uri, HashTable<string, Variant> properties);
+
+        public LauncherEntry (PostlerService service) {
+            this.service = service;
+            service.notify["unread"].connect ((object, pspec) => {
+                update ("application://postler.desktop", query ());
+            });
+            update ("application://postler.desktop", query ());
+        }
+    }
+
     [DBus (name = "org.elementary.Postler")]
     class PostlerService : Object {
         double total = 0;
-        int unread = 0;
+        public int64 unread { get; set; default = 0; }
         Dock.Item dockitem;
         Index? index = null;
         FileMonitor[] folder_monitors = {};
@@ -341,7 +366,6 @@ namespace Postler {
                 string[] pieces = msg.split (" ");
                 total = total - pieces[1].to_double ();
                 if (helper.folder == "INBOX") {
-                    unread += pieces[3].to_int ();
                     helper.folder = _("Inbox");
                 }
             }
@@ -401,7 +425,6 @@ namespace Postler {
                 return;
             }
 
-            unread = 0;
             foreach (var info in infos) {
                 try {
                     progress (info.display_name, _("Checking for mail..."), 0.0);
@@ -426,12 +449,17 @@ namespace Postler {
                             received (helper.display_name, error_message);
                             return;
                         }
-                        GLib.debug ("Done: %d new messages", unread);
-                        if (unread > 0) {
-                            Postler.App.send_notification (
-                                ngettext ("You have %d message",
-                                "You have %d new messages", unread).printf (unread));
-                            Postler.App.play_sound ("message-new-email");
+                        try {
+                            if ((unread = unread_messages ("%/INBOX/%")) > 0) {
+                                GLib.debug ("Done: %d new messages", (int)unread);
+                                Postler.App.send_notification (
+                                    ngettext ("You have %d message",
+                                    "You have %d new messages", (int)unread).printf ((int)unread));
+                                Postler.App.play_sound ("message-new-email");
+                            }
+                        }
+                        catch (GLib.Error error) {
+                            GLib.debug ("Done: ?? new messages");
                         }
                         received (helper.display_name, "");
                     });
@@ -464,7 +492,6 @@ namespace Postler {
             if (infos.length () == 0)
                 return false;
 
-            unread = 0;
             foreach (var info in infos) {
                 try {
                     string command = accounts.get_fetch_command (info);
@@ -552,8 +579,10 @@ namespace Postler {
 
         void name_aquired (DBusConnection conn) {
             try {
-                conn.register_object ("/org/elementary/postler",
-                                      new PostlerService ());
+                var service = new PostlerService ();
+                conn.register_object ("/org/elementary/postler", service);
+                conn.register_object ("/com/canonical/unity/launcherentry",
+                                      new LauncherEntry (service));
             } catch (IOError e) {
                 stderr.printf ("Could not register service\n");
             }



More information about the Xfce4-commits mailing list