aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian C. (anrxc) <anrxc@sysphere.org>2009-09-24 15:20:00 +0200
committerAdrian C. (anrxc) <anrxc@sysphere.org>2009-09-24 15:20:00 +0200
commitee281a7e40b80ca0abc20ed31d2b409263db913b (patch)
tree02b1c6cbe039ce46f0bcb6c39dc4114985fc263e
parentb4e9ac214f7eee5c0dacb4476c4a0a5721db42b5 (diff)
downloadvicious-legacy-ee281a7e40b80ca0abc20ed31d2b409263db913b.tar.xz
Gmail widget backported from master
-rw-r--r--gmail.lua54
-rw-r--r--init.lua1
2 files changed, 55 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 })
diff --git a/init.lua b/init.lua
index e73cc50..9080beb 100644
--- a/init.lua
+++ b/init.lua
@@ -47,6 +47,7 @@ require("vicious.wifi")
require("vicious.mbox")
require("vicious.mboxc")
require("vicious.mdir")
+require("vicious.gmail")
require("vicious.entropy")
require("vicious.org")
require("vicious.pacman")