Annotate

plugins/muc/history.lib.lua @ 8528:67311cda0625

net.server_select: Better detection of errors for outgoing connections On connection failure, a socket is marked readable and writable. So to detect initial connection failures (connection refused, etc.) we now watch for sockets becoming readable during initial connection, and also read from readable sockets before writing to writable sockets. This should fix 'onconnect' being called for outgoing connections that actually failed.
author Matthew Wild <mwild1@gmail.com>
date Fri, 23 Feb 2018 15:30:00 +0000
parent 8028:adfc7f3b29ce
child 8779:11b4ae162db7
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
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
34 module:hook("muc-config-form", function(event)
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
35 table.insert(event.form, {
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
36 name = "muc#roomconfig_historylength";
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
37 type = "text-single";
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
38 label = "Maximum Number of History Messages Returned by Room";
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
39 value = tostring(get_historylength(event.room));
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
40 });
7401
e16b3fd0bd80 MUC: Assign priorities to config form hooks so they have a consistent order on each start
Kim Alvefur <zash@zash.se>
parents: 7350
diff changeset
41 end, 100-10);
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
42
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
43 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
44 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
45 event.status_codes["104"] = true;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
46 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
47 end);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
48
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
49 local function parse_history(stanza)
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
50 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
51 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
52 if not history_tag then
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
53 return nil, default_history_length, nil;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
54 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
55
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
56 local maxchars = tonumber(history_tag.attr.maxchars);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
57
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
58 local maxstanzas = tonumber(history_tag.attr.maxstanzas);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
59
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
60 -- messages received since the UTC datetime specified
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
61 local since = history_tag.attr.since;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
62 if since then
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
63 since = datetime.parse(since);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
64 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
65
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
66 -- messages received in the last "X" seconds.
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
67 local seconds = tonumber(history_tag.attr.seconds);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
68 if seconds then
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
69 seconds = gettime() - seconds;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
70 if since then
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
71 since = math.max(since, seconds);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
72 else
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
73 since = seconds;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
74 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
75 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
76
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
77 return maxchars, maxstanzas, since;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
78 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
79
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
80 module:hook("muc-get-history", function(event)
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
81 local room = event.room;
7350
24e2369b67f9 MUC: Move history to room._history
Kim Alvefur <zash@zash.se>
parents: 7086
diff changeset
82 local history = room._history; -- send discussion history
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
83 if not history then return nil end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
84 local history_len = #history;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
85
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
86 local to = event.to;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
87 local maxchars = event.maxchars;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
88 local maxstanzas = event.maxstanzas or history_len;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
89 local since = event.since;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
90 local n = 0;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
91 local charcount = 0;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
92 for i=history_len,1,-1 do
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
93 local entry = history[i];
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
94 if maxchars then
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
95 if not entry.chars then
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
96 entry.stanza.attr.to = "";
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
97 entry.chars = #tostring(entry.stanza);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
98 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
99 charcount = charcount + entry.chars + #to;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
100 if charcount > maxchars then break; end
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 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
103 if n + 1 > maxstanzas then break; end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
104 n = n + 1;
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 local i = history_len-n+1
7086
6cc7c9da29ed MUC: Rename variables to please luacheck
Kim Alvefur <zash@zash.se>
parents: 6991
diff changeset
108 function event.next_stanza()
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
109 if i > history_len then return nil end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
110 local entry = history[i];
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
111 local msg = entry.stanza;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
112 msg.attr.to = to;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
113 i = i + 1;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
114 return msg;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
115 end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
116 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
117 end, -1);
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
118
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
119 local function send_history(room, stanza)
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
120 local maxchars, maxstanzas, since = parse_history(stanza);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
121 local event = {
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
122 room = room;
8028
adfc7f3b29ce MUC: Include original stanza in send history event
Kim Alvefur <zash@zash.se>
parents: 8027
diff changeset
123 stanza = stanza;
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
124 to = stanza.attr.from; -- `to` is required to calculate the character count for `maxchars`
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
125 maxchars = maxchars, maxstanzas = maxstanzas, since = since;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
126 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
127 };
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
128 module:fire_event("muc-get-history", event);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
129 for msg in event.next_stanza, event do
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
130 room:route_stanza(msg);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
131 end
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 -- Send history on join
6277
f2c9c36979b3 plugins/muc: Fix use of incorrect event on occupant join
daurnimator <quae@daurnimator.com>
parents: 6240
diff changeset
135 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
136 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
137 end, 50); -- Before subject(20)
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
138
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
139 -- 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
140 module:hook("muc-add-history", function(event)
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
141 local historic = event.stanza:get_child("body");
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
142 if historic then
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
143 local room = event.room
7350
24e2369b67f9 MUC: Move history to room._history
Kim Alvefur <zash@zash.se>
parents: 7086
diff changeset
144 local history = room._history;
24e2369b67f9 MUC: Move history to room._history
Kim Alvefur <zash@zash.se>
parents: 7086
diff changeset
145 if not history then history = {}; room._history = history; end
6215
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
146 local stanza = st.clone(event.stanza);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
147 stanza.attr.to = "";
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
148 local ts = gettime();
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
149 local stamp = datetime.datetime(ts);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
150 stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = module.host, stamp = stamp}):up(); -- XEP-0203
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
151 stanza:tag("x", {xmlns = "jabber:x:delay", from = module.host, stamp = datetime.legacy()}):up(); -- XEP-0091 (deprecated)
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
152 local entry = { stanza = stanza, timestamp = ts };
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
153 table.insert(history, entry);
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
154 while #history > get_historylength(room) do table.remove(history, 1) end
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
155 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
156 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
157 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
158
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
159 -- 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
160 -- 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
161 module:hook("muc-broadcast-message", function(event)
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
162 module:fire_event("muc-add-history", event);
6215
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
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
165 return {
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
166 set_max_length = set_max_history_length;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
167 parse_history = parse_history;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
168 send = send_history;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
169 get_length = get_historylength;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
170 set_length = set_historylength;
1dd09dc04945 plugins/muc: Move history to an external module
daurnimator <quae@daurnimator.com>
parents:
diff changeset
171 };