123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import { createDeviceChangedEvent, sendAnalytics } from '../analytics';
- import {
- getDeviceLabelById,
- setAudioInputDevice,
- setAudioOutputDeviceId,
- setVideoInputDevice
- } from '../base/devices';
- import { isIosMobileBrowser } from '../base/environment/utils';
- import { browser } from '../base/lib-jitsi-meet';
- import { updateSettings } from '../base/settings';
-
- import { getDeviceSelectionDialogProps } from './functions';
- import logger from './logger';
-
- /**
- * Submits the settings related to device selection.
- *
- * @param {Object} newState - The new settings.
- * @returns {Function}
- */
- export function submitDeviceSelectionTab(newState) {
- // Always use the new track for mobile Safari because of https://bugs.webkit.org/show_bug.cgi?id=179363#c30. The
- // old track is stopped by the browser when a new track is created for preview so it needs to be replaced even if
- // the device selection doesn't change.
- const replaceTrackAlways = isIosMobileBrowser() && browser.isVersionGreaterThan('15.3');
-
- return (dispatch, getState) => {
- const currentState = getDeviceSelectionDialogProps(getState());
-
- if ((newState.selectedVideoInputId && (newState.selectedVideoInputId !== currentState.selectedVideoInputId))
- || replaceTrackAlways) {
- dispatch(updateSettings({
- userSelectedCameraDeviceId: newState.selectedVideoInputId,
- userSelectedCameraDeviceLabel:
- getDeviceLabelById(getState(), newState.selectedVideoInputId, 'videoInput')
- }));
-
- dispatch(setVideoInputDevice(newState.selectedVideoInputId));
- }
-
- if ((newState.selectedAudioInputId && newState.selectedAudioInputId !== currentState.selectedAudioInputId)
- || replaceTrackAlways) {
- dispatch(updateSettings({
- userSelectedMicDeviceId: newState.selectedAudioInputId,
- userSelectedMicDeviceLabel:
- getDeviceLabelById(getState(), newState.selectedAudioInputId, 'audioInput')
- }));
-
- dispatch(setAudioInputDevice(newState.selectedAudioInputId));
- }
-
- if (newState.selectedAudioOutputId
- && newState.selectedAudioOutputId
- !== currentState.selectedAudioOutputId) {
- sendAnalytics(createDeviceChangedEvent('audio', 'output'));
-
- setAudioOutputDeviceId(
- newState.selectedAudioOutputId,
- dispatch,
- true,
- getDeviceLabelById(getState(), newState.selectedAudioOutputId, 'audioOutput'))
- .then(() => logger.log('changed audio output device'))
- .catch(err => {
- logger.warn(
- 'Failed to change audio output device.',
- 'Default or previously set audio output device will',
- ' be used instead.',
- err);
- });
- }
- };
- }
|