Mercurial > prosody-modules
annotate mod_csi_muc_priorities/mod_csi_muc_priorities.lua @ 3656:3e0f4d727825
mod_vcard_muc: Add an alternative method of signaling avatar change
When the avatar has been changed, a signal is sent that the room
configuration has changed. Clients then do a disco#info query to find
the SHA-1 of the new avatar. They can then fetch it as before, or not if
they have it cached already.
This is meant to be less disruptive than signaling via presence, which
caused problems for some clients.
If clients transition to the new method, the old one can eventually be removed.
The namespace is made up while waiting for standardization.
Otherwise it is very close to what's described in
https://xmpp.org/extensions/inbox/muc-avatars.html
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 25 Aug 2019 20:46:43 +0200 |
parents | 2444fb3b05b7 |
children | d77a61d81555 |
rev | line source |
---|---|
3536
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
1 local jid_bare, jid_split = import("util.jid", "bare", "split"); |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
2 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
3 -- luacheck: ignore 122 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
4 local user_sessions = prosody.hosts[module.host].sessions; |
3532
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 |
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 module:hook("csi-is-stanza-important", function (event) |
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 local stanza, session = event.stanza, event.session; |
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 if stanza.name == "message" then |
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 if stanza.attr.type == "groupchat" then |
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 local body = stanza:get_child_text("body"); |
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 if not body then return end |
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 |
3534
700340b57851
mod_csi_muc_priorities: Break out room jid into a variable
Kim Alvefur <zash@zash.se>
parents:
3533
diff
changeset
|
13 local room_jid = jid_bare(stanza.attr.from); |
700340b57851
mod_csi_muc_priorities: Break out room jid into a variable
Kim Alvefur <zash@zash.se>
parents:
3533
diff
changeset
|
14 |
3536
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
15 local username = session.username; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
16 local priorities = user_sessions[username].csi_muc_priorities; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
17 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
18 if not priorities or priorities[room_jid] ~= false then |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
19 return nil; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
20 end |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
21 |
3535
bcb0eb9121a9
mod_csi_muc_priorities: Add a comment
Kim Alvefur <zash@zash.se>
parents:
3534
diff
changeset
|
22 -- Look for mention |
3532
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 local rooms = session.rooms_joined; |
3538
946902fa4088
mod_csi_muc_priorities: Undo early return to make following commit clearer
Kim Alvefur <zash@zash.se>
parents:
3537
diff
changeset
|
24 if rooms then |
946902fa4088
mod_csi_muc_priorities: Undo early return to make following commit clearer
Kim Alvefur <zash@zash.se>
parents:
3537
diff
changeset
|
25 local room_nick = rooms[room_jid]; |
946902fa4088
mod_csi_muc_priorities: Undo early return to make following commit clearer
Kim Alvefur <zash@zash.se>
parents:
3537
diff
changeset
|
26 if room_nick then |
946902fa4088
mod_csi_muc_priorities: Undo early return to make following commit clearer
Kim Alvefur <zash@zash.se>
parents:
3537
diff
changeset
|
27 if body:find(room_nick, 1, true) then |
946902fa4088
mod_csi_muc_priorities: Undo early return to make following commit clearer
Kim Alvefur <zash@zash.se>
parents:
3537
diff
changeset
|
28 return true; |
946902fa4088
mod_csi_muc_priorities: Undo early return to make following commit clearer
Kim Alvefur <zash@zash.se>
parents:
3537
diff
changeset
|
29 end |
3539
6d51f44bc725
mod_csi_muc_priorities: Consider own MUC messages as important
Kim Alvefur <zash@zash.se>
parents:
3538
diff
changeset
|
30 if stanza.attr.from == (room_jid .. "/" .. room_nick) then |
6d51f44bc725
mod_csi_muc_priorities: Consider own MUC messages as important
Kim Alvefur <zash@zash.se>
parents:
3538
diff
changeset
|
31 return true; |
6d51f44bc725
mod_csi_muc_priorities: Consider own MUC messages as important
Kim Alvefur <zash@zash.se>
parents:
3538
diff
changeset
|
32 end |
3538
946902fa4088
mod_csi_muc_priorities: Undo early return to make following commit clearer
Kim Alvefur <zash@zash.se>
parents:
3537
diff
changeset
|
33 end |
3540
1b45bac50f3d
mod_csi_muc_priorities: Consider own messages important (fallback if no mod_track_muc_joins)
Kim Alvefur <zash@zash.se>
parents:
3539
diff
changeset
|
34 elseif session.directed and session.directed[stanza.attr.from] then |
1b45bac50f3d
mod_csi_muc_priorities: Consider own messages important (fallback if no mod_track_muc_joins)
Kim Alvefur <zash@zash.se>
parents:
3539
diff
changeset
|
35 -- fallback if no mod_track_muc_joins |
1b45bac50f3d
mod_csi_muc_priorities: Consider own messages important (fallback if no mod_track_muc_joins)
Kim Alvefur <zash@zash.se>
parents:
3539
diff
changeset
|
36 return true; |
3538
946902fa4088
mod_csi_muc_priorities: Undo early return to make following commit clearer
Kim Alvefur <zash@zash.se>
parents:
3537
diff
changeset
|
37 end |
3628
2444fb3b05b7
mod_csi_muc_priorities: Signal unimportance (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents:
3601
diff
changeset
|
38 |
2444fb3b05b7
mod_csi_muc_priorities: Signal unimportance (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents:
3601
diff
changeset
|
39 -- Unimportant and no mention |
2444fb3b05b7
mod_csi_muc_priorities: Signal unimportance (thanks tmolitor)
Kim Alvefur <zash@zash.se>
parents:
3601
diff
changeset
|
40 return false; |
3532
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 end |
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 end |
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 end); |
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 |
3536
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
45 module:depends("adhoc"); |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
46 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
47 local dataform = require"util.dataforms"; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
48 local adhoc_inital_data = require "util.adhoc".new_initial_data_form; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
49 local instructions = [[ |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
50 These settings affect battery optimizations performed by the server |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
51 while your client has indicated that it is inactive. |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
52 ]] |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
53 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
54 local priority_settings_form = dataform.new { |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
55 title = "Prioritize addresses of group chats"; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
56 instructions = instructions; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
57 { |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
58 type = "hidden"; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
59 name = "FORM_TYPE"; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
60 value = "xmpp:modules.prosody.im/mod_"..module.name; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
61 }; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
62 { |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
63 type = "jid-multi"; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
64 name = "unimportant"; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
65 label = "Lower priority"; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
66 desc = "E.g. large noisy public channels"; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
67 }; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
68 } |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
69 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
70 local store = module:open_store(); |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
71 module:hook("resource-bind", function (event) |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
72 local username = event.session.username; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
73 user_sessions[username].csi_muc_priorities = store:get(username); |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
74 end); |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
75 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
76 local adhoc_command_handler = adhoc_inital_data(priority_settings_form, function (data) |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
77 local username = jid_split(data.from); |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
78 local prioritized_jids = user_sessions[username].csi_muc_priorities or store:get(username); |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
79 local unimportant = {}; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
80 if prioritized_jids then |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
81 for jid in pairs(prioritized_jids) do |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
82 table.insert(unimportant, jid); |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
83 end |
3537
7d6fb9570395
mod_csi_muc_priorities: Sort list of JIDs
Kim Alvefur <zash@zash.se>
parents:
3536
diff
changeset
|
84 table.sort(unimportant); |
3536
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
85 end |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
86 return { unimportant = unimportant }; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
87 end, function(fields, form_err, data) |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
88 if form_err then |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
89 return { status = "completed", error = { message = "Problem in submitted form" } }; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
90 end |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
91 local prioritized_jids = {}; |
3601
013ef96a6d4d
mod_csi_muc_priorities: Fix traceback due to empty field
Kim Alvefur <zash@zash.se>
parents:
3540
diff
changeset
|
92 if fields.unimportant then |
013ef96a6d4d
mod_csi_muc_priorities: Fix traceback due to empty field
Kim Alvefur <zash@zash.se>
parents:
3540
diff
changeset
|
93 for _, jid in ipairs(fields.unimportant) do |
013ef96a6d4d
mod_csi_muc_priorities: Fix traceback due to empty field
Kim Alvefur <zash@zash.se>
parents:
3540
diff
changeset
|
94 prioritized_jids[jid] = false; |
013ef96a6d4d
mod_csi_muc_priorities: Fix traceback due to empty field
Kim Alvefur <zash@zash.se>
parents:
3540
diff
changeset
|
95 end |
3536
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
96 end |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
97 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
98 local username = jid_split(data.from); |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
99 local ok, err = store:set(username, prioritized_jids); |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
100 if ok then |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
101 user_sessions[username].csi_muc_priorities = prioritized_jids; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
102 return { status = "completed", info = "Priorities updated" }; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
103 else |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
104 return { status = "completed", error = { message = "Error saving priorities: "..err } }; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
105 end |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
106 end); |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
107 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
108 module:add_item("adhoc", module:require "adhoc".new("Configure group chat priorities", |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
109 "xmpp:modules.prosody.im/mod_"..module.name, adhoc_command_handler, "local_user")); |