aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenoƮt Zugmeyer <bzugmeyer@gmail.com>2014-11-08 17:14:03 (GMT)
committerAdrian C. (anrxc) <anrxc@sysphere.org>2014-11-15 20:37:29 (GMT)
commit50fd2334b6a720f798782f7690287b71642cb9a8 (patch)
tree0ff025d0ac8cefb59ca9e2b33d2bb6a3c83bba33
parent9fc02f16da6c967374f29caf9caaf8725310da41 (diff)
downloadvicious-legacy-50fd2334b6a720f798782f7690287b71642cb9a8.tar.xz
gmail: fix subject when gmail feed is in one line
For some time now, gmail feeds are in a single line. The goal of this patch is to handle both cases (single and multiline). It will find the text between title tags after the first entry tag. Since the first feed title is skiped with this regex, title regexes aren't needed anymore. Signed-off-by: Adrian C. (anrxc) <anrxc@sysphere.org>
-rw-r--r--widgets/gmail.lua56
1 files changed, 23 insertions, 33 deletions
diff --git a/widgets/gmail.lua b/widgets/gmail.lua
index ba8e731..dbd7d19 100644
--- a/widgets/gmail.lua
+++ b/widgets/gmail.lua
@@ -10,7 +10,6 @@ local io = { popen = io.popen }
local setmetatable = setmetatable
local helpers = require("vicious.helpers")
local string = {
- find = string.find,
match = string.match
}
-- }}}
@@ -23,18 +22,9 @@ local 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"
- --},
+ inbox = "https://mail.google.com/mail/feed/atom",
+ unread = "https://mail.google.com/mail/feed/atom/unread",
+ --labelname = "https://mail.google.com/mail/feed/atom/labelname",
}
-- Default is just Inbox
@@ -49,31 +39,31 @@ local mail = {
-- {{{ Gmail widget type
local function worker(format, warg)
-- Get info from the Gmail atom feed
- local f = io.popen("curl --connect-timeout 1 -m 3 -fsn " .. feed[1])
+ local f = io.popen("curl --connect-timeout 1 -m 3 -fsn " .. feed)
-- 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, "<fullcount>([%d]+)</fullcount>")) or mail["{count}"]
-
- -- Find subject tags
- local title = string.match(line, "<title>(.*)</title>")
- -- 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
+ local xml = f:read(2000)
+
+ mail["{count}"] = -- Count comes before messages and matches at least 0
+ tonumber(string.match(xml, "<fullcount>([%d]+)</fullcount>")) or mail["{count}"]
+
+ -- Find subject tag
+ local title = string.match(xml, "<entry>.-<title>(.-)</title>")
- -- Spam sanitize the subject and store
- mail["{subject}"] = helpers.escape(title)
- break
+ if title ~= nil 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)
end
+
f:close()
return mail