| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 | // @flow
import Logger from 'jitsi-meet-logger';
const logger = Logger.getLogger(__filename);
/**
 * Returns Promise that resolves with result an list of available devices.
 *
 * @param {Transport} transport - The @code{Transport} instance responsible for
 * the external communication.
 * @returns {Promise}
 */
export function getAvailableDevices(transport: Object) {
    return transport.sendRequest({
        type: 'devices',
        name: 'getAvailableDevices'
    }).catch(e => {
        logger.error(e);
        return {};
    });
}
/**
 * Returns Promise that resolves with current selected devices.
 *
 * @param {Transport} transport - The @code{Transport} instance responsible for
 * the external communication.
 * @returns {Promise}
 */
export function getCurrentDevices(transport: Object) {
    return transport.sendRequest({
        type: 'devices',
        name: 'getCurrentDevices'
    }).catch(e => {
        logger.error(e);
        return {};
    });
}
/**
 * Returns Promise that resolves with true if the device change is available
 * and with false if not.
 *
 * @param {Transport} transport - The @code{Transport} instance responsible for
 * the external communication.
 * @param {string} [deviceType] - Values - 'output', 'input' or undefined.
 * Default - 'input'.
 * @returns {Promise}
 */
export function isDeviceChangeAvailable(transport: Object, deviceType: string) {
    return transport.sendRequest({
        deviceType,
        type: 'devices',
        name: 'isDeviceChangeAvailable'
    });
}
/**
 * Returns Promise that resolves with true if the device list is available
 * and with false if not.
 *
 * @param {Transport} transport - The @code{Transport} instance responsible for
 * the external communication.
 * @returns {Promise}
 */
export function isDeviceListAvailable(transport: Object) {
    return transport.sendRequest({
        type: 'devices',
        name: 'isDeviceListAvailable'
    });
}
/**
 * Returns Promise that resolves with true if multiple audio input is supported
 * and with false if not.
 *
 * @param {Transport} transport - The @code{Transport} instance responsible for
 * the external communication.
 * @returns {Promise}
 */
export function isMultipleAudioInputSupported(transport: Object) {
    return transport.sendRequest({
        type: 'devices',
        name: 'isMultipleAudioInputSupported'
    });
}
/**
 * Sets the audio input device to the one with the label or id that is passed.
 *
 * @param {Transport} transport - The @code{Transport} instance responsible for
 * the external communication.
 * @param {string} label - The label of the new device.
 * @param {string} id - The id of the new device.
 * @returns {Promise}
 */
export function setAudioInputDevice(transport: Object, label: string, id: string) {
    return _setDevice(transport, {
        id,
        kind: 'audioinput',
        label
    });
}
/**
 * Sets the audio output device to the one with the label or id that is passed.
 *
 * @param {Transport} transport - The @code{Transport} instance responsible for
 * the external communication.
 * @param {string} label - The label of the new device.
 * @param {string} id - The id of the new device.
 * @returns {Promise}
 */
export function setAudioOutputDevice(transport: Object, label: string, id: string) {
    return _setDevice(transport, {
        id,
        kind: 'audiooutput',
        label
    });
}
/**
 * Sets the currently used device to the one that is passed.
 *
 * @param {Transport} transport - The @code{Transport} instance responsible for
 * the external communication.
 * @param {Object} device - The new device to be used.
 * @returns {Promise}
 */
function _setDevice(transport: Object, device) {
    return transport.sendRequest({
        type: 'devices',
        name: 'setDevice',
        device
    });
}
/**
 * Sets the video input device to the one with the label or id that is passed.
 *
 * @param {Transport} transport - The @code{Transport} instance responsible for
 * the external communication.
 * @param {string} label - The label of the new device.
 * @param {string} id - The id of the new device.
 * @returns {Promise}
 */
export function setVideoInputDevice(transport: Object, label: string, id: string) {
    return _setDevice(transport, {
        id,
        kind: 'videoinput',
        label
    });
}
 |