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:
parent
9fc02f16da
commit
50fd2334b6
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue