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.js 1.6KB

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