1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import { SET_CONFIG } from '../base/config';
- import { PersistenceRegistry, ReducerRegistry, set } from '../base/redux';
-
- import { SET_MAX_RECEIVER_VIDEO_QUALITY, SET_PREFERRED_VIDEO_QUALITY } from './actionTypes';
- import { VIDEO_QUALITY_LEVELS } from './constants';
- import { validateMinHeightForQualityLvl } from './functions';
- import logger from './logger';
-
- const DEFAULT_STATE = {
- maxReceiverVideoQuality: VIDEO_QUALITY_LEVELS.ULTRA,
- minHeightForQualityLvl: new Map(),
- preferredVideoQuality: VIDEO_QUALITY_LEVELS.ULTRA
- };
-
- DEFAULT_STATE.minHeightForQualityLvl.set(360, VIDEO_QUALITY_LEVELS.STANDARD);
- DEFAULT_STATE.minHeightForQualityLvl.set(720, VIDEO_QUALITY_LEVELS.HIGH);
-
-
- // When the persisted state is initialized the current state (for example the default state) is erased.
- // In order to workaround this issue we need additional state for the persisted properties.
- PersistenceRegistry.register('features/video-quality-persistent-storage');
-
- ReducerRegistry.register('features/video-quality-persistent-storage', (state = {}, action) => {
- switch (action.type) {
- case SET_PREFERRED_VIDEO_QUALITY: {
- const { preferredVideoQuality } = action;
-
- return {
- ...state,
- persistedPrefferedVideoQuality: preferredVideoQuality
- };
- }
- }
-
- return state;
- });
-
- ReducerRegistry.register('features/video-quality', (state = DEFAULT_STATE, action) => {
- switch (action.type) {
- case SET_CONFIG:
- return _setConfig(state, action);
- case SET_MAX_RECEIVER_VIDEO_QUALITY:
- return set(
- state,
- 'maxReceiverVideoQuality',
- action.maxReceiverVideoQuality);
- case SET_PREFERRED_VIDEO_QUALITY: {
- const { preferredVideoQuality } = action;
-
- return {
- ...state,
- preferredVideoQuality
- };
- }
- }
-
- return state;
- });
-
- /**
- * Extracts the height to quality level mapping from the new config.
- *
- * @param {Object} state - The Redux state of feature base/lastn.
- * @param {Action} action - The Redux action SET_CONFIG to reduce.
- * @private
- * @returns {Object} The new state after the reduction of the specified action.
- */
- function _setConfig(state, { config }) {
- const configuredMap = config?.videoQuality?.minHeightForQualityLvl;
- const convertedMap = validateMinHeightForQualityLvl(configuredMap);
-
- if (configuredMap && !convertedMap) {
- logger.error('Invalid config value videoQuality.minHeightForQualityLvl');
- }
-
- return convertedMap ? set(state, 'minHeightForQualityLvl', convertedMap) : state;
- }
|