X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/6cc550655fad64e784ff87916f3ef439ebaf4c4a..19b510cfc4ab3843f974aa494c58a477bb8ce508:/widgets/maildir.lua

diff --git a/widgets/maildir.lua b/widgets/maildir.lua
index 5cb6840..c9937b4 100644
--- a/widgets/maildir.lua
+++ b/widgets/maildir.lua
@@ -1,3 +1,4 @@
+
 --[[
                                                   
      Licensed under GNU General Public License v2 
@@ -7,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
 
@@ -29,13 +34,19 @@ local function worker(args)
     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
 
     maildir.widget = wibox.widget.textbox('')
 
     function update()
+        if ext_mail_cmd ~= nil
+        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
@@ -47,13 +58,12 @@ local 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
@@ -62,18 +72,19 @@ local function worker(args)
             end
         until line == nil
 
-        table.sort(boxes)
+        p:close()
 
         newmail = "no mail"
+        -- Count the total number of mails irrespective of where it was found
+        total = 0
 
-        local count = 0
-        for box, number in pairs(boxes)
+        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