Bläddra i källkod

fix: Fixes #7514 when promoting new moderator and lobby is enabled.

master
damencho 4 år sedan
förälder
incheckning
25ae83bcf4
3 ändrade filer med 28 tillägg och 8 borttagningar
  1. 2
    2
      package-lock.json
  2. 1
    1
      package.json
  3. 25
    5
      resources/prosody-plugins/mod_muc_lobby_rooms.lua

+ 2
- 2
package-lock.json Visa fil

17945
       }
17945
       }
17946
     },
17946
     },
17947
     "lib-jitsi-meet": {
17947
     "lib-jitsi-meet": {
17948
-      "version": "github:jitsi/lib-jitsi-meet#d37024751843711b219ebbe184c4d9c0ae99b7a3",
17949
-      "from": "github:jitsi/lib-jitsi-meet#d37024751843711b219ebbe184c4d9c0ae99b7a3",
17948
+      "version": "github:jitsi/lib-jitsi-meet#15dcc57424cc937290e1963b8eb402c1fcf48ccb",
17949
+      "from": "github:jitsi/lib-jitsi-meet#15dcc57424cc937290e1963b8eb402c1fcf48ccb",
17950
       "requires": {
17950
       "requires": {
17951
         "@jitsi/js-utils": "1.0.0",
17951
         "@jitsi/js-utils": "1.0.0",
17952
         "@jitsi/sdp-interop": "1.0.3",
17952
         "@jitsi/sdp-interop": "1.0.3",

+ 1
- 1
package.json Visa fil

56
     "jquery-i18next": "1.2.1",
56
     "jquery-i18next": "1.2.1",
57
     "js-md5": "0.6.1",
57
     "js-md5": "0.6.1",
58
     "jwt-decode": "2.2.0",
58
     "jwt-decode": "2.2.0",
59
-    "lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#d37024751843711b219ebbe184c4d9c0ae99b7a3",
59
+    "lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#15dcc57424cc937290e1963b8eb402c1fcf48ccb",
60
     "libflacjs": "github:mmig/libflac.js#93d37e7f811f01cf7d8b6a603e38bd3c3810907d",
60
     "libflacjs": "github:mmig/libflac.js#93d37e7f811f01cf7d8b6a603e38bd3c3810907d",
61
     "lodash": "4.17.19",
61
     "lodash": "4.17.19",
62
     "moment": "2.19.4",
62
     "moment": "2.19.4",

+ 25
- 5
resources/prosody-plugins/mod_muc_lobby_rooms.lua Visa fil

132
 
132
 
133
             -- check is an owner, only owners can receive the presence
133
             -- check is an owner, only owners can receive the presence
134
             local room = main_muc_service.get_room_from_jid(jid_bare(node .. '@' .. main_muc_component_config));
134
             local room = main_muc_service.get_room_from_jid(jid_bare(node .. '@' .. main_muc_component_config));
135
-            if room.get_affiliation(room, stanza.attr.to) == 'owner' then
135
+            if not room or room.get_affiliation(room, stanza.attr.to) == 'owner' then
136
                 return stanza;
136
                 return stanza;
137
             end
137
             end
138
 
138
 
159
     local lobby_room_jid = node .. '@' .. lobby_muc_component_config;
159
     local lobby_room_jid = node .. '@' .. lobby_muc_component_config;
160
     if not lobby_muc_service.get_room_from_jid(lobby_room_jid) then
160
     if not lobby_muc_service.get_room_from_jid(lobby_room_jid) then
161
         local new_room = lobby_muc_service.create_room(lobby_room_jid);
161
         local new_room = lobby_muc_service.create_room(lobby_room_jid);
162
+        -- set persistent the lobby room to avoid it to be destroyed
163
+        -- there are cases like when selecting new moderator after the current one leaves
164
+        -- which can leave the room with no occupants and it will be destroyed and we want to
165
+        -- avoid lobby destroy while it is enabled
166
+        new_room:set_persistent(true);
162
         module:log("debug","Lobby room jid = %s created",lobby_room_jid);
167
         module:log("debug","Lobby room jid = %s created",lobby_room_jid);
163
         new_room.main_room = room;
168
         new_room.main_room = room;
164
         room._data.lobbyroom = new_room;
169
         room._data.lobbyroom = new_room;
168
     return false
173
     return false
169
 end
174
 end
170
 
175
 
176
+-- destroys lobby room for the supplied main room
177
+function destroy_lobby_room(room, newjid, message)
178
+    if not message then
179
+        message = 'Lobby room closed.';
180
+    end
181
+    if room and room._data.lobbyroom then
182
+        room._data.lobbyroom:set_persistent(false);
183
+        room._data.lobbyroom:destroy(newjid, message);
184
+        room._data.lobbyroom = nil;
185
+    end
186
+end
187
+
171
 -- process a host module directly if loaded or hooks to wait for its load
188
 -- process a host module directly if loaded or hooks to wait for its load
172
 function process_host_module(name, callback)
189
 function process_host_module(name, callback)
173
     local function process_host(host)
190
     local function process_host(host)
280
                 notify_lobby_enabled(room, actor, true);
297
                 notify_lobby_enabled(room, actor, true);
281
             end
298
             end
282
         elseif room._data.lobbyroom then
299
         elseif room._data.lobbyroom then
283
-            room._data.lobbyroom:destroy(room.jid, 'Lobby room closed.');
284
-            room._data.lobbyroom = nil;
300
+            destroy_lobby_room(room, room.jid);
285
             notify_lobby_enabled(room, actor, false);
301
             notify_lobby_enabled(room, actor, false);
286
         end
302
         end
287
     end);
303
     end);
288
     host_module:hook('muc-room-destroyed',function(event)
304
     host_module:hook('muc-room-destroyed',function(event)
289
         local room = event.room;
305
         local room = event.room;
290
         if room._data.lobbyroom then
306
         if room._data.lobbyroom then
291
-            room._data.lobbyroom:destroy(nil, 'Lobby room closed.');
292
-            room._data.lobbyroom = nil;
307
+            destroy_lobby_room(room, nil);
293
         end
308
         end
294
     end);
309
     end);
295
     host_module:hook('muc-disco#info', function (event)
310
     host_module:hook('muc-disco#info', function (event)
399
     attach_lobby_room(room)
414
     attach_lobby_room(room)
400
 end
415
 end
401
 
416
 
417
+function handle_destroy_lobby(event)
418
+    destroy_lobby_room(event.room, event.newjid, event.message);
419
+end
420
+
402
 module:hook_global('bosh-session', update_session);
421
 module:hook_global('bosh-session', update_session);
403
 module:hook_global('websocket-session', update_session);
422
 module:hook_global('websocket-session', update_session);
404
 module:hook_global('config-reloaded', load_config);
423
 module:hook_global('config-reloaded', load_config);
405
 module:hook_global('create-lobby-room', handle_create_lobby);
424
 module:hook_global('create-lobby-room', handle_create_lobby);
425
+module:hook_global('destroy-lobby-room', handle_destroy_lobby);

Laddar…
Avbryt
Spara