| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | // @flow
import {
    setTransport,
    suspendDetected
} from './actions';
import { SUSPEND_DETECTED } from './actionTypes';
import {
    CONFERENCE_JOINED,
    CONFERENCE_LEFT
} from '../base/conference';
import { MiddlewareRegistry } from '../base/redux';
import {
    PostMessageTransportBackend,
    Transport
} from '../../../modules/transport';
import { destroyLocalTracks } from '../base/tracks';
declare var APP: Object;
MiddlewareRegistry.register(store => next => action => {
    const result = next(action);
    const { dispatch, getState } = store;
    switch (action.type) {
    case CONFERENCE_JOINED: {
        // listens for messages about suspend from power-monitor
        const transport = new Transport({
            backend: new PostMessageTransportBackend({
                postisOptions: { scope: 'jitsi-power-monitor' }
            })
        });
        transport.on('event', event => {
            if (event && event.name === 'power-monitor' && event.event === 'suspend') {
                dispatch(suspendDetected());
                return true;
            }
            return false;
        });
        dispatch(setTransport(transport));
        break;
    }
    case CONFERENCE_LEFT: {
        const { transport } = getState()['features/power-monitor'];
        if (transport) {
            transport.dispose();
        }
        dispatch(setTransport());
        break;
    }
    case SUSPEND_DETECTED: {
        dispatch(destroyLocalTracks());
        // FIXME: when refactoring conference.js
        APP.conference.onSuspendDetected();
        APP.API.notifySuspendDetected();
        break;
    }
    }
    return result;
});
 |