Software /
code /
prosody-modules
Diff
mod_http_muc_log/mod_http_muc_log.lua @ 5581:df483d9056f5
mod_http_muc_log: Hide joins and parts by default
Now both ?p=s(how) and ?p=h(ide) are understood and propagated trough
links, with unset being being hide.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 28 Jun 2023 21:47:22 +0200 |
parent | 5118:7bce75e74f86 |
child | 5597:b681948a01f1 |
line wrap: on
line diff
--- a/mod_http_muc_log/mod_http_muc_log.lua Mon Jun 26 00:19:05 2023 +0200 +++ b/mod_http_muc_log/mod_http_muc_log.lua Wed Jun 28 21:47:22 2023 +0200 @@ -128,17 +128,42 @@ local presence_logged = module:get_option_boolean("muc_log_presences", false); -local function hide_presence(request) +local function show_presence(request) --> boolean|nil + -- boolean -> yes or no + -- nil -> dunno if not presence_logged then - return false; + -- No presence stored, skip + return nil; end if request.url.query then local data = httplib.formdecode(request.url.query); - if data then - return data.p == "h" + if type(data) == "table" then + if data.p == "s" or data.p == "h" then + return data.p == "s"; + end end end - return false; +end + +local function presence_with(request) + local show = show_presence(request); + if show == true then + return nil; -- no filter, everything + elseif show == false or show == nil then + -- only messages + return "message<groupchat"; + end +end + +local function presence_query(request) -- > ?p=[sh] + local show = show_presence(request); + if show == true then + return { p = "s" } + elseif show == false then + return { p = "h" } + else + return nil; + end end local function get_dates(room) --> { integer, ... } @@ -254,7 +279,8 @@ room = room_obj._data; jid = room_obj.jid; jid_node = jid_split(room_obj.jid); - hide_presence = hide_presence(request); + q = presence_query(request); + show_presence = show_presence(request); presence_available = presence_logged; dates = date_list; links = { @@ -300,7 +326,7 @@ local iter, err = archive:find(room, { ["start"] = day_start; ["end"] = day_start + 86399; - ["with"] = hide_presence(request) and "message<groupchat" or nil; + ["with"] = presence_with(request); }); if not iter then module:log("warn", "Could not search archive: %s", err or "no error"); @@ -475,7 +501,8 @@ room = room_obj._data; jid = room_obj.jid; jid_node = jid_split(room_obj.jid); - hide_presence = hide_presence(request); + q = presence_query(request); + show_presence = show_presence(request); presence_available = presence_logged; lang = room_obj.get_language and room_obj:get_language(); lines = logs; @@ -524,7 +551,8 @@ static = "./@static"; title = module:get_option_string("name", "Prosody Chatrooms"); jid = module.host; - hide_presence = hide_presence(request); + q = presence_query(request); + show_presence = show_presence(request); presence_available = presence_logged; rooms = room_list; dates = {}; -- COMPAT util.interpolation {nil|func#...} bug