From c1fbbc4571302ca8832ffb4975ffe093666f1f44 Mon Sep 17 00:00:00 2001 From: Lyubo Marinov Date: Wed, 16 Aug 2017 16:28:39 -0500 Subject: [PATCH] Reduce duplication --- .../base/participants/components/Avatar.native.js | 10 ++++++---- react/features/base/participants/constants.js | 15 +++++++++++++++ react/features/base/participants/functions.js | 4 +++- react/features/toolbox/defaultToolbarButtons.js | 7 ++++--- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/react/features/base/participants/components/Avatar.native.js b/react/features/base/participants/components/Avatar.native.js index d7af82c47..057f18d45 100644 --- a/react/features/base/participants/components/Avatar.native.js +++ b/react/features/base/participants/components/Avatar.native.js @@ -5,14 +5,16 @@ import { CachedImage, ImageCache } from 'react-native-img-cache'; import { Platform } from '../../react'; import { ColorPalette } from '../../styles'; -// FIXME @lyubomir: The string images/avatar2.png appears three times in our -// source code at the time of this writing. Firstly, it presents a maintenance -// obstacle which increases the risks of inconsistency. Secondly, it is -// repulsive (when enlarged, especially, on mobile/React Native, for example). /** * The default image/source to be used in case none is specified or the * specified one fails to load. * + * XXX The relative path to the default/stock (image) file is defined by the + * const DEFAULT_AVATAR_RELATIVE_PATH. Unfortunately, the + * packager of React Native cannot deal with it early enough for the following + * require to succeed at runtime. Anyway, be sure to synchronize the + * relative path on Web and mobile for the purposes of consistency. + * * @private * @type {string} */ diff --git a/react/features/base/participants/constants.js b/react/features/base/participants/constants.js index fa1a4d7ca..fd7344fd7 100644 --- a/react/features/base/participants/constants.js +++ b/react/features/base/participants/constants.js @@ -1,3 +1,18 @@ +/** + * The relative path to the default/stock avatar (image) file used on both + * Web/React and mobile/React Native (for the purposes of consistency). + * + * XXX (1) Web/React utilizes relativity on the Jitsi Meet deployment. + * (2) Mobile/React Native utilizes relativity on the local file system at build + * time. Unfortunately, the packager of React Native cannot deal with the + * const early enough for require to succeed at runtime. + * Anyway, be sure to synchronize the relative path on Web and mobile for the + * purposes of consistency. + * + * @type {string} + */ +export const DEFAULT_AVATAR_RELATIVE_PATH = 'images/avatar.png'; + /** * Local participant might not have real ID until he joins a conference, * so use 'local' as its default ID. diff --git a/react/features/base/participants/functions.js b/react/features/base/participants/functions.js index 99e2ef4f9..cf3d81a03 100644 --- a/react/features/base/participants/functions.js +++ b/react/features/base/participants/functions.js @@ -1,3 +1,5 @@ +import { DEFAULT_AVATAR_RELATIVE_PATH } from './constants'; + declare var config: Object; declare var interfaceConfig: Object; declare var MD5: Object; @@ -20,7 +22,7 @@ export function getAvatarURL(participant) { // If disableThirdPartyRequests disables third-party avatar services, we are // restricted to a stock image of ours. if (typeof config === 'object' && config.disableThirdPartyRequests) { - return 'images/avatar.png'; + return DEFAULT_AVATAR_RELATIVE_PATH; } const { avatarID, avatarURL, email, id } = participant; diff --git a/react/features/toolbox/defaultToolbarButtons.js b/react/features/toolbox/defaultToolbarButtons.js index e5d9b8575..702c20a20 100644 --- a/react/features/toolbox/defaultToolbarButtons.js +++ b/react/features/toolbox/defaultToolbarButtons.js @@ -2,13 +2,14 @@ import React from 'react'; +import { DEFAULT_AVATAR_RELATIVE_PATH } from '../base/participants'; import { openDeviceSelectionDialog } from '../device-selection'; import { openDialOutDialog } from '../dial-out'; import { openAddPeopleDialog, openInviteDialog } from '../invite'; -import UIEvents from '../../../service/UI/UIEvents'; - import { VideoQualityButton } from '../video-quality'; +import UIEvents from '../../../service/UI/UIEvents'; + declare var APP: Object; declare var interfaceConfig: Object; declare var JitsiMeetJS: Object; @@ -342,7 +343,7 @@ const buttons: Object = { enabled: true, html: , + src = { DEFAULT_AVATAR_RELATIVE_PATH } />, id: 'toolbar_button_profile', onClick() { JitsiMeetJS.analytics.sendEvent('toolbar.profile.toggled');