Annotate

plugins/muc/history.lib.lua @ 11226:b3ae48362f78 0.11

mod_s2s: Prevent whitespace keepalives the stream has been opened This will result in the stream timing out instead, which is probably correct if the stream has not been opened yet. This was already done for c2s in e69df8093387 Thanks Ge0rG
author Kim Alvefur <zash@zash.se>
date Thu, 10 Dec 2020 11:53:10 +0100
parent 10230:dd7e924c74ef
child 10355:cb9755d7a36e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
1 -- Prosody IM
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
4 -- Copyright (C) 2014 Daurnimator
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
5 --
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
6 -- This project is MIT/X11 licensed. Please see the
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
7 -- COPYING file in the source package for more information.
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
8 --
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
9
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
10 local gettime = os.time;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
11 local datetime = require "util.datetime";
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
12 local st = require "util.stanza";
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
13
6240
641756a6a5f7 plugins/muc: Move 'module:get_option_number("max_history_messages")' from mod_muc into history lib; remove from muclib exports
daurnimator <quae@daurnimator.com>
parents: 6231
diff changeset
14 local default_history_length = 20;
641756a6a5f7 plugins/muc: Move 'module:get_option_number("max_history_messages")' from mod_muc into history lib; remove from muclib exports
daurnimator <quae@daurnimator.com>
parents: 6231
diff changeset
15 local max_history_length = module:get_option_number("max_history_messages", math.huge);
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
16
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
17 local function set_max_history_length(_max_history_length)
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
18 max_history_length = _max_history_length or math.huge;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
19 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
20
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
21 local function get_historylength(room)
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
22 return math.min(room._data.history_length or default_history_length, max_history_length);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
23 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
24
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
25 local function set_historylength(room, length)
6991
84e01dbb739e MUC: Update all config form handlers to take advantage of the new per-option events
Matthew Wild <mwild1@gmail.com>
parents: 6535
diff changeset
26 if length then
84e01dbb739e MUC: Update all config form handlers to take advantage of the new per-option events
Matthew Wild <mwild1@gmail.com>
parents: 6535
diff changeset
27 length = assert(tonumber(length), "Length not a valid number");
84e01dbb739e MUC: Update all config form handlers to take advantage of the new per-option events
Matthew Wild <mwild1@gmail.com>
parents: 6535
diff changeset
28 end
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
29 if length == default_history_length then length = nil; end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
30 room._data.history_length = length;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
31 return true;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
32 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
33
8794
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
34 -- Fix for clients who don't support XEP-0045 correctly
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
35 -- Default number of history messages the room returns
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
36 local function get_defaulthistorymessages(room)
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
37 return room._data.default_history_messages or default_history_length;
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
38 end
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
39 local function set_defaulthistorymessages(room, number)
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
40 number = math.min(tonumber(number) or default_history_length, room._data.history_length or default_history_length);
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
41 if number == default_history_length then
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
42 number = nil;
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
43 end
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
44 room._data.default_history_messages = number;
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
45 end
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
46
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
47 module:hook("muc-config-form", function(event)
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
48 table.insert(event.form, {
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
49 name = "muc#roomconfig_historylength";
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
50 type = "text-single";
9034
1c709e3d2e5e MUC: Improve labels of all config form items
Matthew Wild <mwild1@gmail.com>
parents: 8794
diff changeset
51 label = "Maximum number of history messages returned by room";
1c709e3d2e5e MUC: Improve labels of all config form items
Matthew Wild <mwild1@gmail.com>
parents: 8794
diff changeset
52 desc = "Specify the maximum number of previous messages that should be sent to users when they join the room";
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
53 value = tostring(get_historylength(event.room));
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
54 });
8794
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
55 table.insert(event.form, {
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
56 name = 'muc#roomconfig_defaulthistorymessages',
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
57 type = 'text-single',
9034
1c709e3d2e5e MUC: Improve labels of all config form items
Matthew Wild <mwild1@gmail.com>
parents: 8794
diff changeset
58 label = 'Default number of history messages returned by room',
1c709e3d2e5e MUC: Improve labels of all config form items
Matthew Wild <mwild1@gmail.com>
parents: 8794
diff changeset
59 desc = "Specify the number of previous messages sent to new users when they join the room";
8794
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
60 value = tostring(get_defaulthistorymessages(event.room))
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
61 });
9035
173c0e16e704 MUC: Add sections in room config form
Matthew Wild <mwild1@gmail.com>
parents: 9034
diff changeset
62 end, 70-5);
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
63
6991
84e01dbb739e MUC: Update all config form handlers to take advantage of the new per-option events
Matthew Wild <mwild1@gmail.com>
parents: 6535
diff changeset
64 module:hook("muc-config-submitted/muc#roomconfig_historylength", function(event)
84e01dbb739e MUC: Update all config form handlers to take advantage of the new per-option events
Matthew Wild <mwild1@gmail.com>
parents: 6535
diff changeset
65 if set_historylength(event.room, event.value) then
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
66 event.status_codes["104"] = true;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
67 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
68 end);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
69
8794
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
70 module:hook("muc-config-submitted/muc#roomconfig_defaulthistorymessages", function(event)
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
71 if set_defaulthistorymessages(event.room, event.value) then
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
72 event.status_codes["104"] = true;
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
73 end
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
74 end);
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
75
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
76 local function parse_history(stanza)
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
77 local x_tag = stanza:get_child("x", "http://jabber.org/protocol/muc");
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
78 local history_tag = x_tag and x_tag:get_child("history", "http://jabber.org/protocol/muc");
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
79 if not history_tag then
8794
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
80 return nil, nil, nil;
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
81 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
82
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
83 local maxchars = tonumber(history_tag.attr.maxchars);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
84
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
85 local maxstanzas = tonumber(history_tag.attr.maxstanzas);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
86
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
87 -- messages received since the UTC datetime specified
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
88 local since = history_tag.attr.since;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
89 if since then
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
90 since = datetime.parse(since);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
91 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
92
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
93 -- messages received in the last "X" seconds.
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
94 local seconds = tonumber(history_tag.attr.seconds);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
95 if seconds then
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
96 seconds = gettime() - seconds;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
97 if since then
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
98 since = math.max(since, seconds);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
99 else
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
100 since = seconds;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
101 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
102 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
103
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
104 return maxchars, maxstanzas, since;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
105 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
106
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
107 module:hook("muc-get-history", function(event)
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
108 local room = event.room;
7350
24e2369b67f9 MUC: Move history to room._history
Kim Alvefur <zash@zash.se>
parents: 7086
diff changeset
109 local history = room._history; -- send discussion history
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
110 if not history then return nil end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
111 local history_len = #history;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
112
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
113 local to = event.to;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
114 local maxchars = event.maxchars;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
115 local maxstanzas = event.maxstanzas or history_len;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
116 local since = event.since;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
117 local n = 0;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
118 local charcount = 0;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
119 for i=history_len,1,-1 do
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
120 local entry = history[i];
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
121 if maxchars then
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
122 if not entry.chars then
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
123 entry.stanza.attr.to = "";
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
124 entry.chars = #tostring(entry.stanza);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
125 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
126 charcount = charcount + entry.chars + #to;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
127 if charcount > maxchars then break; end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
128 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
129 if since and since > entry.timestamp then break; end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
130 if n + 1 > maxstanzas then break; end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
131 n = n + 1;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
132 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
133
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
134 local i = history_len-n+1
7086
6cc7c9da29ed MUC: Rename variables to please luacheck
Kim Alvefur <zash@zash.se>
parents: 6991
diff changeset
135 function event.next_stanza()
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
136 if i > history_len then return nil end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
137 local entry = history[i];
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
138 local msg = entry.stanza;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
139 msg.attr.to = to;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
140 i = i + 1;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
141 return msg;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
142 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
143 return true;
8027
c2e7dfd87abb MUC: Decrement priority muc-get-history hook to standard for core modules
Kim Alvefur <zash@zash.se>
parents: 7401
diff changeset
144 end, -1);
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
145
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
146 local function send_history(room, stanza)
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
147 local maxchars, maxstanzas, since = parse_history(stanza);
8794
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
148 if not(maxchars or maxstanzas or since) then
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
149 maxstanzas = get_defaulthistorymessages(room);
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
150 end
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
151 local event = {
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
152 room = room;
8028
adfc7f3b29ce MUC: Include original stanza in send history event
Kim Alvefur <zash@zash.se>
parents: 8027
diff changeset
153 stanza = stanza;
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
154 to = stanza.attr.from; -- `to` is required to calculate the character count for `maxchars`
8794
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
155 maxchars = maxchars,
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
156 maxstanzas = maxstanzas,
0e2c1c4d4f78 Merge 0.10 -> trunk
Matthew Wild <mwild1@gmail.com>
parents: 8780
diff changeset
157 since = since;
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
158 next_stanza = function() end; -- events should define this iterator
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
159 };
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
160 module:fire_event("muc-get-history", event);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
161 for msg in event.next_stanza, event do
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
162 room:route_stanza(msg);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
163 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
164 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
165
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
166 -- Send history on join
6277
f2c9c36979b3 plugins/muc: Fix use of incorrect event on occupant join
daurnimator <quae@daurnimator.com>
parents: 6240
diff changeset
167 module:hook("muc-occupant-session-new", function(event)
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
168 send_history(event.room, event.stanza);
6231
bc12a8253f94 plugins/muc/muc.lib: Move sending of occupant list to joining user out of hook, and into main flow: It has to occur before publication of their status
daurnimator <quae@daurnimator.com>
parents: 6215
diff changeset
169 end, 50); -- Before subject(20)
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
170
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
171 -- add to history
6535
0f940a7ba489 mod_muc: Add muc-add-history event to allow modules to override default history storage
Matthew Wild <mwild1@gmail.com>
parents: 6277
diff changeset
172 module:hook("muc-add-history", function(event)
8779
11b4ae162db7 MUC: Move condition for what gets added to history so that other modules benefit (thanks jcbrand)
Kim Alvefur <zash@zash.se>
parents: 8028
diff changeset
173 local room = event.room
11b4ae162db7 MUC: Move condition for what gets added to history so that other modules benefit (thanks jcbrand)
Kim Alvefur <zash@zash.se>
parents: 8028
diff changeset
174 local history = room._history;
11b4ae162db7 MUC: Move condition for what gets added to history so that other modules benefit (thanks jcbrand)
Kim Alvefur <zash@zash.se>
parents: 8028
diff changeset
175 if not history then history = {}; room._history = history; end
11b4ae162db7 MUC: Move condition for what gets added to history so that other modules benefit (thanks jcbrand)
Kim Alvefur <zash@zash.se>
parents: 8028
diff changeset
176 local stanza = st.clone(event.stanza);
11b4ae162db7 MUC: Move condition for what gets added to history so that other modules benefit (thanks jcbrand)
Kim Alvefur <zash@zash.se>
parents: 8028
diff changeset
177 stanza.attr.to = "";
11b4ae162db7 MUC: Move condition for what gets added to history so that other modules benefit (thanks jcbrand)
Kim Alvefur <zash@zash.se>
parents: 8028
diff changeset
178 local ts = gettime();
11b4ae162db7 MUC: Move condition for what gets added to history so that other modules benefit (thanks jcbrand)
Kim Alvefur <zash@zash.se>
parents: 8028
diff changeset
179 local stamp = datetime.datetime(ts);
9081
ce57c69a20e2 MUC: Split long lines [luacheck strict]
Kim Alvefur <zash@zash.se>
parents: 9035
diff changeset
180 stanza:tag("delay", { -- XEP-0203
10230
dd7e924c74ef MUC: Fix delay@from to be room JID (fixes #1416)
Kim Alvefur <zash@zash.se>
parents: 9081
diff changeset
181 xmlns = "urn:xmpp:delay", from = room.jid, stamp = stamp
9081
ce57c69a20e2 MUC: Split long lines [luacheck strict]
Kim Alvefur <zash@zash.se>
parents: 9035
diff changeset
182 }):up();
ce57c69a20e2 MUC: Split long lines [luacheck strict]
Kim Alvefur <zash@zash.se>
parents: 9035
diff changeset
183 stanza:tag("x", { -- XEP-0091 (deprecated)
10230
dd7e924c74ef MUC: Fix delay@from to be room JID (fixes #1416)
Kim Alvefur <zash@zash.se>
parents: 9081
diff changeset
184 xmlns = "jabber:x:delay", from = room.jid, stamp = datetime.legacy()
9081
ce57c69a20e2 MUC: Split long lines [luacheck strict]
Kim Alvefur <zash@zash.se>
parents: 9035
diff changeset
185 }):up();
8779
11b4ae162db7 MUC: Move condition for what gets added to history so that other modules benefit (thanks jcbrand)
Kim Alvefur <zash@zash.se>
parents: 8028
diff changeset
186 local entry = { stanza = stanza, timestamp = ts };
11b4ae162db7 MUC: Move condition for what gets added to history so that other modules benefit (thanks jcbrand)
Kim Alvefur <zash@zash.se>
parents: 8028
diff changeset
187 table.insert(history, entry);
11b4ae162db7 MUC: Move condition for what gets added to history so that other modules benefit (thanks jcbrand)
Kim Alvefur <zash@zash.se>
parents: 8028
diff changeset
188 while #history > get_historylength(room) do table.remove(history, 1) end
6535
0f940a7ba489 mod_muc: Add muc-add-history event to allow modules to override default history storage
Matthew Wild <mwild1@gmail.com>
parents: 6277
diff changeset
189 return true;
0f940a7ba489 mod_muc: Add muc-add-history event to allow modules to override default history storage
Matthew Wild <mwild1@gmail.com>
parents: 6277
diff changeset
190 end, -1);
0f940a7ba489 mod_muc: Add muc-add-history event to allow modules to override default history storage
Matthew Wild <mwild1@gmail.com>
parents: 6277
diff changeset
191
0f940a7ba489 mod_muc: Add muc-add-history event to allow modules to override default history storage
Matthew Wild <mwild1@gmail.com>
parents: 6277
diff changeset
192 -- Have a single muc-add-history event, so that plugins can mark it
0f940a7ba489 mod_muc: Add muc-add-history event to allow modules to override default history storage
Matthew Wild <mwild1@gmail.com>
parents: 6277
diff changeset
193 -- as handled without stopping other muc-broadcast-message handlers
0f940a7ba489 mod_muc: Add muc-add-history event to allow modules to override default history storage
Matthew Wild <mwild1@gmail.com>
parents: 6277
diff changeset
194 module:hook("muc-broadcast-message", function(event)
8780
4cab4ee5dfcc MUC: Introduce an event to allow plugins to influence which messages are added to history
Kim Alvefur <zash@zash.se>
parents: 8779
diff changeset
195 if module:fire_event("muc-message-is-historic", event) then
8779
11b4ae162db7 MUC: Move condition for what gets added to history so that other modules benefit (thanks jcbrand)
Kim Alvefur <zash@zash.se>
parents: 8028
diff changeset
196 module:fire_event("muc-add-history", event);
11b4ae162db7 MUC: Move condition for what gets added to history so that other modules benefit (thanks jcbrand)
Kim Alvefur <zash@zash.se>
parents: 8028
diff changeset
197 end
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
198 end);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
199
8780
4cab4ee5dfcc MUC: Introduce an event to allow plugins to influence which messages are added to history
Kim Alvefur <zash@zash.se>
parents: 8779
diff changeset
200 module:hook("muc-message-is-historic", function (event)
4cab4ee5dfcc MUC: Introduce an event to allow plugins to influence which messages are added to history
Kim Alvefur <zash@zash.se>
parents: 8779
diff changeset
201 return event.stanza:get_child("body");
4cab4ee5dfcc MUC: Introduce an event to allow plugins to influence which messages are added to history
Kim Alvefur <zash@zash.se>
parents: 8779
diff changeset
202 end, -1);
4cab4ee5dfcc MUC: Introduce an event to allow plugins to influence which messages are added to history
Kim Alvefur <zash@zash.se>
parents: 8779
diff changeset
203
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
204 return {
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
205 set_max_length = set_max_history_length;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
206 parse_history = parse_history;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
207 send = send_history;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
208 get_length = get_historylength;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
209 set_length = set_historylength;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
210 };