diff --git a/conference.js b/conference.js index 1e5e62085..a1404ce77 100644 --- a/conference.js +++ b/conference.js @@ -32,12 +32,10 @@ import { isFatalJitsiConnectionError } from './react/features/base/lib-jitsi-meet'; import { - changeParticipantAvatarID, - changeParticipantAvatarURL, - changeParticipantEmail, participantJoined, participantLeft, - participantRoleChanged + participantRoleChanged, + participantUpdated } from './react/features/base/participants'; import { showDesktopPicker @@ -174,6 +172,10 @@ function createInitialLocalTracksAndConnect(roomName) { * @param {string} value new value */ function sendData (command, value) { + if(!room) { + return; + } + room.removeCommand(command); room.sendCommand(command, {value: value}); } @@ -361,23 +363,6 @@ function createLocalTracks (options, checkForPermissionPrompt) { }); } -/** - * Changes the display name for the local user - * @param nickname {string} the new display name - */ -function changeLocalDisplayName(nickname = '') { - const formattedNickname - = nickname.trim().substr(0, MAX_DISPLAY_NAME_LENGTH); - - if (formattedNickname === APP.settings.getDisplayName()) { - return; - } - - APP.settings.setDisplayName(formattedNickname); - room.setDisplayName(formattedNickname); - APP.UI.changeDisplayName(APP.conference.getMyUserId(), formattedNickname); -} - class ConferenceConnector { constructor(resolve, reject, invite) { this._resolve = resolve; @@ -1499,7 +1484,10 @@ export default { APP.UI.addListener(UIEvents.EMAIL_CHANGED, this.changeLocalEmail); room.addCommandListener(this.commands.defaults.EMAIL, (data, from) => { - APP.store.dispatch(changeParticipantEmail(from, data.value)); + APP.store.dispatch(participantUpdated({ + id: from, + email: data.value + })); APP.UI.setUserEmail(from, data.value); }); @@ -1507,18 +1495,25 @@ export default { this.commands.defaults.AVATAR_URL, (data, from) => { APP.store.dispatch( - changeParticipantAvatarURL(from, data.value)); + participantUpdated({ + id: from, + avatarURL: data.value + })); APP.UI.setUserAvatarUrl(from, data.value); }); room.addCommandListener(this.commands.defaults.AVATAR_ID, (data, from) => { APP.store.dispatch( - changeParticipantAvatarID(from, data.value)); + participantUpdated({ + id: from, + avatarID: data.value + })); APP.UI.setUserAvatarID(from, data.value); }); - APP.UI.addListener(UIEvents.NICKNAME_CHANGED, changeLocalDisplayName); + APP.UI.addListener(UIEvents.NICKNAME_CHANGED, + this.changeLocalDisplayName.bind(this)); APP.UI.addListener(UIEvents.START_MUTED_CHANGED, (startAudioMuted, startVideoMuted) => { @@ -1925,10 +1920,17 @@ export default { if (email === APP.settings.getEmail()) { return; } - APP.store.dispatch(changeParticipantEmail(room.myUserId(), email)); + + const localId = room ? room.myUserId() : undefined; + + APP.store.dispatch(participantUpdated({ + id: localId, + local: true, + email + })); APP.settings.setEmail(email); - APP.UI.setUserEmail(room.myUserId(), email); + APP.UI.setUserEmail(localId, email); sendData(commands.EMAIL, email); }, @@ -1942,10 +1944,17 @@ export default { if (url === APP.settings.getAvatarUrl()) { return; } - APP.store.dispatch(changeParticipantAvatarURL(room.myUserId(), url)); + + const localId = room ? room.myUserId() : undefined; + + APP.store.dispatch(participantUpdated({ + id: localId, + local: true, + avatarURL: url + })); APP.settings.setAvatarUrl(url); - APP.UI.setUserAvatarUrl(room.myUserId(), url); + APP.UI.setUserAvatarUrl(localId, url); sendData(commands.AVATAR_URL, url); }, @@ -1991,5 +2000,22 @@ export default { */ isInLastN (participantId) { return room.isInLastN(participantId); + }, + /** + * Changes the display name for the local user + * @param nickname {string} the new display name + */ + changeLocalDisplayName(nickname = '') { + const formattedNickname + = nickname.trim().substr(0, MAX_DISPLAY_NAME_LENGTH); + + if (formattedNickname === APP.settings.getDisplayName()) { + return; + } + + APP.settings.setDisplayName(formattedNickname); + room.setDisplayName(formattedNickname); + APP.UI.changeDisplayName(this.getMyUserId(), + formattedNickname); } }; diff --git a/modules/API/API.js b/modules/API/API.js index 8417e7db2..3bb979e31 100644 --- a/modules/API/API.js +++ b/modules/API/API.js @@ -45,7 +45,8 @@ let enabled = false; function initCommands() { commands = { - "display-name": APP.UI.inputDisplayNameHandler, + "display-name": + APP.conference.changeLocalDisplayName.bind(APP.conference), "toggle-audio": APP.conference.toggleAudioMuted.bind(APP.conference), "toggle-video": APP.conference.toggleVideoMuted.bind(APP.conference), "toggle-film-strip": APP.UI.toggleFilmStrip, diff --git a/modules/UI/UI.js b/modules/UI/UI.js index 75a05522d..56bd4c6c9 100644 --- a/modules/UI/UI.js +++ b/modules/UI/UI.js @@ -762,6 +762,9 @@ UI.setUserEmail = function (id, email) { Avatar.setUserEmail(id, email); changeAvatar(id, Avatar.getAvatarUrl(id)); + if (APP.conference.isLocalId(id)) { + Profile.changeEmail(email); + } }; /** diff --git a/modules/UI/avatar/Avatar.js b/modules/UI/avatar/Avatar.js index e29619dee..198dac073 100644 --- a/modules/UI/avatar/Avatar.js +++ b/modules/UI/avatar/Avatar.js @@ -30,7 +30,7 @@ let users = {}; export default { /** * Sets prop in users object. - * @param id {string} user id + * @param id {string} user id or undefined for the local user. * @param prop {string} name of the prop * @param val {string} value to be set */ @@ -38,7 +38,7 @@ export default { // FIXME: Fixes the issue with not be able to return avatar for the // local user when the conference has been left. Maybe there is beter // way to solve it. - if(APP.conference.isLocalId(id)) { + if(!id || APP.conference.isLocalId(id)) { id = "local"; } if(!val || (users[id] && users[id][prop] === val)) diff --git a/modules/UI/side_pannels/profile/Profile.js b/modules/UI/side_pannels/profile/Profile.js index 45c1a8caa..c08d2b9a9 100644 --- a/modules/UI/side_pannels/profile/Profile.js +++ b/modules/UI/side_pannels/profile/Profile.js @@ -15,10 +15,10 @@ const htmlStr = `
-
-