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, "([%d]+)")) or mail["{count}"] + local xml = f:read(2000) - -- Find subject tags - local title = string.match(line, "(.*)") - -- 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 + mail["{count}"] = -- Count comes before messages and matches at least 0 + tonumber(string.match(xml, "([%d]+)")) or mail["{count}"] + + -- Find subject tag + local title = string.match(xml, ".-(.-)") + + 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 - - -- Spam sanitize the subject and store - mail["{subject}"] = helpers.escape(title) - break end + + -- Spam sanitize the subject and store + mail["{subject}"] = helpers.escape(title) end + f:close() return mail