Skip to content

Commit

Permalink
gmail: fix subject when gmail feed is in one line
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
BenoitZugmeyer authored and anrxc committed Nov 15, 2014
1 parent 9fc02f1 commit 50fd233
Showing 1 changed file with 23 additions and 33 deletions.
56 changes: 23 additions & 33 deletions widgets/gmail.lua
Expand Up @@ -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
}
-- }}}
Expand All @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 50fd233

Please sign in to comment.