jiti-meet/react/features/local-recording/middleware.js

97 lines
3.2 KiB
JavaScript
Raw Normal View History

/* @flow */
2018-07-18 22:21:05 +00:00
import { createShortcutEvent, sendAnalytics } from '../analytics';
import { APP_WILL_UNMOUNT } from '../base/app';
import { CONFERENCE_JOINED } from '../base/conference';
2018-07-18 22:12:25 +00:00
import { toggleDialog } from '../base/dialog';
import { i18next } from '../base/i18n';
2018-07-25 14:52:11 +00:00
import { SET_AUDIO_MUTED } from '../base/media';
import { MiddlewareRegistry } from '../base/redux';
import { SETTINGS_UPDATED } from '../base/settings/actionTypes';
import { showNotification } from '../notifications';
2018-07-09 18:09:14 +00:00
import { localRecordingEngaged, localRecordingUnengaged } from './actions';
2018-07-18 22:12:25 +00:00
import { LocalRecordingInfoDialog } from './components';
import { recordingController } from './controller';
2018-07-18 22:12:25 +00:00
declare var APP: Object;
MiddlewareRegistry.register(({ getState, dispatch }) => next => action => {
const result = next(action);
switch (action.type) {
case CONFERENCE_JOINED: {
2018-07-25 14:52:11 +00:00
const { localRecording } = getState()['features/base/config'];
const isLocalRecordingEnabled = Boolean(
localRecording
&& localRecording.enabled
&& typeof APP === 'object'
);
2018-07-25 14:52:11 +00:00
if (!isLocalRecordingEnabled) {
break;
2018-07-25 14:52:11 +00:00
}
2018-07-09 18:09:14 +00:00
// realize the delegates on recordingController, allowing the UI to
// react to state changes in recordingController.
2018-07-18 22:29:24 +00:00
recordingController.onStateChanged = isEngaged => {
2018-07-09 18:09:14 +00:00
if (isEngaged) {
2018-07-10 14:26:16 +00:00
const nowTime = new Date();
dispatch(localRecordingEngaged(nowTime));
2018-07-09 18:09:14 +00:00
} else {
dispatch(localRecordingUnengaged());
}
};
2018-07-18 22:21:05 +00:00
recordingController.onWarning = (messageKey, messageParams) => {
dispatch(showNotification({
title: i18next.t('localRecording.localRecording'),
2018-07-16 05:10:15 +00:00
description: i18next.t(messageKey, messageParams)
}, 10000));
};
2018-07-18 22:21:05 +00:00
recordingController.onNotify = (messageKey, messageParams) => {
dispatch(showNotification({
title: i18next.t('localRecording.localRecording'),
2018-07-16 05:10:15 +00:00
description: i18next.t(messageKey, messageParams)
}, 10000));
};
2018-07-18 22:12:25 +00:00
2018-08-01 01:43:56 +00:00
typeof APP === 'object' && typeof APP.keyboardshortcut === 'object'
&& APP.keyboardshortcut.registerShortcut('L', null, () => {
sendAnalytics(createShortcutEvent('local.recording'));
dispatch(toggleDialog(LocalRecordingInfoDialog));
}, 'keyboardShortcuts.localRecording');
if (localRecording.format) {
recordingController.switchFormat(localRecording.format);
}
const { conference } = getState()['features/base/conference'];
recordingController.registerEvents(conference);
break;
}
case APP_WILL_UNMOUNT:
recordingController.onStateChanged = null;
recordingController.onNotify = null;
recordingController.onWarning = null;
break;
2018-07-25 14:52:11 +00:00
case SET_AUDIO_MUTED:
recordingController.setMuted(action.muted);
break;
case SETTINGS_UPDATED: {
const { micDeviceId } = getState()['features/base/settings'];
if (micDeviceId) {
recordingController.setMicDevice(micDeviceId);
}
break;
}
}
return result;
});