annotate mod_csi_muc_priorities/mod_csi_muc_priorities.lua @ 3587:c24d43ababc6

mod_storage_xmlarchive: Try harder to limit range of time to check Fixes read of entire index in case where the time range is outside the range present in the archive.
author Kim Alvefur <zash@zash.se>
date Tue, 07 May 2019 17:10:07 +0200
parents 1b45bac50f3d
children 013ef96a6d4d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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"));