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>
This commit is contained in:
Benoît Zugmeyer 2014-11-08 18:14:03 +01:00 committed by Adrian C. (anrxc)
parent 9fc02f16da
commit 50fd2334b6
1 changed files with 22 additions and 32 deletions

View File

@ -10,7 +10,6 @@ local io = { popen = io.popen }
local setmetatable = setmetatable local setmetatable = setmetatable
local helpers = require("vicious.helpers") local helpers = require("vicious.helpers")
local string = { local string = {
find = string.find,
match = string.match match = string.match
} }
-- }}} -- }}}
@ -23,18 +22,9 @@ local gmail = {}
-- {{{ Variable definitions -- {{{ Variable definitions
local rss = { local rss = {
inbox = { inbox = "https://mail.google.com/mail/feed/atom",
"https://mail.google.com/mail/feed/atom", unread = "https://mail.google.com/mail/feed/atom/unread",
"Gmail %- Inbox" --labelname = "https://mail.google.com/mail/feed/atom/labelname",
},
unread = {
"https://mail.google.com/mail/feed/atom/unread",
"Gmail %- Label"
},
--labelname = {
-- "https://mail.google.com/mail/feed/atom/labelname",
-- "Gmail %- Label"
--},
} }
-- Default is just Inbox -- Default is just Inbox
@ -49,31 +39,31 @@ local mail = {
-- {{{ Gmail widget type -- {{{ Gmail widget type
local function worker(format, warg) local function worker(format, warg)
-- Get info from the Gmail atom feed -- 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 -- Could be huge don't read it all at once, info we are after is at the top
for line in f:lines() do local xml = f:read(2000)
mail["{count}"] = -- Count comes before messages and matches at least 0
tonumber(string.match(line, "<fullcount>([%d]+)</fullcount>")) or mail["{count}"]
-- Find subject tags mail["{count}"] = -- Count comes before messages and matches at least 0
local title = string.match(line, "<title>(.*)</title>") tonumber(string.match(xml, "<fullcount>([%d]+)</fullcount>")) or mail["{count}"]
-- If the subject changed then break out of the loop
if title ~= nil and not string.find(title, feed[2]) then -- Find subject tag
-- Check if we should scroll, or maybe truncate local title = string.match(xml, "<entry>.-<title>(.-)</title>")
if warg then
if type(warg) == "table" then if title ~= nil then
title = helpers.scroll(title, warg[1], warg[2]) -- Check if we should scroll, or maybe truncate
else if warg then
title = helpers.truncate(title, warg) if type(warg) == "table" then
end 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
-- Spam sanitize the subject and store
mail["{subject}"] = helpers.escape(title)
end end
f:close() f:close()
return mail return mail