102 lines
2.8 KiB
JavaScript
102 lines
2.8 KiB
JavaScript
/* @flow */
|
|
|
|
import { CONFERENCE_WILL_JOIN } from '../base/conference';
|
|
import {
|
|
JitsiConferenceEvents,
|
|
JitsiRecordingConstants
|
|
} from '../base/lib-jitsi-meet';
|
|
import { MiddlewareRegistry } from '../base/redux';
|
|
import {
|
|
playSound,
|
|
registerSound,
|
|
stopSound,
|
|
unregisterSound
|
|
} from '../base/sounds';
|
|
|
|
import { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';
|
|
|
|
import { updateRecordingSessionData } from './actions';
|
|
import { RECORDING_SESSION_UPDATED } from './actionTypes';
|
|
import { RECORDING_OFF_SOUND_ID, RECORDING_ON_SOUND_ID } from './constants';
|
|
import { getSessionById } from './functions';
|
|
import {
|
|
RECORDING_OFF_SOUND_FILE,
|
|
RECORDING_ON_SOUND_FILE
|
|
} from './sounds';
|
|
|
|
/**
|
|
* The redux middleware to handle the recorder updates in a React way.
|
|
*
|
|
* @param {Store} store - The redux store.
|
|
* @returns {Function}
|
|
*/
|
|
MiddlewareRegistry.register(store => next => action => {
|
|
let oldSessionData;
|
|
|
|
if (action.type === RECORDING_SESSION_UPDATED) {
|
|
oldSessionData
|
|
= getSessionById(store.getState(), action.sessionData.id);
|
|
}
|
|
|
|
const result = next(action);
|
|
|
|
switch (action.type) {
|
|
case APP_WILL_MOUNT:
|
|
store.dispatch(registerSound(
|
|
RECORDING_OFF_SOUND_ID,
|
|
RECORDING_OFF_SOUND_FILE));
|
|
|
|
store.dispatch(registerSound(
|
|
RECORDING_ON_SOUND_ID,
|
|
RECORDING_ON_SOUND_FILE));
|
|
|
|
break;
|
|
|
|
case APP_WILL_UNMOUNT:
|
|
store.dispatch(unregisterSound(RECORDING_OFF_SOUND_ID));
|
|
store.dispatch(unregisterSound(RECORDING_ON_SOUND_ID));
|
|
|
|
break;
|
|
|
|
case CONFERENCE_WILL_JOIN: {
|
|
const { conference } = action;
|
|
|
|
conference.on(
|
|
JitsiConferenceEvents.RECORDER_STATE_CHANGED,
|
|
recorderSession => {
|
|
|
|
if (recorderSession && recorderSession.getID()) {
|
|
store.dispatch(
|
|
updateRecordingSessionData(recorderSession));
|
|
|
|
return;
|
|
}
|
|
});
|
|
|
|
break;
|
|
}
|
|
|
|
case RECORDING_SESSION_UPDATED: {
|
|
const updatedSessionData
|
|
= getSessionById(store.getState(), action.sessionData.id);
|
|
|
|
if (updatedSessionData.mode === JitsiRecordingConstants.mode.FILE) {
|
|
const { OFF, ON } = JitsiRecordingConstants.status;
|
|
|
|
if (updatedSessionData.status === ON
|
|
&& (!oldSessionData || oldSessionData.status !== ON)) {
|
|
store.dispatch(playSound(RECORDING_ON_SOUND_ID));
|
|
} else if (updatedSessionData.status === OFF
|
|
&& (!oldSessionData || oldSessionData.status !== OFF)) {
|
|
store.dispatch(stopSound(RECORDING_ON_SOUND_ID));
|
|
store.dispatch(playSound(RECORDING_OFF_SOUND_ID));
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
});
|