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/gmail.lua | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 widgets/gmail.lua (limited to 'widgets/gmail.lua') diff --git a/widgets/gmail.lua b/widgets/gmail.lua new file mode 100644 index 0000000..b2f0d8c --- /dev/null +++ b/widgets/gmail.lua @@ -0,0 +1,83 @@ +--------------------------------------------------- +-- Licensed under the GNU General Public License v2 +-- * (c) 2010, Adrian C. +--------------------------------------------------- + +-- {{{ Grab environment +local type = type +local tonumber = tonumber +local io = { popen = io.popen } +local setmetatable = setmetatable +local helpers = require("vicious.helpers") +local string = { + find = string.find, + match = string.match +} +-- }}} + + +-- Gmail: provides count of new and subject of last e-mail on Gmail +module("vicious.widgets.gmail") + + +-- {{{ Variable definitions +local rss = { + inbox = { + "https://mail.google.com/mail/feed/atom", + "Gmail %- Inbox" + }, + unread = { + "https://mail.google.com/mail/feed/atom/unread", + "Gmail %- Label" + }, + --labelname = { + -- "https://mail.google.com/mail/feed/atom/labelname", + -- "Gmail %- Label" + --}, +} + +-- Default is all unread +local feed = rss.unread +-- }}} + + +-- {{{ Gmail widget type +local function worker(format, warg) + local mail = { + ["{count}"] = 0, + ["{subject}"] = "N/A" + } + + -- Get info from the Gmail atom feed + local f = io.popen("curl --connect-timeout 1 -m 3 -fsn " .. feed[1]) + + -- Could be huge don't read it all at once, info we are after is at the top + for line in f:lines() do + mail["{count}"] = -- Count comes before messages and matches at least 0 + tonumber(string.match(line, "([%d]+)")) or mail["{count}"] + + -- Find subject tags + local title = string.match(line, "(.*)") + -- If the subject changed then break out of the loop + if title ~= nil and not string.find(title, feed[2]) then + -- Check if we should scroll, or maybe truncate + if warg then + if type(warg) == "table" then + title = helpers.scroll(title, warg[1], warg[2]) + else + title = helpers.truncate(title, warg) + end + end + + -- Spam sanitize the subject and store + mail["{subject}"] = helpers.escape(title) + break + end + end + f:close() + + return mail +end +-- }}} + +setmetatable(_M, { __call = function(_, ...) return worker(...) end }) -- cgit v1.2.3