Software /
code /
prosody-modules
Diff
mod_csi_battery_saver/mod_csi_battery_saver.lua @ 3633:6b0db0f2d57a
mod_csi_battery_saver: add compatibility with mod_csi_muc_priorities, make queue length configurable and update README
author | tmolitor <thilo@eightysoft.de> |
---|---|
date | Tue, 30 Jul 2019 01:46:57 +0200 |
parent | 3490:972b21d34306 |
child | 3980:19c5bfc3a241 |
line wrap: on
line diff
--- a/mod_csi_battery_saver/mod_csi_battery_saver.lua Mon Jul 29 16:10:09 2019 +0200 +++ b/mod_csi_battery_saver/mod_csi_battery_saver.lua Tue Jul 30 01:46:57 2019 +0200 @@ -3,6 +3,7 @@ -- local filter_muc = module:get_option_boolean("csi_battery_saver_filter_muc", false); +local queue_size = module:get_option_number("csi_battery_saver_queue_size", 256); module:depends"csi" if filter_muc then module:depends"track_muc_joins"; end -- only depend on this module if we actually use it @@ -31,7 +32,7 @@ return message, direction; end -local function new_pump(output, ...) +local function new_pump(session, output, ...) -- luacheck: ignore 212/self local q = new_queue(...); local flush = true; @@ -46,6 +47,7 @@ function q:push(item) local ok = push(self, item); if not ok then + session.log("debug", "mod_csi_battery_saver(%s): Queue full (%d items), forcing flush...", id, q:count()); q:flush(); output(item, self); elseif flush then @@ -115,21 +117,26 @@ -- check xep373 pgp (OX) https://xmpp.org/extensions/xep-0373.html if stanza:get_child("openpgp", "urn:xmpp:openpgp:0") then return true; end + + -- check eme + if stanza:get_child("encryption", "urn:xmpp:eme:0") then return true; end local body = stanza:get_child_text("body"); if st_type == "groupchat" then if stanza:get_child_text("subject") then return true; end if body == nil or body == "" then return false; end -- body contains text, let's see if we want to process it further - if filter_muc then + if not filter_muc then -- default case + local stanza_important = module:fire_event("csi-is-stanza-important", { stanza = stanza, session = session }); + if stanza_important ~= nil then return stanza_important; end + return true; -- deemed unknown/high priority by mod_csi_muc_priorities or some other module + else if body:find(session.username, 1, true) then return true; end local rooms = session.rooms_joined; if not rooms then return false; end local room_nick = rooms[jid.bare(stanza_direction == "in" and stanza.attr.from or stanza.attr.to)]; if room_nick and body:find(room_nick, 1, true) then return true; end return false; - else - return true; end end return body ~= nil and body ~= ""; @@ -144,7 +151,7 @@ session.pump:pause(); else session.log("debug", "mod_csi_battery_saver(%s): Client is inactive the first time, initializing module for this session", id); - local pump = new_pump(session.send, 100); + local pump = new_pump(session, session.send, queue_size); pump:pause(); session.pump = pump; session._pump_orig_send = session.send;