12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /* @flow */
-
- import { APP_WILL_MOUNT } from '../../app';
- import { CONFERENCE_FAILED, CONFERENCE_LEFT } from '../../base/conference';
- 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:
- case CONFERENCE_FAILED:
- case CONFERENCE_LEFT:
- 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);
- });
|