[Xfce4-commits] <postler:master> Update number of unread messages on file changes

Christian Dywan noreply at xfce.org
Fri Jun 4 19:08:03 CEST 2010


Updating branch refs/heads/master
         to 50922e9a1df6942272796427efb32e3ea57f655a (commit)
       from a975fad4e2ccf56e670c4a93c1b031a59f183ec3 (commit)

commit 50922e9a1df6942272796427efb32e3ea57f655a
Author: Christian Dywan <christian at twotoasts.de>
Date:   Fri Jun 4 15:53:24 2010 +0200

    Update number of unread messages on file changes

 postler/postler-folders.vala |   30 +++++++++++++++++++++++++-----
 1 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/postler/postler-folders.vala b/postler/postler-folders.vala
index 4d1959b..fb337fa 100644
--- a/postler/postler-folders.vala
+++ b/postler/postler-folders.vala
@@ -20,6 +20,8 @@ struct Postler.MailFolder {
 public class Postler.Folders : Gtk.TreeView {
     Gtk.TreeStore store;
     string last_location;
+    FileMonitor[] unread_monitors = {};
+    uint unread_monitors_count = 0;
 
     public Postler.Messages messages { get; set; }
     public string? selected_location {
@@ -58,7 +60,22 @@ public class Postler.Folders : Gtk.TreeView {
         { "Trash", STOCK_USER_TRASH, N_("Trash") }
     };
 
+    void unread_monitor_changed (File msg_dir, string path, string account) {
+        var msg_enumerator = msg_dir.enumerate_children ("", 0, null);
+        int unread = 0;
+        FileInfo info;
+        while ((info = msg_enumerator.next_file (null)) != null)
+            unread++;
+        Gtk.TreeIter iter;
+        if (store.get_iter_from_string (out iter, path))
+            store.set (iter,
+                Columns.NAME, "%s (%d)".printf (account, unread),
+                -1);
+    }
+
     bool populate () {
+        unread_monitors = {};
+        unread_monitors_count = 0;
         string toplevel = Environment.get_variable ("MAILDIR");
         if (toplevel == null || toplevel == "")
             toplevel = Environment.get_home_dir () + "/Mail";
@@ -96,14 +113,17 @@ public class Postler.Folders : Gtk.TreeView {
                     if (name == "INBOX") {
                         var msg_dir = folder_dir.resolve_relative_path (
                             location + "/" + name + "/new");
-                        var msg_enumerator = msg_dir.enumerate_children ("", 0, null);
-                        int unread = 0;
-                        while ((info = msg_enumerator.next_file (null)) != null)
-                            unread++;
+                        unread_monitors += msg_dir.monitor_directory (0, null);
+                        unread_monitors_count++;
+                        string path = store.get_string_from_iter (account_iter);
+                        unread_monitors[unread_monitors_count - 1].changed.connect (
+                            (monitor, file, other, event) => {
+                            unread_monitor_changed (msg_dir, path, account_name);
+                        });
+                        unread_monitor_changed (msg_dir, path, account_name);
 
                         store.set (account_iter,
                             Columns.ICON, STOCK_INBOX,
-                            Columns.NAME, "%s (%d)".printf (account_name, unread),
                             Columns.LOCATION, location + "/" + name,
                             -1);
                         continue;



More information about the Xfce4-commits mailing list