diff options
author | Adrian C. (anrxc) <anrxc@sysphere.org> | 2009-09-08 22:46:59 +0200 |
---|---|---|
committer | Adrian C. (anrxc) <anrxc@sysphere.org> | 2009-09-08 22:46:59 +0200 |
commit | 161607e5179fe3f8151d56752cf2d46963ff1aa3 (patch) | |
tree | a3d7063932fe2a5f2c094b2d8f7beb32b8f5c874 /gmail.lua | |
parent | e5c980e58a3b6ca7f369ac87ab8f1fa897bb504d (diff) | |
download | vicious-legacy-161607e5179fe3f8151d56752cf2d46963ff1aa3.tar.xz |
Gmail widget included
Widget returns the count of new and subject of last e-mail in a Gmail
inbox. Use ${count} and ${subject} in the format string to retrieve
the values. Widget takes a table with login information as an
argument.
I don't like how gmail widgets handle sensitive data but I gave in
seeing how popular they are. Better storing and handling of login
information would be in order but this isn't Python and I'm out of
ideas. For now use it on your own responsability, I would suggest to
set login info directly in the widget and file as read-only by user.
Diffstat (limited to 'gmail.lua')
-rw-r--r-- | gmail.lua | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/gmail.lua b/gmail.lua new file mode 100644 index 0000000..98fb40d --- /dev/null +++ b/gmail.lua @@ -0,0 +1,55 @@ +---------------------------------------------------------- +-- 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) + -- Initialise tables + 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 }) |