Mercurial > prosody-modules
comparison mod_mam_muc/mod_mam_muc.lua @ 3036:f7ebf8fcd602
mod_mam_muc: Remove support for Prosody trunk/0.11
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 02 Apr 2018 16:20:36 +0200 |
| parents | 39994c6bb314 |
| children | 264eab9d501c |
comparison
equal
deleted
inserted
replaced
| 3035:60ca0d03f3e3 | 3036:f7ebf8fcd602 |
|---|---|
| 6 if module:get_host_type() ~= "component" then | 6 if module:get_host_type() ~= "component" then |
| 7 module:log("error", "mod_%s should be loaded only on a MUC component, not normal hosts", module.name); | 7 module:log("error", "mod_%s should be loaded only on a MUC component, not normal hosts", module.name); |
| 8 return; | 8 return; |
| 9 end | 9 end |
| 10 | 10 |
| 11 local xmlns_mam = "urn:xmpp:mam:2"; | 11 -- Note: Can't implement urn:xmpp:mam:2 because we catch messages after |
| 12 -- they have already been broadcast, so they can no longer be modified. | |
| 13 | |
| 14 local xmlns_mam = "urn:xmpp:mam:1"; | |
| 12 local xmlns_delay = "urn:xmpp:delay"; | 15 local xmlns_delay = "urn:xmpp:delay"; |
| 13 local xmlns_forward = "urn:xmpp:forward:0"; | 16 local xmlns_forward = "urn:xmpp:forward:0"; |
| 14 local xmlns_st_id = "urn:xmpp:sid:0"; | 17 local xmlns_st_id = "urn:xmpp:sid:0"; |
| 15 local xmlns_muc_user = "http://jabber.org/protocol/muc#user"; | 18 local xmlns_muc_user = "http://jabber.org/protocol/muc#user"; |
| 16 local muc_form_enable = "muc#roomconfig_enablearchiving" | 19 local muc_form_enable = "muc#roomconfig_enablearchiving" |
| 24 local it = require"util.iterators"; | 27 local it = require"util.iterators"; |
| 25 | 28 |
| 26 -- Support both old and new MUC code | 29 -- Support both old and new MUC code |
| 27 local mod_muc = module:depends"muc"; | 30 local mod_muc = module:depends"muc"; |
| 28 local rooms = rawget(mod_muc, "rooms"); | 31 local rooms = rawget(mod_muc, "rooms"); |
| 29 local each_room = rawget(mod_muc, "each_room") or function() return it.values(rooms); end; | 32 if not rooms then |
| 30 local new_muc = not rooms; | 33 module:log("warn", "mod_mam_muc is compatible with Prosody up to 0.10.x, use mod_muc_mam with later versions"); |
| 31 if new_muc then | 34 module:depends("muc_mam"); |
| 32 rooms = module:shared"muc/rooms"; | 35 return; |
| 33 else | 36 end |
| 34 -- COMPAT: We don't (currently?) support injecting stanza-id | 37 local each_room = function() return it.values(rooms); end; |
| 35 -- on Prosody 0.10 and prior, which is required by mam:2 | 38 local get_room_from_jid = function (jid) return rooms[jid]; end |
| 36 xmlns_mam = "urn:xmpp:mam:1"; | |
| 37 end | |
| 38 local get_room_from_jid = rawget(mod_muc, "get_room_from_jid") or | |
| 39 function (jid) | |
| 40 return rooms[jid]; | |
| 41 end | |
| 42 | 39 |
| 43 local is_stanza = st.is_stanza; | 40 local is_stanza = st.is_stanza; |
| 44 local tostring = tostring; | 41 local tostring = tostring; |
| 45 local time_now = os.time; | 42 local time_now = os.time; |
| 46 local m_min = math.min; | 43 local m_min = math.min; |
| 84 end | 81 end |
| 85 | 82 |
| 86 local send_history, save_to_history; | 83 local send_history, save_to_history; |
| 87 | 84 |
| 88 -- Override history methods for all rooms. | 85 -- Override history methods for all rooms. |
| 89 if not new_muc then -- 0.10 or older | 86 do -- 0.10 or older |
| 90 module:hook("muc-room-created", function (event) | 87 module:hook("muc-room-created", function (event) |
| 91 local room = event.room; | 88 local room = event.room; |
| 92 if archiving_enabled(room) then | 89 if archiving_enabled(room) then |
| 93 room.send_history = send_history; | 90 room.send_history = send_history; |
| 94 room.save_to_history = save_to_history; | 91 room.save_to_history = save_to_history; |
| 375 to = to; -- `to` is required to calculate the character count for `maxchars` | 372 to = to; -- `to` is required to calculate the character count for `maxchars` |
| 376 maxchars = maxchars, maxstanzas = maxstanzas, since = since; | 373 maxchars = maxchars, maxstanzas = maxstanzas, since = since; |
| 377 next_stanza = function() end; -- events should define this iterator | 374 next_stanza = function() end; -- events should define this iterator |
| 378 }; | 375 }; |
| 379 | 376 |
| 380 module:fire_event("muc-get-history", event); | |
| 381 | |
| 382 for msg in event.next_stanza, event do | 377 for msg in event.next_stanza, event do |
| 383 self:_route_stanza(msg); | 378 self:_route_stanza(msg); |
| 384 end | 379 end |
| 385 end | 380 end |
| 386 | 381 |
| 418 local with = stanza.name | 413 local with = stanza.name |
| 419 if stanza.attr.type then | 414 if stanza.attr.type then |
| 420 with = with .. "<" .. stanza.attr.type | 415 with = with .. "<" .. stanza.attr.type |
| 421 end | 416 end |
| 422 | 417 |
| 423 local id = archive:append(room_node, nil, stored_stanza, time_now(), with); | 418 archive:append(room_node, nil, stored_stanza, time_now(), with); |
| 424 | |
| 425 if id then | |
| 426 stanza:add_direct_child(st.stanza("stanza-id", { xmlns = xmlns_st_id, by = self.jid, id = id })); | |
| 427 end | |
| 428 end | |
| 429 | |
| 430 module:hook("muc-broadcast-message", function (event) | |
| 431 local room, stanza = event.room, event.stanza; | |
| 432 if stanza:get_child("body") then | |
| 433 save_to_history(room, stanza); | |
| 434 end | |
| 435 end); | |
| 436 | |
| 437 if module:get_option_boolean("muc_log_presences", true) then | |
| 438 module:hook("muc-occupant-joined", function (event) | |
| 439 save_to_history(event.room, st.stanza("presence", { from = event.nick })); | |
| 440 end); | |
| 441 module:hook("muc-occupant-left", function (event) | |
| 442 save_to_history(event.room, st.stanza("presence", { type = "unavailable", from = event.nick })); | |
| 443 end); | |
| 444 end | 419 end |
| 445 | 420 |
| 446 if not archive.delete then | 421 if not archive.delete then |
| 447 module:log("warn", "Storage driver %s does not support deletion", archive._provided_by); | 422 module:log("warn", "Storage driver %s does not support deletion", archive._provided_by); |
| 448 module:log("warn", "Archived message will persist after a room has been destroyed"); | 423 module:log("warn", "Archived message will persist after a room has been destroyed"); |
