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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // @flow
  2. import {
  3. PostMessageTransportBackend,
  4. Transport
  5. } from '../../../modules/transport';
  6. import {
  7. CONFERENCE_JOINED,
  8. CONFERENCE_LEFT
  9. } from '../base/conference';
  10. import { MiddlewareRegistry } from '../base/redux';
  11. import { destroyLocalTracks } from '../base/tracks';
  12. import { SUSPEND_DETECTED } from './actionTypes';
  13. import {
  14. setTransport,
  15. suspendDetected
  16. } from './actions';
  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. });