fix(external-api) fix error if setting some options too early

Specifically: display-name, email and avatar. These are the most common
ones, and the ones currently used by Spot for example.
This commit is contained in:
Saúl Ibarra Corretgé 2022-06-29 09:41:25 +03:00 committed by Saúl Ibarra Corretgé
parent 730d42cba1
commit ee266160f9
2 changed files with 20 additions and 59 deletions

View File

@ -3094,34 +3094,12 @@ export default {
* @param email {string} the new email * @param email {string} the new email
*/ */
changeLocalEmail(email = '') { changeLocalEmail(email = '') {
const localParticipant = getLocalParticipant(APP.store.getState());
const formattedEmail = String(email).trim(); const formattedEmail = String(email).trim();
if (formattedEmail === localParticipant.email) {
return;
}
const localId = localParticipant.id;
APP.store.dispatch(participantUpdated({
// XXX Only the local participant is allowed to update without
// stating the JitsiConference instance (i.e. participant property
// `conference` for a remote participant) because the local
// participant is uniquely identified by the very fact that there is
// only one local participant.
id: localId,
local: true,
email: formattedEmail
}));
APP.store.dispatch(updateSettings({ APP.store.dispatch(updateSettings({
email: formattedEmail email: formattedEmail
})); }));
APP.API.notifyEmailChanged(localId, {
email: formattedEmail
});
sendData(commands.EMAIL, formattedEmail); sendData(commands.EMAIL, formattedEmail);
}, },
@ -3130,29 +3108,12 @@ export default {
* @param url {string} the new url * @param url {string} the new url
*/ */
changeLocalAvatarUrl(url = '') { changeLocalAvatarUrl(url = '') {
const { avatarURL, id } = getLocalParticipant(APP.store.getState());
const formattedUrl = String(url).trim(); const formattedUrl = String(url).trim();
if (formattedUrl === avatarURL) {
return;
}
APP.store.dispatch(participantUpdated({
// XXX Only the local participant is allowed to update without
// stating the JitsiConference instance (i.e. participant property
// `conference` for a remote participant) because the local
// participant is uniquely identified by the very fact that there is
// only one local participant.
id,
local: true,
avatarURL: formattedUrl
}));
APP.store.dispatch(updateSettings({ APP.store.dispatch(updateSettings({
avatarURL: formattedUrl avatarURL: formattedUrl
})); }));
sendData(commands.AVATAR_URL, url); sendData(commands.AVATAR_URL, url);
}, },
@ -3193,23 +3154,6 @@ export default {
*/ */
changeLocalDisplayName(nickname = '') { changeLocalDisplayName(nickname = '') {
const formattedNickname = getNormalizedDisplayName(nickname); const formattedNickname = getNormalizedDisplayName(nickname);
const { id, name } = getLocalParticipant(APP.store.getState());
if (formattedNickname === name) {
return;
}
APP.store.dispatch(participantUpdated({
// XXX Only the local participant is allowed to update without
// stating the JitsiConference instance (i.e. participant property
// `conference` for a remote participant) because the local
// participant is uniquely identified by the very fact that there is
// only one local participant.
id,
local: true,
name: formattedNickname
}));
APP.store.dispatch(updateSettings({ APP.store.dispatch(updateSettings({
displayName: formattedNickname displayName: formattedNickname

View File

@ -23,7 +23,7 @@ StateListenerRegistry.register(
const localParticipant = getLocalParticipant(store.getState()); const localParticipant = getLocalParticipant(store.getState());
const { defaultLocalDisplayName } = store.getState()['features/base/config']; const { defaultLocalDisplayName } = store.getState()['features/base/config'];
// Initial setting of the display name occurs happens on app // Initial setting of the display name happens on app
// initialization, before the local participant is ready. The initial // initialization, before the local participant is ready. The initial
// settings is not desired to be fired anyways, only changes. // settings is not desired to be fired anyways, only changes.
if (localParticipant) { if (localParticipant) {
@ -39,6 +39,23 @@ StateListenerRegistry.register(
} }
}); });
StateListenerRegistry.register(
/* selector */ state => state['features/base/settings'].email,
/* listener */ (email, store) => {
const localParticipant = getLocalParticipant(store.getState());
// Initial setting of the email happens on app
// initialization, before the local participant is ready. The initial
// settings is not desired to be fired anyways, only changes.
if (localParticipant) {
const { id } = localParticipant;
APP.API.notifyEmailChanged(id, {
email
});
}
});
/** /**
* Updates the on stage participant value. * Updates the on stage participant value.
*/ */