Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

middleware.js 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /* @flow */
  2. import { CONFERENCE_WILL_JOIN } from '../base/conference';
  3. import {
  4. JitsiConferenceEvents,
  5. JitsiRecordingConstants
  6. } from '../base/lib-jitsi-meet';
  7. import { MiddlewareRegistry } from '../base/redux';
  8. import {
  9. playSound,
  10. registerSound,
  11. stopSound,
  12. unregisterSound
  13. } from '../base/sounds';
  14. import { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';
  15. import { updateRecordingSessionData } from './actions';
  16. import { RECORDING_SESSION_UPDATED } from './actionTypes';
  17. import { RECORDING_OFF_SOUND_ID, RECORDING_ON_SOUND_ID } from './constants';
  18. import { getSessionById } from './functions';
  19. import {
  20. RECORDING_OFF_SOUND_FILE,
  21. RECORDING_ON_SOUND_FILE
  22. } from './sounds';
  23. /**
  24. * The redux middleware to handle the recorder updates in a React way.
  25. *
  26. * @param {Store} store - The redux store.
  27. * @returns {Function}
  28. */
  29. MiddlewareRegistry.register(store => next => action => {
  30. let oldSessionData;
  31. if (action.type === RECORDING_SESSION_UPDATED) {
  32. oldSessionData
  33. = getSessionById(store.getState(), action.sessionData.id);
  34. }
  35. const result = next(action);
  36. switch (action.type) {
  37. case APP_WILL_MOUNT:
  38. store.dispatch(registerSound(
  39. RECORDING_OFF_SOUND_ID,
  40. RECORDING_OFF_SOUND_FILE));
  41. store.dispatch(registerSound(
  42. RECORDING_ON_SOUND_ID,
  43. RECORDING_ON_SOUND_FILE));
  44. break;
  45. case APP_WILL_UNMOUNT:
  46. store.dispatch(unregisterSound(RECORDING_OFF_SOUND_ID));
  47. store.dispatch(unregisterSound(RECORDING_ON_SOUND_ID));
  48. break;
  49. case CONFERENCE_WILL_JOIN: {
  50. const { conference } = action;
  51. conference.on(
  52. JitsiConferenceEvents.RECORDER_STATE_CHANGED,
  53. recorderSession => {
  54. if (recorderSession && recorderSession.getID()) {
  55. store.dispatch(
  56. updateRecordingSessionData(recorderSession));
  57. return;
  58. }
  59. });
  60. break;
  61. }
  62. case RECORDING_SESSION_UPDATED: {
  63. const updatedSessionData
  64. = getSessionById(store.getState(), action.sessionData.id);
  65. if (updatedSessionData.mode === JitsiRecordingConstants.mode.FILE) {
  66. const { OFF, ON } = JitsiRecordingConstants.status;
  67. if (updatedSessionData.status === ON
  68. && (!oldSessionData || oldSessionData.status !== ON)) {
  69. store.dispatch(playSound(RECORDING_ON_SOUND_ID));
  70. } else if (updatedSessionData.status === OFF
  71. && (!oldSessionData || oldSessionData.status !== OFF)) {
  72. store.dispatch(stopSound(RECORDING_ON_SOUND_ID));
  73. store.dispatch(playSound(RECORDING_OFF_SOUND_ID));
  74. }
  75. }
  76. break;
  77. }
  78. }
  79. return result;
  80. });