From 237470c8f45190b213e3a173ce6ae1a74b3e11fe Mon Sep 17 00:00:00 2001 From: "Adrian C. (anrxc)" Date: Sun, 14 Mar 2010 01:55:33 +0100 Subject: API: transform widgets namespace table to a directory --- widgets/mbox.lua | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 widgets/mbox.lua (limited to 'widgets/mbox.lua') diff --git a/widgets/mbox.lua b/widgets/mbox.lua new file mode 100644 index 0000000..eca5403 --- /dev/null +++ b/widgets/mbox.lua @@ -0,0 +1,50 @@ +--------------------------------------------------- +-- Licensed under the GNU General Public License v2 +-- * (c) 2010, Adrian C. +--------------------------------------------------- + +-- {{{ Grab environment +local type = type +local io = { open = io.open } +local setmetatable = setmetatable +local string = { gfind = string.gfind } +local helpers = require("vicious.helpers") +-- }}} + + +-- Mbox: provides the subject of last e-mail in a mbox file +module("vicious.widgets.mbox") + + +-- {{{ Mailbox widget type +local function worker(format, warg) + if type(warg) ~= "table" then mbox = warg end + -- mbox could be huge, get a 30kb chunk from EOF + -- * attachments could be much bigger than this + local f = io.open(mbox or warg[1]) + f:seek("end", -30720) + local txt = f:read("*all") + f:close() + + -- Default value + local subject = "N/A" + + -- Find all Subject lines + for i in string.gfind(txt, "Subject: ([^\n]*)") do + subject = i + end + + -- Check if we should scroll, or maybe truncate + if type(warg) == "table" then + if warg[3] ~= nil then + subject = helpers.scroll(subject, warg[2], warg[3]) + else + subject = helpers.truncate(subject, warg[2]) + end + end + + return {helpers.escape(subject)} +end +-- }}} + +setmetatable(_M, { __call = function(_, ...) return worker(...) end }) -- cgit v1.2.3