mboxc: support for multiple mbox files
Widget takes a table with full paths to mbox files as an argument.
This commit is contained in:
parent
32fe7703c0
commit
5dac6a44fd
4
README
4
README
|
@ -168,8 +168,8 @@ vicious.widgets.mbox
|
|||
- takes the full path to the mbox as an argument
|
||||
|
||||
vicious.widgets.mboxc
|
||||
- provides the count of total, old and new messages in a mbox
|
||||
- takes the full path to the mbox as an argument
|
||||
- provides the count of total, old and new messages in mbox files
|
||||
- takes a table with full paths to mbox files as an argument
|
||||
|
||||
vicious.widgets.mdir
|
||||
- provides a number of new and unread messages in a Maildir
|
||||
|
|
51
mboxc.lua
51
mboxc.lua
|
@ -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
|
||||
local count = {
|
||||
old = 0,
|
||||
total = 0,
|
||||
new = 0
|
||||
}
|
||||
|
||||
-- Open the mbox
|
||||
local f = io.open(mbox)
|
||||
-- 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
|
||||
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
|
||||
-- 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 old = old + 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 total = total -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
|
||||
-- }}}
|
||||
|
||||
|
|
Loading…
Reference in New Issue