diff --git a/lang/main-es.json b/lang/main-es.json index deaf52d65984..ab1424be594c 100644 --- a/lang/main-es.json +++ b/lang/main-es.json @@ -954,8 +954,8 @@ "videoUnmuteBlockedTitle": "¡Desactivar cámara y compartir pantalla bloqueados!", "viewLobby": "Ver lobby", "waitingParticipants": "{{waitingParticipants}} personas", - "encryptionKeySyncFailed": "La sincronización de la clave de cifrado ha fallado. Se recomienda salir de la reunión y vuelva a unirse para restaurar la comunicación segura.", - "encryptionKeySyncFailedTitle": "Error de Sincronización de Cifrado", + "encryptionKeySyncFailed": "El establecimiento de la sesión segura ha fallado. Asegúrese de que todos los participantes tengan una conexión a Internet confiable.", + "encryptionKeySyncFailedTitle": "Error de Establecimiento de la Sesión", "cryptoFailedTitle": "La operación criptográfica ha fallado", "cryptoFailed": "La operación criptográfica ha fallado. No puede acceder al video ni al audio de la reunión. Se recomienda reiniciar el navegador. Si eres el organizador de la reunión, vuelva a crearla.", "encryptionKeySyncRestored": "La sincronización de claves para el cifrado se ha restaurado con éxito. Su comunicación segura está ahora activa.", diff --git a/lang/main.json b/lang/main.json index db2e40dde604..daf7fe47b042 100644 --- a/lang/main.json +++ b/lang/main.json @@ -1100,8 +1100,8 @@ "waitingVisitorsTitle": "The meeting is not live yet!", "whiteboardLimitDescription": "Please save your progress, as the user limit will soon be reached and the whiteboard will close.", "whiteboardLimitTitle": "Whiteboard usage", - "encryptionKeySyncFailed": "The encryption key synchronization has failed. It is recommended that you leave the meeting and rejoin to restore secure communication.", - "encryptionKeySyncFailedTitle": "Encryption Sync Failed", + "encryptionKeySyncFailed": "The secure session establishement has failed. Please ensure that all participants have a reliable internet connection.", + "encryptionKeySyncFailedTitle": "Session Establishment Failed", "cryptoFailedTitle": "Cryptographic operation failed", "cryptoFailed": "Cryptographic operation has failed. You cannot access video or audio of the meeting. It is recommended that you restart the browser. If you are the meeting organizer, recreate it.", "encryptionKeySyncRestored": "The encryption key synchronization has been successfully restored. Your secure communication is now active.", diff --git a/modules/UI/videolayout/VideoContainer.js b/modules/UI/videolayout/VideoContainer.js index d9f31bb5a24c..ad251b044939 100644 --- a/modules/UI/videolayout/VideoContainer.js +++ b/modules/UI/videolayout/VideoContainer.js @@ -400,9 +400,13 @@ export class VideoContainer extends LargeContainer { * @returns {void} */ positionRemoteStatusMessages() { + if (this.remoteConnectionMessage) { this._positionParticipantStatus(this.remoteConnectionMessage); + } + if (this.remotePresenceMessage) { this._positionParticipantStatus(this.remotePresenceMessage); } + } /** * Modifies the position of the passed in jQuery object so it displays @@ -615,6 +619,10 @@ export class VideoContainer extends LargeContainer { * @param {boolean} show */ showAvatar(show) { + if (!this.avatar) { + logger.warn('Avatar not found, cannot update visibility'); + return; + } this.avatar.style.visibility = show ? 'visible' : 'hidden'; this.avatarDisplayed = show; @@ -626,6 +634,12 @@ export class VideoContainer extends LargeContainer { */ show() { return new Promise(resolve => { + if (!this.wrapperParent) { + logger.warn('Wrapper parent not found, cannot show'); + resolve(); + return; + } + this.wrapperParent.style.visibility = 'visible'; this.wrapperParent.classList.remove('animatedFadeOut'); this.wrapperParent.classList.add('animatedFadeIn'); @@ -646,6 +660,11 @@ export class VideoContainer extends LargeContainer { this.showAvatar(false); return new Promise(resolve => { + if (!this.wrapperParent) { + logger.warn('Wrapper parent not found, cannot hide'); + resolve(); + return; + } this.wrapperParent.classList.remove('animatedFadeIn'); this.wrapperParent.classList.add('animatedFadeOut'); setTimeout(() => { diff --git a/react/features/base/media/components/AbstractAudio.ts b/react/features/base/media/components/AbstractAudio.ts index ba849dbd4075..0f794cca0129 100644 --- a/react/features/base/media/components/AbstractAudio.ts +++ b/react/features/base/media/components/AbstractAudio.ts @@ -108,10 +108,10 @@ export default class AbstractAudio extends Component { * @returns {void} */ setSinkId(sinkId: string) { - this._audioElementImpl - && typeof this._audioElementImpl.setSinkId === 'function' - && this._audioElementImpl.setSinkId(sinkId) - .catch(error => logger.error('Error setting sink', error)); + if (this._audioElementImpl && typeof this._audioElementImpl.setSinkId === 'function') { + this._audioElementImpl.setSinkId(sinkId) + .catch(error => logger.error(`Error setting sink ID ${sinkId}: ${error}`)); + } } /**