ソースを参照

fix(breakout-rooms) make sure the default name is monotonically increasing

master
Saúl Ibarra Corretgé 3年前
コミット
4a5982da1f

+ 5
- 0
react/features/breakout-rooms/actionTypes.js ファイルの表示

@@ -5,3 +5,8 @@
5 5
   *
6 6
   */
7 7
 export const UPDATE_BREAKOUT_ROOMS = 'UPDATE_BREAKOUT_ROOMS';
8
+
9
+/**
10
+ * The type of (redux) action to update the room counter locally.
11
+ */
12
+export const _UPDATE_ROOM_COUNTER = '_UPDATE_ROOM_COUNTER';

+ 11
- 6
react/features/breakout-rooms/actions.js ファイルの表示

@@ -15,6 +15,8 @@ import { setAudioMuted, setVideoMuted } from '../base/media';
15 15
 import { getRemoteParticipants } from '../base/participants';
16 16
 import { clearNotifications } from '../notifications';
17 17
 
18
+import { _UPDATE_ROOM_COUNTER } from './actionTypes';
19
+import { FEATURE_KEY } from './constants';
18 20
 import {
19 21
     getBreakoutRooms,
20 22
     getMainRoom
@@ -31,16 +33,19 @@ declare var APP: Object;
31 33
  */
32 34
 export function createBreakoutRoom(name?: string) {
33 35
     return (dispatch: Dispatch<any>, getState: Function) => {
34
-        const rooms = getBreakoutRooms(getState);
35
-
36
-        // TODO: remove this once we add UI to customize the name.
37
-        const index = Object.keys(rooms).length;
38
-        const subject = name || i18next.t('breakoutRooms.defaultName', { index });
36
+        const state = getState();
37
+        let { roomCounter } = state[FEATURE_KEY];
38
+        const subject = name || i18next.t('breakoutRooms.defaultName', { index: ++roomCounter });
39 39
 
40 40
         sendAnalytics(createBreakoutRoomsEvent('create'));
41 41
 
42
+        dispatch({
43
+            type: _UPDATE_ROOM_COUNTER,
44
+            roomCounter
45
+        });
46
+
42 47
         // $FlowExpectedError
43
-        getCurrentConference(getState)?.getBreakoutRooms()
48
+        getCurrentConference(state)?.getBreakoutRooms()
44 49
             ?.createBreakoutRoom(subject);
45 50
     };
46 51
 }

+ 3
- 2
react/features/breakout-rooms/middleware.js ファイルの表示

@@ -20,11 +20,12 @@ StateListenerRegistry.register(
20 20
                 dispatch(moveToRoom(roomId));
21 21
             });
22 22
 
23
-            conference.on(JitsiConferenceEvents.BREAKOUT_ROOMS_UPDATED, rooms => {
23
+            conference.on(JitsiConferenceEvents.BREAKOUT_ROOMS_UPDATED, ({ rooms, roomCounter }) => {
24 24
                 logger.debug('Room list updated');
25 25
                 dispatch({
26 26
                     type: UPDATE_BREAKOUT_ROOMS,
27
-                    rooms
27
+                    rooms,
28
+                    roomCounter
28 29
                 });
29 30
             });
30 31
         }

+ 17
- 4
react/features/breakout-rooms/reducer.js ファイルの表示

@@ -2,20 +2,33 @@
2 2
 
3 3
 import { ReducerRegistry } from '../base/redux';
4 4
 
5
-import { UPDATE_BREAKOUT_ROOMS } from './actionTypes';
5
+import {
6
+    _UPDATE_ROOM_COUNTER,
7
+    UPDATE_BREAKOUT_ROOMS
8
+} from './actionTypes';
6 9
 import { FEATURE_KEY } from './constants';
7 10
 
11
+const DEFAULT_STATE = {
12
+    rooms: {},
13
+    roomCounter: 0
14
+};
15
+
8 16
 /**
9 17
  * Listen for actions for the breakout-rooms feature.
10 18
  */
11
-ReducerRegistry.register(FEATURE_KEY, (state = { rooms: {} }, action) => {
19
+ReducerRegistry.register(FEATURE_KEY, (state = DEFAULT_STATE, action) => {
12 20
     switch (action.type) {
21
+    case _UPDATE_ROOM_COUNTER:
22
+        return {
23
+            ...state,
24
+            roomCounter: action.roomCounter
25
+        };
13 26
     case UPDATE_BREAKOUT_ROOMS: {
14
-        const { nextIndex, rooms } = action;
27
+        const { roomCounter, rooms } = action;
15 28
 
16 29
         return {
17 30
             ...state,
18
-            nextIndex,
31
+            roomCounter,
19 32
             rooms
20 33
         };
21 34
     }

+ 3
- 0
resources/prosody-plugins/mod_muc_breakout_rooms.lua ファイルの表示

@@ -11,11 +11,6 @@
11 11
 -- Component "breakout.jitmeet.example.com" "muc"
12 12
 --     restrict_room_creation = true
13 13
 --     storage = "memory"
14 14
 --     admins = { "focusUser@auth.jitmeet.example.com" }
15 15
 --     muc_room_locking = false
16 16
 --     muc_room_default_public_jids = true
@@ -161,6 +156,7 @@ function broadcast_breakout_rooms(room_jid)
161 156
         local json_msg = json.encode({
162 157
             type = BREAKOUT_ROOMS_IDENTITY_TYPE,
163 158
             event = JSON_TYPE_UPDATE_BREAKOUT_ROOMS,
159
+            roomCounter = main_room._data.breakout_rooms_counter,
164 160
             rooms = rooms
165 161
         });
166 162
 
@@ -192,7 +188,9 @@ function create_breakout_room(room_jid, subject)
192 188
 
193 189
     if not main_room._data.breakout_rooms then
194 190
         main_room._data.breakout_rooms = {};
191
+        main_room._data.breakout_rooms_counter = 0;
195 192
     end
193
+    main_room._data.breakout_rooms_counter = main_room._data.breakout_rooms_counter + 1;
196 194
     main_room._data.breakout_rooms[breakout_room_jid] = subject;
197 195
     main_room._data.breakout_rooms_active = true;
198 196
     -- Make room persistent - not to be destroyed - if all participants join breakout rooms.

読み込み中…
キャンセル
保存