You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

middleware.ts 2.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import {
  2. HIDDEN_PARTICIPANT_JOINED,
  3. HIDDEN_PARTICIPANT_LEFT,
  4. PARTICIPANT_UPDATED
  5. } from '../base/participants/actionTypes';
  6. import MiddlewareRegistry from '../base/redux/MiddlewareRegistry';
  7. import { toggleRequestingSubtitles } from '../subtitles/actions.any';
  8. import {
  9. _TRANSCRIBER_JOINED,
  10. _TRANSCRIBER_LEFT
  11. } from './actionTypes';
  12. import {
  13. hidePendingTranscribingNotification,
  14. potentialTranscriberJoined,
  15. showStoppedTranscribingNotification,
  16. transcriberJoined,
  17. transcriberLeft
  18. } from './actions';
  19. const TRANSCRIBER_DISPLAY_NAME = 'Transcriber';
  20. /**
  21. * Implements the middleware of the feature transcribing.
  22. *
  23. * @param {Store} store - The redux store.
  24. * @returns {Function}
  25. */
  26. // eslint-disable-next-line no-unused-vars
  27. MiddlewareRegistry.register(store => next => action => {
  28. const {
  29. transcriberJID,
  30. potentialTranscriberJIDs
  31. } = store.getState()['features/transcribing'];
  32. switch (action.type) {
  33. case _TRANSCRIBER_LEFT: {
  34. store.dispatch(showStoppedTranscribingNotification());
  35. const state = store.getState();
  36. const { transcription } = state['features/base/config'];
  37. const { _requestingSubtitles } = state['features/subtitles'];
  38. if (_requestingSubtitles && !transcription?.disableStartForAll) {
  39. store.dispatch(toggleRequestingSubtitles());
  40. }
  41. break;
  42. }
  43. case HIDDEN_PARTICIPANT_JOINED:
  44. if (action.displayName
  45. && action.displayName === TRANSCRIBER_DISPLAY_NAME) {
  46. store.dispatch(transcriberJoined(action.id));
  47. } else {
  48. store.dispatch(potentialTranscriberJoined(action.id));
  49. }
  50. break;
  51. case HIDDEN_PARTICIPANT_LEFT:
  52. if (action.id === transcriberJID) {
  53. store.dispatch(transcriberLeft(action.id));
  54. }
  55. break;
  56. case PARTICIPANT_UPDATED: {
  57. const { participant } = action;
  58. if (potentialTranscriberJIDs.includes(participant.id)
  59. && participant.name === TRANSCRIBER_DISPLAY_NAME) {
  60. store.dispatch(transcriberJoined(participant.id));
  61. store.dispatch(hidePendingTranscribingNotification());
  62. }
  63. break;
  64. }
  65. case _TRANSCRIBER_JOINED: {
  66. const state = store.getState();
  67. const { transcription } = state['features/base/config'];
  68. const { _requestingSubtitles } = state['features/subtitles'];
  69. if (!_requestingSubtitles && !transcription?.disableStartForAll) {
  70. store.dispatch(toggleRequestingSubtitles());
  71. }
  72. break;
  73. }
  74. }
  75. return next(action);
  76. });