diff options
author | Adrian C. (anrxc) <anrxc@sysphere.org> | 2009-10-01 11:46:28 +0200 |
---|---|---|
committer | Adrian C. (anrxc) <anrxc@sysphere.org> | 2009-10-01 11:46:28 +0200 |
commit | 5dac6a44fd38a8f599ed8ad73f98a963123c49fd (patch) | |
tree | f5fc2e4e3c0c296553b7ab2c074a20d338471b5a /mboxc.lua | |
parent | 32fe7703c0bed48aa95095dfcd25cefa4e739846 (diff) | |
download | vicious-legacy-5dac6a44fd38a8f599ed8ad73f98a963123c49fd.tar.xz |
mboxc: support for multiple mbox files
Widget takes a table with full paths to mbox files as an argument.
Diffstat (limited to 'mboxc.lua')
-rw-r--r-- | mboxc.lua | 61 |
1 files changed, 33 insertions, 28 deletions
@@ -10,44 +10,49 @@ local string = { find = string.find } -- }}} --- Mboxc: provides the count of total, old and new messages in a mbox +-- Mboxc: provides the count of total, old and new messages in mbox files module("vicious.mboxc") -- {{{ Mbox count widget type local function worker(format, mbox) -- Initialise counters - local old = 0 - local total = 0 - - -- Open the mbox - local f = io.open(mbox) - - while true do - -- Read the mbox line by line, if we are going to read some - -- *HUGE* folders then switch to reading chunks - local lines = f:read("*line") - if not lines then break end - - -- Find all messages - -- * http://www.jwz.org/doc/content-length.html - local _, from = string.find(lines, "^From[%s]") - if from ~= nil then total = total + 1 end - - -- Read messages have the Status header - local _, status = string.find(lines, "^Status:[%s]RO$") - if status ~= nil then old = old + 1 end - - -- Skip the folder internal data - local _, intdata = string.find(lines, "^Subject:[%s].*FOLDER[%s]INTERNAL[%s]DATA") - if intdata ~= nil then total = total -1 end + local count = { + old = 0, + total = 0, + new = 0 + } + + -- Get data from mbox files + for i=1, #mbox do + local f = io.open(mbox[i]) + + while true do + -- Read the mbox line by line, if we are going to read some + -- *HUGE* folders then switch to reading chunks + local lines = f:read("*line") + if not lines then break end + + -- Find all messages + -- * http://www.jwz.org/doc/content-length.html + local _, from = string.find(lines, "^From[%s]") + if from ~= nil then count.total = count.total + 1 end + + -- Read messages have the Status header + local _, status = string.find(lines, "^Status:[%s]RO$") + if status ~= nil then count.old = count.old + 1 end + + -- Skip the folder internal data + local _, intdata = string.find(lines, "^Subject:[%s].*FOLDER[%s]INTERNAL[%s]DATA") + if intdata ~= nil then count.total = count.total - 1 end + end + f:close() end - f:close() -- Substract total from old to get the new count - local new = total - old + count.new = count.total - count.old - return {total, old, new} + return {count.total, count.old, count.new} end -- }}} |