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.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // @ts-expect-error
  2. import { PostMessageTransportBackend, Transport } from '../../../modules/transport';
  3. import {
  4. CONFERENCE_JOINED,
  5. CONFERENCE_LEFT
  6. } from '../base/conference/actionTypes';
  7. import MiddlewareRegistry from '../base/redux/MiddlewareRegistry';
  8. import { destroyLocalTracks } from '../base/tracks/actions';
  9. import { SUSPEND_DETECTED } from './actionTypes';
  10. import {
  11. setTransport,
  12. suspendDetected
  13. } from './actions';
  14. MiddlewareRegistry.register(store => next => action => {
  15. const result = next(action);
  16. const { dispatch, getState } = store;
  17. switch (action.type) {
  18. case CONFERENCE_JOINED: {
  19. // listens for messages about suspend from power-monitor
  20. const transport = new Transport({
  21. backend: new PostMessageTransportBackend({
  22. postisOptions: { scope: 'jitsi-power-monitor' }
  23. })
  24. });
  25. transport.on('event', (event: { event: string; name: string; }) => {
  26. if (event && event.name === 'power-monitor' && event.event === 'suspend') {
  27. dispatch(suspendDetected());
  28. return true;
  29. }
  30. return false;
  31. });
  32. dispatch(setTransport(transport));
  33. break;
  34. }
  35. case CONFERENCE_LEFT: {
  36. const { transport } = getState()['features/power-monitor'];
  37. if (transport) {
  38. transport.dispose();
  39. }
  40. dispatch(setTransport());
  41. break;
  42. }
  43. case SUSPEND_DETECTED: {
  44. dispatch(destroyLocalTracks());
  45. // FIXME: when refactoring conference.js
  46. APP.conference.onSuspendDetected();
  47. APP.API.notifySuspendDetected();
  48. break;
  49. }
  50. }
  51. return result;
  52. });