Software /
code /
prosody-modules
Changeset
5997:d3812826c1cd
mod_csi_muc_priorities: Allow setting the default priority for mucs to low
Move the priority checking after the mention check so that if there is a
mention we return true.
Add an option to the form to set the default priority to low.
Return `nil` in cases where we determite that the priority should be high, as
with `mod_csi_simple` this causes normal MUC messages to be marked important
while allowing mod_csi_grace_period and unneeded messages to be queued.
author | aereaux <aidan@jmad.org> |
---|---|
date | Sun, 22 Sep 2024 08:13:09 -0700 |
parents | 5996:a1aa56ebe73f |
children | 5999:9db6bad7cc36 |
files | mod_csi_muc_priorities/README.markdown mod_csi_muc_priorities/mod_csi_muc_priorities.lua |
diffstat | 2 files changed, 55 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/mod_csi_muc_priorities/README.markdown Tue Oct 08 22:23:57 2024 +0200 +++ b/mod_csi_muc_priorities/README.markdown Sun Sep 22 08:13:09 2024 -0700 @@ -1,7 +1,7 @@ # Introduction This module lets users specify which of the group chats they are in are -less important. This influences when +more or less important. This influences when [mod_csi_simple][doc:modules:mod_csi_simple] decides to send stanzas vs waiting until there is more to send. Users in many large public channels might benefit from this. @@ -12,16 +12,17 @@ chat priorities* that should appear in the menus of compatible clients. The command presents a form that accepts a list of XMPP addresses. -Currently there is a single priority, *Lower priority*, which is -suitable for e.g. noisy public channels. mod_csi_simple considers -groupchat messages important by default on the assumptions that smaller -and more important private chats are more common among most users. +Currently you can specify channels as lower priority (which is suitable +for e.g. noisy public channels) or higher priority (which is suitable +for e.g. small private channels where immediate message delivery is +desired). You can also specify whether mucs default to lower priority +or not. -A message of type groupchat from an address in this list will not be -considered important enough to send it to an inactive client, unless it -is from the current user or mentions of their nickname. **Note** that -mention support require the separate module [mod_track_muc_joins] -to also be loaded. +A message of type groupchat from an address in the low priority list will +not be considered important enough to send it to an inactive client, +unless it is from the current user or mentions of their nickname. +**Note** that mention support require the separate module +[mod_track_muc_joins] to also be loaded. ``` {.lua} modules_enabled = {
--- a/mod_csi_muc_priorities/mod_csi_muc_priorities.lua Tue Oct 08 22:23:57 2024 +0200 +++ b/mod_csi_muc_priorities/mod_csi_muc_priorities.lua Sun Sep 22 08:13:09 2024 -0700 @@ -12,14 +12,6 @@ local username = session.username; local priorities = user_sessions[username].csi_muc_priorities; - if priorities then - local priority = priorities[room_jid]; - if priority ~= nil then - event.reason = "muc priority"; - return priority; - end - end - -- Look for mention local rooms = session.rooms_joined; if rooms then @@ -33,12 +25,33 @@ end -- Your own messages if stanza.attr.from == (room_jid .. "/" .. room_nick) then - event.reason = "muc own message"; + event.reason = "muc own message"; return true; end end end + -- No mentions found, check other logic: + -- deflaultlow=f or nil defaultlow=t + -- in high prio nil nil + -- in low prio false false + -- not in either nil false + -- + -- true means: important (always send immediately) + -- nil means: normal (respect other mods for stuff like grace period/reactions/etc) + -- false means: unimportant (delay sending) + if priorities then + local priority = priorities[room_jid]; + if priority == false then -- low priority + event.reason = "muc priority"; + return false; + end + if priorities[false] and priorities[false]["defaultlow"] and not priority then -- defaultlow is false or nil or not high priority + event.reason = "muc user default low"; + return false; + end + end + -- Standard importance and no mention, leave to other modules to decide for now return nil; end @@ -74,6 +87,12 @@ label = "Lower priority"; desc = "E.g. large noisy public channels"; }; + { + type = "boolean"; + name = "defaultlow"; + label = "Default to lower priority"; + desc = "Mark all channels lower priority as default"; + }; } local store = module:open_store(); @@ -87,20 +106,29 @@ local prioritized_jids = user_sessions[username].csi_muc_priorities or store:get(username); local important = {}; local unimportant = {}; + local defaultlow = false; -- Default to high priority if prioritized_jids then for jid, priority in pairs(prioritized_jids) do - if priority then - table.insert(important, jid); - else - table.insert(unimportant, jid); + if jid then + if priority then + table.insert(important, jid); + else + table.insert(unimportant, jid); + end end end table.sort(important); table.sort(unimportant); + + if prioritized_jids[false] then + defaultlow = prioritized_jids[false]["defaultlow"]; + end end + return { important = important; unimportant = unimportant; + defaultlow = defaultlow }; end, function(fields, form_err, data) if form_err then @@ -118,6 +146,9 @@ end end + local misc_data = {defaultlow = fields.defaultlow}; + prioritized_jids[false] = misc_data; + local username = jid_split(data.from); local ok, err = store:set(username, prioritized_jids); if ok then