plugins/muc/muc.lib: Move sending of occupant list to joining user out of hook, and...
authordaurnimator <quae@daurnimator.com>
Mon, 21 Apr 2014 21:51:32 +0000 (17:51 -0400)
committerdaurnimator <quae@daurnimator.com>
Mon, 21 Apr 2014 21:51:32 +0000 (17:51 -0400)
plugins/muc/history.lib.lua
plugins/muc/muc.lib.lua

index 417d62a8c2f8b501631d8784302f4d0e618be263..596f92da75cfa9720a7387249514c81f0cd9b2b7 100644 (file)
@@ -131,7 +131,7 @@ end
 -- Send history on join
 module:hook("muc-occupant-joined", function(event)
        send_history(event.room, event.stanza);
-end, 50); -- Between occupant list (80) and subject(20)
+end, 50); -- Before subject(20)
 
 -- add to history
 module:hook("muc-broadcast-message", function(event)
index 2e48ade1d5dc1d129681cc2610f9136fd5976982..6aca5c62431fb25dd1358dbddec3affeb2b3ce3c 100644 (file)
@@ -320,15 +320,6 @@ module:hook("muc-occupant-pre-join", function(event)
        end
 end, -10);
 
--- Send occupant list to newly joined user
-module:hook("muc-occupant-joined", function(event)
-       local real_jid = event.stanza.attr.from;
-       event.room:send_occupant_list(real_jid, function(nick, occupant)
-               -- Don't include self
-               return occupant:get_presence(real_jid) == nil;
-       end);
-end, 80);
-
 function room_mt:handle_presence_to_occupant(origin, stanza)
        local type = stanza.attr.type;
        if type == "error" then -- error, kick em out!
@@ -457,6 +448,14 @@ function room_mt:handle_presence_to_occupant(origin, stanza)
                                dest_x:tag("status", {code = "100"}):up();
                        end
                        self:save_occupant(dest_occupant);
+
+                       if orig_occupant == nil and is_first_dest_session then
+                               -- Send occupant list to newly joined user
+                               self:send_occupant_list(real_jid, function(nick, occupant)
+                                       -- Don't include self
+                                       return occupant:get_presence(real_jid) == nil;
+                               end)
+                       end
                        self:publicise_occupant_status(dest_occupant, dest_x);
 
                        if orig_occupant ~= nil and orig_occupant ~= dest_occupant and not is_last_orig_session then -- If user is swapping and wasn't last original session