您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

middleware.js 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // @flow
  2. import { JitsiConferenceEvents } from '../base/lib-jitsi-meet';
  3. import { getParticipantById } from '../base/participants';
  4. import { MiddlewareRegistry, StateListenerRegistry } from '../base/redux';
  5. import { editMessage, MESSAGE_TYPE_REMOTE } from '../chat';
  6. import { UPDATE_BREAKOUT_ROOMS } from './actionTypes';
  7. import { moveToRoom } from './actions';
  8. import { getBreakoutRooms } from './functions';
  9. import logger from './logger';
  10. /**
  11. * Registers a change handler for state['features/base/conference'].conference to
  12. * set the event listeners needed for the breakout rooms feature to operate.
  13. */
  14. StateListenerRegistry.register(
  15. state => state['features/base/conference'].conference,
  16. (conference, { dispatch }, previousConference) => {
  17. if (conference && !previousConference) {
  18. conference.on(JitsiConferenceEvents.BREAKOUT_ROOMS_MOVE_TO_ROOM, roomId => {
  19. logger.debug(`Moving to room: ${roomId}`);
  20. dispatch(moveToRoom(roomId));
  21. });
  22. conference.on(JitsiConferenceEvents.BREAKOUT_ROOMS_UPDATED, ({ rooms, roomCounter }) => {
  23. logger.debug('Room list updated');
  24. dispatch({
  25. type: UPDATE_BREAKOUT_ROOMS,
  26. rooms,
  27. roomCounter
  28. });
  29. });
  30. }
  31. });
  32. MiddlewareRegistry.register(({ dispatch, getState }) => next => action => {
  33. const { type } = action;
  34. const result = next(action);
  35. switch (type) {
  36. case UPDATE_BREAKOUT_ROOMS: {
  37. const { messages } = getState()['features/chat'];
  38. // edit the chat history to match names for participants in breakout rooms
  39. messages && messages.forEach(m => {
  40. if (m.messageType === MESSAGE_TYPE_REMOTE && !getParticipantById(getState(), m.id)) {
  41. const rooms = getBreakoutRooms(getState);
  42. for (const room of Object.values(rooms)) {
  43. // $FlowExpectedError
  44. const participants = room.participants || {};
  45. const matchedJid = Object.keys(participants).find(jid => jid.endsWith(m.id));
  46. if (matchedJid) {
  47. m.displayName = participants[matchedJid].displayName;
  48. dispatch(editMessage(m));
  49. }
  50. }
  51. }
  52. });
  53. break;
  54. }
  55. }
  56. return result;
  57. });