| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | 
							- // @flow
 - 
 - import { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from '../app';
 - import {
 -     getParticipantById,
 -     PARTICIPANT_UPDATED,
 -     PARTICIPANT_LEFT
 - } from '../base/participants';
 - import { MiddlewareRegistry } from '../base/redux';
 - import {
 -     playSound,
 -     registerSound,
 -     stopSound,
 -     unregisterSound
 - } from '../base/sounds';
 - import {
 -     CALLING,
 -     INVITED,
 -     RINGING
 - } from '../presence-status';
 - 
 - import { UPDATE_DIAL_IN_NUMBERS_FAILED } from './actionTypes';
 - import {
 -     OUTGOING_CALL_START_SOUND_ID,
 -     OUTGOING_CALL_RINGING_SOUND_ID
 - } from './constants';
 - import {
 -     OUTGOING_CALL_START_FILE,
 -     OUTGOING_CALL_RINGING_FILE
 - } from './sounds';
 - 
 - const logger = require('jitsi-meet-logger').getLogger(__filename);
 - 
 - declare var interfaceConfig: Object;
 - 
 - /**
 -  * The middleware of the feature invite common to mobile/react-native and
 -  * Web/React.
 -  *
 -  * @param {Store} store - The redux store.
 -  * @returns {Function}
 -  */
 - MiddlewareRegistry.register(store => next => action => {
 -     let oldParticipantPresence;
 - 
 -     if (action.type === PARTICIPANT_UPDATED
 -         || action.type === PARTICIPANT_LEFT) {
 -         oldParticipantPresence
 -             = _getParticipantPresence(store.getState(), action.participant.id);
 -     }
 - 
 -     const result = next(action);
 - 
 -     switch (action.type) {
 -     case APP_WILL_MOUNT:
 -         store.dispatch(
 -             registerSound(
 -                 OUTGOING_CALL_START_SOUND_ID,
 -                 OUTGOING_CALL_START_FILE));
 - 
 -         store.dispatch(
 -             registerSound(
 -                 OUTGOING_CALL_RINGING_SOUND_ID,
 -                 OUTGOING_CALL_RINGING_FILE,
 -                 { loop: true }));
 -         break;
 - 
 -     case APP_WILL_UNMOUNT:
 -         store.dispatch(unregisterSound(OUTGOING_CALL_START_SOUND_ID));
 -         store.dispatch(unregisterSound(OUTGOING_CALL_RINGING_SOUND_ID));
 -         break;
 - 
 -     case PARTICIPANT_LEFT:
 -     case PARTICIPANT_UPDATED: {
 -         const newParticipantPresence
 -             = _getParticipantPresence(store.getState(), action.participant.id);
 - 
 -         if (oldParticipantPresence === newParticipantPresence) {
 -             break;
 -         }
 - 
 -         switch (oldParticipantPresence) {
 -         case CALLING:
 -         case INVITED:
 -             store.dispatch(stopSound(OUTGOING_CALL_START_SOUND_ID));
 -             break;
 -         case RINGING:
 -             store.dispatch(stopSound(OUTGOING_CALL_RINGING_SOUND_ID));
 -             break;
 -         }
 - 
 -         switch (newParticipantPresence) {
 -         case CALLING:
 -         case INVITED:
 -             store.dispatch(playSound(OUTGOING_CALL_START_SOUND_ID));
 -             break;
 -         case RINGING:
 -             store.dispatch(playSound(OUTGOING_CALL_RINGING_SOUND_ID));
 -         }
 - 
 -         break;
 -     }
 -     case UPDATE_DIAL_IN_NUMBERS_FAILED:
 -         logger.error(
 -             'Error encountered while fetching dial-in numbers:',
 -             action.error);
 -         break;
 -     }
 - 
 -     return result;
 - });
 - 
 - /**
 -  * Returns the presence status of a participant associated with the passed id.
 -  *
 -  * @param {Object} state - The redux state.
 -  * @param {string} id - The id of the participant.
 -  * @returns {string} - The presence status.
 -  */
 - function _getParticipantPresence(state, id) {
 -     if (!id) {
 -         return undefined;
 -     }
 -     const participants = state['features/base/participants'];
 -     const participantById = getParticipantById(participants, id);
 - 
 -     if (!participantById) {
 -         return undefined;
 -     }
 - 
 -     return participantById.presence;
 - }
 
 
  |