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

middleware.js 2.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // @flow
  2. import { CONFERENCE_FAILED, CONFERENCE_JOINED } from '../base/conference';
  3. import { SET_AUDIO_MUTED, SET_VIDEO_MUTED } from '../base/media';
  4. import { MiddlewareRegistry } from '../base/redux';
  5. import { updateSettings } from '../base/settings';
  6. import {
  7. TRACK_ADDED,
  8. TRACK_NO_DATA_FROM_SOURCE
  9. } from '../base/tracks';
  10. import {
  11. setDeviceStatusOk,
  12. setDeviceStatusWarning,
  13. setJoiningInProgress,
  14. setPrejoinPageVisibility
  15. } from './actions';
  16. import { isPrejoinPageVisible } from './functions';
  17. /**
  18. * The redux middleware for {@link PrejoinPage}.
  19. *
  20. * @param {Store} store - The redux store.
  21. * @returns {Function}
  22. */
  23. MiddlewareRegistry.register(store => next => async action => {
  24. switch (action.type) {
  25. case SET_AUDIO_MUTED: {
  26. if (isPrejoinPageVisible(store.getState())) {
  27. store.dispatch(updateSettings({
  28. startWithAudioMuted: Boolean(action.muted)
  29. }));
  30. }
  31. break;
  32. }
  33. case SET_VIDEO_MUTED: {
  34. if (isPrejoinPageVisible(store.getState())) {
  35. store.dispatch(updateSettings({
  36. startWithVideoMuted: Boolean(action.muted)
  37. }));
  38. }
  39. break;
  40. }
  41. case TRACK_ADDED:
  42. case TRACK_NO_DATA_FROM_SOURCE: {
  43. const state = store.getState();
  44. if (isPrejoinPageVisible(state)) {
  45. const { track: { jitsiTrack: track } } = action;
  46. const { deviceStatusType, deviceStatusText } = state['features/prejoin'];
  47. if (!track.isAudioTrack()) {
  48. break;
  49. }
  50. if (track.isReceivingData()) {
  51. if (deviceStatusType === 'warning'
  52. && deviceStatusText === 'prejoin.audioDeviceProblem') {
  53. store.dispatch(setDeviceStatusOk('prejoin.lookGood'));
  54. }
  55. } else if (deviceStatusType === 'ok') {
  56. store.dispatch(setDeviceStatusWarning('prejoin.audioDeviceProblem'));
  57. }
  58. }
  59. break;
  60. }
  61. case CONFERENCE_FAILED:
  62. store.dispatch(setJoiningInProgress(false));
  63. break;
  64. case CONFERENCE_JOINED:
  65. return _conferenceJoined(store, next, action);
  66. }
  67. return next(action);
  68. });
  69. /**
  70. * Handles cleanup of prejoin state when a conference is joined.
  71. *
  72. * @param {Object} store - The Redux store.
  73. * @param {Function} next - The Redux next function.
  74. * @param {Object} action - The Redux action.
  75. * @returns {Object}
  76. */
  77. function _conferenceJoined({ dispatch }, next, action) {
  78. dispatch(setPrejoinPageVisibility(false));
  79. dispatch(setJoiningInProgress(false));
  80. return next(action);
  81. }