Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

middleware.native.js 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // @flow
  2. import { setPictureInPictureDisabled } from '../../mobile/picture-in-picture/functions';
  3. import { setAudioOnly } from '../audio-only';
  4. import JitsiMeetJS from '../lib-jitsi-meet';
  5. import { MiddlewareRegistry } from '../redux';
  6. import { TOGGLE_SCREENSHARING } from '../tracks/actionTypes';
  7. import { destroyLocalDesktopTrackIfExists, replaceLocalTrack } from '../tracks/actions';
  8. import { getLocalVideoTrack, isLocalVideoTrackDesktop } from '../tracks/functions';
  9. import './middleware.any';
  10. MiddlewareRegistry.register(store => next => action => {
  11. switch (action.type) {
  12. case TOGGLE_SCREENSHARING: {
  13. _toggleScreenSharing(action.enabled, store);
  14. break;
  15. }
  16. }
  17. return next(action);
  18. });
  19. /**
  20. * Toggles screen sharing.
  21. *
  22. * @private
  23. * @param {boolean} enabled - The state to toggle screen sharing to.
  24. * @param {Store} store - The redux.
  25. * @returns {void}
  26. */
  27. function _toggleScreenSharing(enabled, store) {
  28. const { dispatch, getState } = store;
  29. const state = getState();
  30. if (enabled) {
  31. const isSharing = isLocalVideoTrackDesktop(state);
  32. if (!isSharing) {
  33. _startScreenSharing(dispatch, state);
  34. }
  35. } else {
  36. dispatch(destroyLocalDesktopTrackIfExists());
  37. setPictureInPictureDisabled(false);
  38. }
  39. }
  40. /**
  41. * Creates desktop track and replaces the local one.
  42. *
  43. * @private
  44. * @param {Dispatch} dispatch - The redux {@code dispatch} function.
  45. * @param {Object} state - The redux state.
  46. * @returns {void}
  47. */
  48. function _startScreenSharing(dispatch, state) {
  49. setPictureInPictureDisabled(true);
  50. JitsiMeetJS.createLocalTracks({ devices: [ 'desktop' ] })
  51. .then(tracks => {
  52. const track = tracks[0];
  53. const currentLocalTrack = getLocalVideoTrack(state['features/base/tracks']);
  54. const currentJitsiTrack = currentLocalTrack && currentLocalTrack.jitsiTrack;
  55. dispatch(replaceLocalTrack(currentJitsiTrack, track));
  56. const { enabled: audioOnly } = state['features/base/audio-only'];
  57. if (audioOnly) {
  58. dispatch(setAudioOnly(false));
  59. }
  60. })
  61. .catch(error => {
  62. console.log('ERROR creating ScreeSharing stream ', error);
  63. setPictureInPictureDisabled(false);
  64. });
  65. }