Marty Oehme
03684ce29f
Reflecting the somewhat expanding scope of the module, renamed it to office. Still keeps the old files and setups but also got a new README file.
87 lines
3.2 KiB
Lua
87 lines
3.2 KiB
Lua
-- According to the IMAP specification, when trying to write a message
|
|
-- to a non-existent mailbox, the server must send a hint to the client,
|
|
-- whether it should create the mailbox and try again or not. However
|
|
-- some IMAP servers don't follow the specification and don't send the
|
|
-- correct response code to the client. By enabling this option the
|
|
-- client tries to create the mailbox, despite of the server's response.
|
|
-- This variable takes a boolean as a value. Default is “false”.
|
|
options.create = true
|
|
-- By enabling this option new mailboxes that were automatically created,
|
|
-- get auto subscribed
|
|
options.subscribe = true
|
|
-- How long to wait for servers response.
|
|
options.timeout = 120
|
|
|
|
-- whether to enter IDLE mode and conintuously check
|
|
-- for new incoming mail to filter
|
|
CONTINUOUS = false
|
|
-- time to wait for next synchronization
|
|
-- only used in case server does not support IDLE mode
|
|
UPDATE_TIME = 120
|
|
|
|
-- implement simple wait function in case server does not support IDLE mode
|
|
function sleep(n) os.execute("sleep " .. tonumber(n)) end
|
|
|
|
-- will set filters to be grabbed from XDG-compliant filter directory
|
|
-- can be overridden with env var IMAPFILTER_FILTERDIR
|
|
function getConfigDir()
|
|
-- -- set directory for imapfilter files
|
|
local configdir
|
|
if os.getenv("IMAPFILTER_CONFIGDIR") then
|
|
configdir = os.getenv("IMAPFILTER_CONFIGDIR")
|
|
elseif os.getenv("XDG_CONFIG_HOME") then
|
|
configdir = os.getenv("XDG_CONFIG_HOME") .. "/imapfilter"
|
|
else
|
|
configdir = os.getenv("HOME") .. "/.config/imapfilter"
|
|
end
|
|
return configdir
|
|
end
|
|
|
|
-- will set filters to be grabbed from XDG-compliant filter directory
|
|
-- can be overridden with env var IMAPFILTER_FILTERDIR
|
|
function getFilterDir()
|
|
-- -- set directory for imapfilter files
|
|
local imapfilterdir
|
|
if os.getenv("IMAPFILTER_FILTERDIR") then
|
|
imapfilterdir = os.getenv("IMAPFILTER_FILTERDIR")
|
|
else
|
|
imapfilterdir = configDir .. "/filters"
|
|
end
|
|
return imapfilterdir
|
|
end
|
|
|
|
-- dirlist, from https://stackoverflow.com/a/25266573
|
|
function applyFilters(dir)
|
|
local p = io.popen('find "' .. dir .. '" -type f -name "*.lua"') -- Open directory look for files, save data in p. By giving '-type f' as parameter, it returns all files.
|
|
for file in p:lines() do -- Loop through all files
|
|
loadfile(file)()
|
|
end
|
|
end
|
|
|
|
-- create global variable containing the configuration files
|
|
configDir = getConfigDir()
|
|
assert(configDir,
|
|
"No configuration directory found. Ensure " .. os.getenv("HOME") ..
|
|
"/.config/imapfilter exists.")
|
|
|
|
-- create global variable containing account access
|
|
accounts = loadfile(configDir .. "/accounts.lua")()
|
|
assert(accounts,
|
|
"No accounts configured. Ensure accounts.lua exists and returns a table of accounts.")
|
|
|
|
-- immediately act on the filters once
|
|
applyFilters(getFilterDir())
|
|
|
|
-- continuously watch for mail if needed
|
|
while CONTINUOUS == true do
|
|
local has_idle = accounts.gmail['Inbox']:enter_idle()
|
|
applyFilters(getFilterDir())
|
|
|
|
if has_idle == false then
|
|
print(
|
|
"Server does not support idle, application will be polling again in " ..
|
|
UPDATE_TIME .. "minutes.")
|
|
sleep(UPDATE_TIME)
|
|
end
|
|
end
|