diff options
author | Adrian C. (anrxc) <anrxc@sysphere.org> | 2009-09-24 15:20:00 +0200 |
---|---|---|
committer | Adrian C. (anrxc) <anrxc@sysphere.org> | 2009-09-24 15:20:00 +0200 |
commit | ee281a7e40b80ca0abc20ed31d2b409263db913b (patch) | |
tree | 02b1c6cbe039ce46f0bcb6c39dc4114985fc263e /gmail.lua | |
parent | b4e9ac214f7eee5c0dacb4476c4a0a5721db42b5 (diff) | |
download | vicious-legacy-ee281a7e40b80ca0abc20ed31d2b409263db913b.tar.xz |
Gmail widget backported from master
Diffstat (limited to 'gmail.lua')
-rw-r--r-- | gmail.lua | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/gmail.lua b/gmail.lua new file mode 100644 index 0000000..6e12c12 --- /dev/null +++ b/gmail.lua @@ -0,0 +1,54 @@ +---------------------------------------------------------- +-- Licensed under the GNU General Public License version 2 +-- * Copyright (C) 2009 Adrian C. <anrxc_sysphere_org> +---------------------------------------------------------- + +-- {{{ Grab environment +local io = { popen = io.popen } +local setmetatable = setmetatable +local helpers = require("vicious.helpers") +-- }}} + + +-- Gmail: provides count of new and subject of last e-mail in a Gmail inbox +module("vicious.gmail") + + +-- {{{ Gmail widget type +local function worker(format, login) + local mail = { + ["{count}"] = "0", + ["{subject}"] = "N/A" + } + + -- Todo: find a safer way to do this + local auth = login[1] .. ":" .. login[2] + + -- Get info from the Gmail atom feed + local f = io.popen("curl --max-time 3 -fsu "..auth.." https://mail.google.com/mail/feed/atom") + + -- 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}"] = line:match("<fullcount>([%d]+)</fullcount>") or mail["{count}"] + + -- Find subject tags + local title = line:match("<title>(.*)</title>") + -- If the subject changed then break out of the loop + if title ~= nil and -- Ignore the feed title + title ~= "Gmail - Inbox for "..login[1].."@gmail.com" then + -- Spam sanitize the subject + title = helpers.escape(title) + -- Don't abuse the wibox, truncate, then store + mail["{subject}"] = helpers.truncate(title, 22) + -- By this point we have the count, it comes before + -- messages and always matches, at least 0 + break + end + end + f:close() + + return mail +end +-- }}} + +setmetatable(_M, { __call = function(_, ...) return worker(...) end }) |