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

middleware.js 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /* @flow */
  2. import { CONFERENCE_LEFT } from '../conference';
  3. import { MiddlewareRegistry } from '../redux';
  4. import { setTrackMuted, TRACK_ADDED } from '../tracks';
  5. import {
  6. setAudioMuted,
  7. setCameraFacingMode,
  8. setVideoMuted
  9. } from './actions';
  10. import { CAMERA_FACING_MODE } from './constants';
  11. /**
  12. * Middleware that captures CONFERENCE_LEFT action and restores initial state
  13. * for media devices. Also captures TRACK_ADDED to sync 'muted' state.
  14. *
  15. * @param {Store} store - Redux store.
  16. * @returns {Function}
  17. */
  18. MiddlewareRegistry.register(store => next => action => {
  19. const result = next(action);
  20. switch (action.type) {
  21. case CONFERENCE_LEFT:
  22. _resetInitialMediaState(store);
  23. break;
  24. case TRACK_ADDED:
  25. action.track.local && _syncTrackMutedState(store, action.track);
  26. break;
  27. }
  28. return result;
  29. });
  30. /**
  31. * Resets initial media state.
  32. *
  33. * @param {Store} store - Redux store.
  34. * @private
  35. * @returns {void}
  36. */
  37. function _resetInitialMediaState(store) {
  38. const { dispatch, getState } = store;
  39. const state = getState()['features/base/media'];
  40. state.audio.muted && dispatch(setAudioMuted(false));
  41. (state.video.facingMode !== CAMERA_FACING_MODE.USER)
  42. && dispatch(setCameraFacingMode(CAMERA_FACING_MODE.USER));
  43. state.video.muted && dispatch(setVideoMuted(false));
  44. }
  45. /**
  46. * Syncs muted state of local media track with muted state from media state.
  47. *
  48. * @param {Store} store - Redux store.
  49. * @param {Track} track - Local media track.
  50. * @private
  51. * @returns {void}
  52. */
  53. function _syncTrackMutedState(store, track) {
  54. const state = store.getState()['features/base/media'];
  55. const muted = state[track.mediaType].muted;
  56. // XXX If muted state of track when it was added is different from our media
  57. // muted state, we need to mute track and explicitly modify 'muted' property
  58. // on track. This is because though TRACK_ADDED action was dispatched it's
  59. // not yet in Redux state and JitsiTrackEvents.TRACK_MUTE_CHANGED may be
  60. // fired before track gets to state.
  61. if (track.muted !== muted) {
  62. track.muted = muted;
  63. setTrackMuted(track.jitsiTrack, muted);
  64. }
  65. }