Mercurial > prosody-modules
annotate mod_csi_muc_priorities/mod_csi_muc_priorities.lua @ 3574:f478e325529e
mod_atom/README: Add some text about where to look for the atom feed
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 05 May 2019 09:21:25 +0200 |
parents | 1b45bac50f3d |
children | 013ef96a6d4d |
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 |
3532
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 end |
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 end |
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 end); |
85c357b69eec
mod_csi_muc_priorities: Reduce importance of group chat messages
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 |
3536
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
42 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
|
43 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
44 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
|
45 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
|
46 local instructions = [[ |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
47 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
|
48 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
|
49 ]] |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
50 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
51 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
|
52 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
|
53 instructions = instructions; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
54 { |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
55 type = "hidden"; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
56 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
|
57 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
|
58 }; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
59 { |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
60 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
|
61 name = "unimportant"; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
62 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
|
63 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
|
64 }; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
65 } |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
66 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
67 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
|
68 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
|
69 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
|
70 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
|
71 end); |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
72 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
73 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
|
74 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
|
75 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
|
76 local unimportant = {}; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
77 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
|
78 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
|
79 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
|
80 end |
3537
7d6fb9570395
mod_csi_muc_priorities: Sort list of JIDs
Kim Alvefur <zash@zash.se>
parents:
3536
diff
changeset
|
81 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
|
82 end |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
83 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
|
84 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
|
85 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
|
86 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
|
87 end |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
88 local prioritized_jids = {}; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
89 for _, jid in ipairs(fields.unimportant) do |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
90 prioritized_jids[jid] = false; |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
91 end |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
92 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
93 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
|
94 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
|
95 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
|
96 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
|
97 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
|
98 else |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
99 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
|
100 end |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
101 end); |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
102 |
eed657091329
mod_csi_muc_priorities: Allow specifying which MUC JIDs are less important
Kim Alvefur <zash@zash.se>
parents:
3535
diff
changeset
|
103 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
|
104 "xmpp:modules.prosody.im/mod_"..module.name, adhoc_command_handler, "local_user")); |