diff --git a/contrib/init.lua b/contrib/init.lua index 8df46b5..e0f681a 100644 --- a/contrib/init.lua +++ b/contrib/init.lua @@ -13,6 +13,7 @@ require("vicious.contrib.mpc") require("vicious.contrib.netcfg") require("vicious.contrib.net") require("vicious.contrib.ossvol") +require("vicious.contrib.pop") require("vicious.contrib.pulse") require("vicious.contrib.rss") require("vicious.contrib.sensors") diff --git a/contrib/pop.lua b/contrib/pop.lua new file mode 100644 index 0000000..7b87eab --- /dev/null +++ b/contrib/pop.lua @@ -0,0 +1,52 @@ +--------------------------------------------------- +-- Licensed under the GNU General Public License v2 +-- * (c) 2010, Boris Bolgradov <> +-- +-- This widget type depends on luasocket. +-- +-- Widget arguments are host, port, username and +-- password, i.e.: +-- {"mail.myhost.com", 110, "John", "132435"} +--------------------------------------------------- + +-- {{{ Grab environment +local setmetatable = setmetatable +local socket = require("socket") +local tonumber = tonumber +-- }}} + + +-- POP: provides the count of new messages in a POP3 mailbox +module("vicious.contrib.pop") + + +-- {{{ POP3 count widget type +local function worker(format, warg) + if not warg or #warg ~= 4 then + return {"N/A"} + end + + local host, port = warg[1], tonumber(warg[2]) + local user, pass = warg[3], warg[4] + + local client = socket.tcp() + client:settimeout(3) + client:connect(host, port) + client:receive("*l") + client:send("USER " .. user .. "\r\n") + client:receive("*l") + client:send("PASS " .. pass .. "\r\n") + client:receive("*l") + client:send("STAT" .. "\r\n") + local response = client:receive("*l") + client:close() + + if response:find("%+OK") then + response = response:match("%+OK (%d+)") + end + + return {response} +end +-- }}} + +setmetatable(_M, { __call = function(_, ...) return worker(...) end })