| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | 
							- /* @flow */
 - 
 - import { APP_WILL_MOUNT } from '../../app';
 - import {
 -     getAvatarURL,
 -     getLocalParticipant,
 -     getParticipantById,
 -     PARTICIPANT_ID_CHANGED,
 -     PARTICIPANT_JOINED,
 -     PARTICIPANT_UPDATED
 - } from '../../base/participants';
 - import { MiddlewareRegistry } from '../../base/redux';
 - 
 - import { ImageCache, prefetch } from './';
 - 
 - /**
 -  * The indicator which determines whether avatar URLs are to be prefetched in
 -  * the middleware here. Unless/until the implementation starts observing the
 -  * redux store instead of the respective redux actions, the value should very
 -  * likely be {@code false} because the middleware here is pretty much the last
 -  * to get a chance to figure out that an avatar URL may be used. Besides, it is
 -  * somewhat uninformed to download just about anything that may eventually be
 -  * used or not.
 -  *
 -  * @private
 -  * @type {boolean}
 -  */
 - const _PREFETCH_AVATAR_URLS = false;
 - 
 - /**
 -  * Middleware which captures app startup and conference actions in order to
 -  * clear the image cache.
 -  *
 -  * @returns {Function}
 -  */
 - MiddlewareRegistry.register(({ getState }) => next => action => {
 -     switch (action.type) {
 -     case APP_WILL_MOUNT:
 -         // XXX CONFERENCE_FAILED/LEFT are no longer used here because they
 -         // are tricky to get right as detectors of the moments in time at which
 -         // CachedImage is not used. Anyway, if ImageCache is to be cleared from
 -         // time to time, SET_LOCATION_URL is a much easier detector of such
 -         // opportune times. Fixes at least one 100%-reproducible case of
 -         // "TypeError: Cannot read property handlers of undefined." Anyway, in
 -         // order to reduce the re-downloading of the same avatars, eventually we
 -         // decided to not clear during the runtime of the app (other that at the
 -         // beginning that is).
 -         ImageCache && ImageCache.get().clear();
 -         break;
 - 
 -     case PARTICIPANT_ID_CHANGED:
 -     case PARTICIPANT_JOINED:
 -     case PARTICIPANT_UPDATED: {
 -         if (!_PREFETCH_AVATAR_URLS) {
 -             break;
 -         }
 - 
 -         const result = next(action);
 - 
 -         // Initiate the downloads of participants' avatars as soon as possible.
 - 
 -         // 1. Figure out the participant (instance).
 -         let { participant } = action;
 - 
 -         if (participant) {
 -             if (participant.id) {
 -                 participant = getParticipantById(getState, participant.id);
 -             } else if (participant.local) {
 -                 participant = getLocalParticipant(getState);
 -             } else {
 -                 participant = undefined;
 -             }
 -         } else if (action.oldValue && action.newValue) {
 -             participant = getParticipantById(getState, action.newValue);
 -         }
 -         if (participant) {
 -             // 2. Get the participant's avatar URL.
 -             const uri = getAvatarURL(participant);
 - 
 -             if (uri) {
 -                 // 3. Initiate the download of the participant's avatar.
 -                 prefetch({ uri });
 -             }
 -         }
 - 
 -         return result;
 -     }
 -     }
 - 
 -     return next(action);
 - });
 
 
  |