Hello
Je me suis fait un petit module qui affiche dans une notification naughty les nouveaux messages postés sur le forum, autant le partager si ça peut servir ou être amélioré
A intervalles réguliers, le script récupère la page des posts récents avec
wget (je ne sais pas faire directement avec lua...), l'enregistre dans un fichier temporaire et affiche les nouveaux messages depuis la dernière vérification dans une notification; un clic sur la notification ouvre le navigateur. Il est possible de filtrer des posts avec leur numéros "id"
Dans rc.lua
require("debianfacile")
debianfacile.init()
la fonction init peut prendre 5 paramètres facultatifs
-- @param intervalle : intervalle en minutes, défaut = 10
-- @param file_df : fichier temporaire, défaut = /tmp/debianfacile.html
-- @param filters : table contenant les numéros de topics à exclure
-- @param timeout : timeout du notify, défaut : 15
-- @param icon : icone de la notification, défaut : nil
-- @param title : titre de la notification, défaut : Debian Facile
par exemple :
debianfacile.init( {icon = beautiful.debian_icon64,
timeout = 0,
filters={10602}
} )
et le script (à enregistrer dans debianfacile.lua)
local naughty = require("naughty")
local string = string
local tostring = tostring
local tonumber = tonumber
local io = io
local timer = timer
local table = table
local pairs = pairs
local awful = awful
module ("debianfacile")
local url = 'https://debian-facile.org/search.php?action=show_recent'
local top_pid = 0
local first_run = true
local forum_notify = nil
-- init ----------------------------------------------------------------
-- @param intervalle : intervalle en minutes, défaut = 10
-- @param file_df : fichier temporaire, défaut = /tmp/debianfacile.html
-- @param filters : table contenant les numéros de topics à exclure
-- @param timeout : timeout du notify, défaut : 15
-- @param icon : icone de la notification, défaut : nil
-- @param title : titre de la notification, défaut : Debian Facile
-- necessite wget
function init(args)
if args == nil then
args = {}
end
local args = {
intervalle = args.intervalle or 10,
file_df = args.file_df or "/tmp/debianfacile.html",
filters = args.filters or {},
timeout_value = args.timeout or 15,
icon = args.icon,
title = args.title or "Debian Facile"
}
parse_forum(args)
init_timer(args)
end
-- vérifie si une valeur existe dans une table
function value_exists(tbl, value)
for k,v in pairs(tbl) do
if value == v then
return true
end
end
return false
end
-- lecture des derniers messages du forum
function parse_forum(args)
io.popen('wget -q ' .. url .. ' -O ' .. args.file_df )
local f = io.open(args.file_df , "r")
local sujet
local pid, pdate, pauteur
local table_new = {}
local msg = ''
if f == nil then
naughty.notify({text="Problème lecture forum"})
return
end
for line in f:lines() do
if string.find(line, 'viewtopic') ~= nil then
if string.find(line, '"tcr"') == nil then
line = string.gsub(line, '<span class="stickytext">Épinglée :</span>', '')
sujet = string.match(line, '>(.-)<')
sujet = clean(sujet)
tid = tonumber(string.match(line, '%d+')) --topic id
else
pid = tonumber(string.match(line, '%d+')) --post id
--premiere lecture, on passe
if top_pid == 0 then
top_pid = pid
break
end
pdate = string.match(line, pid .. '">(.-)<')
pauteur = string.match(line, 'byuser">par (.-)<')
--nouveau message
if pid > top_pid then
if value_exists(args.filters, tid) == false then
table.insert(table_new, {pid, sujet, pdate, pauteur})
end
else
break
end
end
end
end
if f ~= nil then
io.close(f)
end
--message + notification
if first_run then
first_run = false
else
if table.getn(table_new) ~= 0 then
for k,v in pairs(table_new) do
msg = '\n' .. v[2] .. ' (' .. v[4] .. ', ' .. v[3] .. ')' .. msg
if k == 1 then
top_pid = v[1]
end
end
end
if msg ~= '' then
forum_notify = naughty.notify(
{text = msg ,
timeout = args.timeout_value,
title = args.title,
icon = args.icon,
run = function()
destroy_forum_notify()
end
})
end
end
end
-- init_timer
function init_timer(args)
if check_timer ~= nil then
check_timer:stop()
end
check_timer = timer {timeout = args.intervalle*60}
check_timer:add_signal("timeout", function()
parse_forum(args)
end)
check_timer:start()
end
-- clean, supprime caractères incongrus
function clean(txt)
txt = string.gsub(txt, ''' , "'")
return txt
end
-- destroy la notification
function destroy_forum_notify()
if forum_notify ~= nil then
awful.util.spawn( 'x-www-browser ' .. url)
naughty.destroy(forum_notify)
forum_notify = nil
end
end
testé avec Jessie et awesome 3.4.15