X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/eb8cec907a50f3fd6df4b14ae10b910444017f92..716595550f974afc115b492b6f9be6d048dbfca4:/widgets/maildir.lua?ds=sidebyside

diff --git a/widgets/maildir.lua b/widgets/maildir.lua
index 00ab771..e963fc6 100644
--- a/widgets/maildir.lua
+++ b/widgets/maildir.lua
@@ -8,15 +8,19 @@
 --]]
 
 local newtimer        = require("lain.helpers").newtimer
+local read_pipe       = require("lain.helpers").read_pipe
+local spairs          = require("lain.helpers").spairs
 
 local wibox           = require("wibox")
 
-local io              = io
+local awful           = require("awful")
+local util            = require("lain.util")
+
+local io              = { popen  = io.popen }
 local os              = { getenv = os.getenv }
 local pairs           = pairs
 local string          = { len    = string.len,
                           match  = string.match }
-local table           = { sort   = table.sort }
 
 local setmetatable    = setmetatable
 
@@ -24,19 +28,24 @@ local setmetatable    = setmetatable
 -- lain.widgets.maildir
 local maildir = {}
 
-function worker(args)
+local function worker(args)
     local args         = args or {}
     local timeout      = args.timeout or 60
     local mailpath     = args.mailpath or os.getenv("HOME") .. "/Mail"
     local ignore_boxes = args.ignore_boxes or {}
     local settings     = args.settings or function() end
+    local ext_mail_cmd = args.external_mail_cmd
 
-    widget = wibox.widget.textbox('')
+    maildir.widget = wibox.widget.textbox('')
 
     function update()
+        if ext_mail_cmd then
+            awful.util.spawn(ext_mail_cmd)
+        end
+
         -- Find pathes to mailboxes.
         local p = io.popen("find " .. mailpath ..
-                           " -mindepth 1 -maxdepth 1 -type d" ..
+                           " -mindepth 1 -maxdepth 2 -type d" ..
                            " -not -name .git")
         local boxes = {}
         repeat
@@ -48,13 +57,12 @@ function worker(args)
                 -- match files that begin with a dot.
                 -- Afterwards the length of this string is the number of
                 -- new mails in that box.
-                local np = io.popen("find " .. line ..
+                local mailstring = read_pipe("find " .. line ..
                                     "/new -mindepth 1 -type f " ..
                                     "-not -name '.*' -printf a")
-                local mailstring = np:read("*all")
 
                 -- Strip off leading mailpath.
-                local box = string.match(line, mailpath .. "/*([^/]+)")
+                local box = string.match(line, mailpath .. "/(.*)")
                 local nummails = string.len(mailstring)
                 if nummails > 0
                 then
@@ -63,18 +71,20 @@ function worker(args)
             end
         until line == nil
 
-        table.sort(boxes)
+        p:close()
 
         newmail = "no mail"
 
-        local count = 0
-        for box, number in pairs(boxes)
+        -- Count the total number of mails irrespective of where it was found
+        total = 0
+
+        for box, number in spairs(boxes)
         do
-            count = count + 1
             -- Add this box only if it's not to be ignored.
             if not util.element_in_table(box, ignore_boxes)
             then
-                if newmail == ""
+                total = total + number
+                if newmail == "no mail"
                 then
                     newmail = box .. "(" .. number .. ")"
                 else
@@ -84,12 +94,12 @@ function worker(args)
             end
         end
 
+        widget = maildir.widget
         settings()
     end
 
     newtimer(mailpath, timeout, update, true)
-
-    return widget
+    return maildir.widget
 end
 
 return setmetatable(maildir, { __call = function(_, ...) return worker(...) end })