From bad845e1959a9ed1461da7dd8c7934890ddceb56 Mon Sep 17 00:00:00 2001 From: Astagor Date: Mon, 4 May 2020 18:27:50 +0200 Subject: [PATCH 01/43] Browse passive participants --- app/src/RoomClient.js | 10 +++++++ app/src/Spotlights.js | 63 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/app/src/RoomClient.js b/app/src/RoomClient.js index 8dbc9d1..656f443 100644 --- a/app/src/RoomClient.js +++ b/app/src/RoomClient.js @@ -298,6 +298,16 @@ export default class RoomClient switch (key) { + case String.fromCharCode(37): + { + this._spotlights.setPrevAsSelected(); + break; + } + case String.fromCharCode(39): + { + this._spotlights.setNextAsSelected(); + break; + } case 'A': // Activate advanced mode { store.dispatch(settingsActions.toggleAdvancedMode()); diff --git a/app/src/Spotlights.js b/app/src/Spotlights.js index 30dc48a..dd119df 100644 --- a/app/src/Spotlights.js +++ b/app/src/Spotlights.js @@ -12,6 +12,7 @@ export default class Spotlights extends EventEmitter this._signalingSocket = signalingSocket; this._maxSpotlights = maxSpotlights; this._peerList = []; + this._unmutablePeerList = []; this._selectedSpotlights = []; this._currentSpotlights = []; this._started = false; @@ -45,6 +46,66 @@ export default class Spotlights extends EventEmitter } } + setNextAsSelected() + { + let peerId = null; + if (this._selectedSpotlights.length > 0) { + peerId = this._selectedSpotlights[0]; + } else if (this._unmutablePeerList.length > 0) { + peerId = this._unmutablePeerList[0]; + } + + if (peerId != null && this._currentSpotlights.length < this._unmutablePeerList.length) { + let oldIndex = this._unmutablePeerList.indexOf(peerId); + let index = oldIndex; + index++; + do { + if (index >= this._unmutablePeerList.length) { + index = 0; + } + let newSelectedPeer = this._unmutablePeerList[index]; + if (!this._currentSpotlights.includes(newSelectedPeer)) { + this.setPeerSpotlight(newSelectedPeer); + break; + } + index++; + if (index === oldIndex) { + break; + } + } while (true); + } + } + + setPrevAsSelected() + { + let peerId = null; + if (this._selectedSpotlights.length > 0) { + peerId = this._selectedSpotlights[0]; + } else if (this._unmutablePeerList.length > 0) { + peerId = this._unmutablePeerList[0]; + } + + if (peerId != null && this._currentSpotlights.length < this._unmutablePeerList.length) { + let oldIndex = this._unmutablePeerList.indexOf(peerId); + let index = oldIndex; + index--; + do { + if (index < 0) { + index = this._unmutablePeerList.length - 1; + } + let newSelectedPeer = this._unmutablePeerList[index]; + if (!this._currentSpotlights.includes(newSelectedPeer)) { + this.setPeerSpotlight(newSelectedPeer); + break; + } + index--; + if (index === oldIndex) { + break; + } + } while (true); + } + } + setPeerSpotlight(peerId) { logger.debug('setPeerSpotlight() [peerId:"%s"]', peerId); @@ -105,6 +166,7 @@ export default class Spotlights extends EventEmitter logger.debug('_handlePeer() | adding peer [peerId: "%s"]', id); this._peerList.push(id); + this._unmutablePeerList.push(id); if (this._started) this._spotlightsUpdated(); @@ -117,6 +179,7 @@ export default class Spotlights extends EventEmitter 'room "peerClosed" event [peerId:%o]', id); this._peerList = this._peerList.filter((peer) => peer !== id); + this._unmutablePeerList = this._unmutablePeerList.filter((peer) => peer !== id); this._selectedSpotlights = this._selectedSpotlights.filter((peer) => peer !== id); From 1e5b6680c4f66695506b4cf3db0afc5e93a054c3 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 12 May 2020 18:09:08 +0200 Subject: [PATCH 02/43] Translate moderator mute actions on peer --- .../components/MeetingDrawer/ParticipantList/ListPeer.js | 8 ++++---- app/src/translations/cn.json | 3 +++ app/src/translations/cs.json | 3 +++ app/src/translations/de.json | 3 +++ app/src/translations/dk.json | 3 +++ app/src/translations/el.json | 3 +++ app/src/translations/en.json | 3 +++ app/src/translations/es.json | 3 +++ app/src/translations/fr.json | 3 +++ app/src/translations/hr.json | 3 +++ app/src/translations/hu.json | 3 +++ app/src/translations/it.json | 3 +++ app/src/translations/lv.json | 3 +++ app/src/translations/nb.json | 3 +++ app/src/translations/pl.json | 3 +++ app/src/translations/pt.json | 3 +++ app/src/translations/ro.json | 3 +++ app/src/translations/tr.json | 3 +++ app/src/translations/uk.json | 3 +++ 19 files changed, 58 insertions(+), 4 deletions(-) diff --git a/app/src/components/MeetingDrawer/ParticipantList/ListPeer.js b/app/src/components/MeetingDrawer/ParticipantList/ListPeer.js index 7aa5181..0ca5d89 100644 --- a/app/src/components/MeetingDrawer/ParticipantList/ListPeer.js +++ b/app/src/components/MeetingDrawer/ParticipantList/ListPeer.js @@ -255,8 +255,8 @@ const ListPeer = (props) => { isModerator && micConsumer && @@ -282,8 +282,8 @@ const ListPeer = (props) => { isModerator && webcamConsumer && diff --git a/app/src/translations/cn.json b/app/src/translations/cn.json index 0ce5f5b..cd58a88 100644 --- a/app/src/translations/cn.json +++ b/app/src/translations/cn.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": null, "tooltip.raisedHand": null, "tooltip.muteScreenSharing": null, + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "房间名称", "label.chooseRoomButton": "继续", diff --git a/app/src/translations/cs.json b/app/src/translations/cs.json index 3eac16c..826dcef 100644 --- a/app/src/translations/cs.json +++ b/app/src/translations/cs.json @@ -83,6 +83,9 @@ "tooltip.muteParticipantVideo": null, "tooltip.raisedHand": null, "tooltip.muteScreenSharing": null, + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Jméno místnosti", "label.chooseRoomButton": "Pokračovat", diff --git a/app/src/translations/de.json b/app/src/translations/de.json index c4b67fe..fc1de49 100644 --- a/app/src/translations/de.json +++ b/app/src/translations/de.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": "Video stoppen", "tooltip.raisedHand": "Hand heben", "tooltip.muteScreenSharing": "Stoppe Bildschirmfreigabe", + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Name des Raums", "label.chooseRoomButton": "Weiter", diff --git a/app/src/translations/dk.json b/app/src/translations/dk.json index c5c3a2d..778e10d 100644 --- a/app/src/translations/dk.json +++ b/app/src/translations/dk.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": null, "tooltip.raisedHand": null, "tooltip.muteScreenSharing": null, + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Værelsesnavn", "label.chooseRoomButton": "Fortsæt", diff --git a/app/src/translations/el.json b/app/src/translations/el.json index d71764f..22e991e 100644 --- a/app/src/translations/el.json +++ b/app/src/translations/el.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": null, "tooltip.raisedHand": null, "tooltip.muteScreenSharing": null, + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Όνομα δωματίου", "label.chooseRoomButton": "Συνέχεια", diff --git a/app/src/translations/en.json b/app/src/translations/en.json index 344d660..776ae29 100644 --- a/app/src/translations/en.json +++ b/app/src/translations/en.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": "Mute participant video", "tooltip.raisedHand": "Raise hand", "tooltip.muteScreenSharing": "Mute participant share", + "tooltip.muteParticipantAudioModerator": "Mute participant audio globally", + "tooltip.muteParticipantVideoModerator": "Mute participant video globally", + "tooltip.muteScreenSharingModerator": "Mute participant screen share globally", "label.roomName": "Room name", "label.chooseRoomButton": "Continue", diff --git a/app/src/translations/es.json b/app/src/translations/es.json index 758b0c8..abb06f4 100644 --- a/app/src/translations/es.json +++ b/app/src/translations/es.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": null, "tooltip.raisedHand": null, "tooltip.muteScreenSharing": null, + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Nombre de la sala", "label.chooseRoomButton": "Continuar", diff --git a/app/src/translations/fr.json b/app/src/translations/fr.json index 2eb7edf..7d17970 100644 --- a/app/src/translations/fr.json +++ b/app/src/translations/fr.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": null, "tooltip.raisedHand": null, "tooltip.muteScreenSharing": null, + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Nom de la salle", "label.chooseRoomButton": "Continuer", diff --git a/app/src/translations/hr.json b/app/src/translations/hr.json index c0f8879..61d6d69 100644 --- a/app/src/translations/hr.json +++ b/app/src/translations/hr.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": "Ne primaj video sudionika", "tooltip.raisedHand": "Podigni ruku", "tooltip.muteScreenSharing": null, + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Naziv sobe", "label.chooseRoomButton": "Nastavi", diff --git a/app/src/translations/hu.json b/app/src/translations/hu.json index cf65f1d..9e748d6 100644 --- a/app/src/translations/hu.json +++ b/app/src/translations/hu.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": "Résztvevő videóstreamének némítása", "tooltip.raisedHand": "Jelentkezés", "tooltip.muteScreenSharing": "Képernyőmegosztás szüneteltetése", + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Konferencia", "label.chooseRoomButton": "Tovább", diff --git a/app/src/translations/it.json b/app/src/translations/it.json index 312a2ff..a4345cc 100644 --- a/app/src/translations/it.json +++ b/app/src/translations/it.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": "Ferma video partecipante", "tooltip.raisedHand": "Mano alzata", "tooltip.muteScreenSharing": "Ferma condivisione schermo partecipante", + "tooltip.muteParticipantAudioModerator": "Muta partecipante", + "tooltip.muteParticipantVideoModerator": "Ferma video partecipante", + "tooltip.muteScreenSharingModerator": "Ferma condivisione schermo partecipante", "label.roomName": "Nome della stanza", "label.chooseRoomButton": "Continua", diff --git a/app/src/translations/lv.json b/app/src/translations/lv.json index 7bf0b24..20eb8f8 100644 --- a/app/src/translations/lv.json +++ b/app/src/translations/lv.json @@ -83,6 +83,9 @@ "tooltip.muteParticipantVideo": "Atslēgt dalībnieka video", "tooltip.raisedHand": "Pacelt roku", "tooltip.muteScreenSharing": null, + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Sapulces telpas nosaukums (ID)", "label.chooseRoomButton": "Turpināt", diff --git a/app/src/translations/nb.json b/app/src/translations/nb.json index 251858b..3714f76 100644 --- a/app/src/translations/nb.json +++ b/app/src/translations/nb.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": "Demp deltakervideo", "tooltip.raisedHand": "Rekk opp hånden", "tooltip.muteScreenSharing": "Demp deltaker skjermdeling", + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Møtenavn", "label.chooseRoomButton": "Fortsett", diff --git a/app/src/translations/pl.json b/app/src/translations/pl.json index 174684c..147a87e 100644 --- a/app/src/translations/pl.json +++ b/app/src/translations/pl.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": "Wyłącz wideo użytkownika", "tooltip.raisedHand": "Podnieś rękę", "tooltip.muteScreenSharing": "Anuluj udostępniania pulpitu przez użytkownika", + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Nazwa konferencji", "label.chooseRoomButton": "Kontynuuj", diff --git a/app/src/translations/pt.json b/app/src/translations/pt.json index 8250231..c386bcf 100644 --- a/app/src/translations/pt.json +++ b/app/src/translations/pt.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": null, "tooltip.raisedHand": null, "tooltip.muteScreenSharing": null, + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Nome da sala", "label.chooseRoomButton": "Continuar", diff --git a/app/src/translations/ro.json b/app/src/translations/ro.json index 1ba455c..81b778b 100644 --- a/app/src/translations/ro.json +++ b/app/src/translations/ro.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": null, "tooltip.raisedHand": null, "tooltip.muteScreenSharing": null, + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Numele camerei", "label.chooseRoomButton": "Continuare", diff --git a/app/src/translations/tr.json b/app/src/translations/tr.json index 524c557..41d8322 100644 --- a/app/src/translations/tr.json +++ b/app/src/translations/tr.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": null, "tooltip.raisedHand": null, "tooltip.muteScreenSharing": null, + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Oda adı", "label.chooseRoomButton": "Devam", diff --git a/app/src/translations/uk.json b/app/src/translations/uk.json index a8cc077..81c5c81 100644 --- a/app/src/translations/uk.json +++ b/app/src/translations/uk.json @@ -84,6 +84,9 @@ "tooltip.muteParticipantVideo": null, "tooltip.raisedHand": null, "tooltip.muteScreenSharing": null, + "tooltip.muteParticipantAudioModerator": null, + "tooltip.muteParticipantVideoModerator": null, + "tooltip.muteScreenSharingModerator": null, "label.roomName": "Назва кімнати", "label.chooseRoomButton": "Продовжити", From 0e40ed76961d17303097fc44f548c20267ac87bf Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 12 May 2020 18:17:51 +0200 Subject: [PATCH 03/43] Update it translation --- app/src/translations/it.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/translations/it.json b/app/src/translations/it.json index a4345cc..69add90 100644 --- a/app/src/translations/it.json +++ b/app/src/translations/it.json @@ -84,9 +84,9 @@ "tooltip.muteParticipantVideo": "Ferma video partecipante", "tooltip.raisedHand": "Mano alzata", "tooltip.muteScreenSharing": "Ferma condivisione schermo partecipante", - "tooltip.muteParticipantAudioModerator": "Muta partecipante", - "tooltip.muteParticipantVideoModerator": "Ferma video partecipante", - "tooltip.muteScreenSharingModerator": "Ferma condivisione schermo partecipante", + "tooltip.muteParticipantAudioModerator": "Sospendi audio globale", + "tooltip.muteParticipantVideoModerator": "Sospendi video globale", + "tooltip.muteScreenSharingModerator": "Sospendi condivisione schermo globale", "label.roomName": "Nome della stanza", "label.chooseRoomButton": "Continua", From 5ea482d01fd1c10e0dc39da493728446f2d85d75 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 12 May 2020 19:04:41 +0200 Subject: [PATCH 04/43] Moderator: disable screen sharing --- app/src/RoomClient.js | 36 ++++++++++++++++++- app/src/actions/peerActions.js | 7 ++++ .../MeetingDrawer/ParticipantList/ListPeer.js | 27 ++++++++++++++ app/src/reducers/peers.js | 6 ++++ app/src/translations/en.json | 3 +- server/lib/Room.js | 19 ++++++++++ 6 files changed, 96 insertions(+), 2 deletions(-) diff --git a/app/src/RoomClient.js b/app/src/RoomClient.js index 2217d65..71c530b 100644 --- a/app/src/RoomClient.js +++ b/app/src/RoomClient.js @@ -1432,6 +1432,26 @@ export default class RoomClient peerActions.setStopPeerVideoInProgress(peerId, false)); } + async stopPeerScreenSharing(peerId) + { + logger.debug('stopPeerScreenSharing() [peerId:"%s"]', peerId); + + store.dispatch( + peerActions.setStopPeerScreenSharingInProgress(peerId, true)); + + try + { + await this.sendRequest('moderator:stopScreenSharing', { peerId }); + } + catch (error) + { + logger.error('stopPeerScreenSharing() failed: %o', error); + } + + store.dispatch( + peerActions.setStopPeerScreenSharingInProgress(peerId, false)); + } + async muteAllPeers() { logger.debug('muteAllPeers()'); @@ -2592,7 +2612,6 @@ export default class RoomClient case 'moderator:stopVideo': { this.disableWebcam(); - this.disableScreenSharing(); store.dispatch(requestActions.notify( { @@ -2605,6 +2624,21 @@ export default class RoomClient break; } + case 'moderator:stopScreenSharing': + { + this.disableScreenSharing(); + + store.dispatch(requestActions.notify( + { + text : intl.formatMessage({ + id : 'moderator.muteScreenSharingModerator', + defaultMessage : 'Moderator stopped your screen sharing' + }) + })); + + break; + } + case 'moderator:kick': { // Need some feedback diff --git a/app/src/actions/peerActions.js b/app/src/actions/peerActions.js index 5672b47..8a67371 100644 --- a/app/src/actions/peerActions.js +++ b/app/src/actions/peerActions.js @@ -86,3 +86,10 @@ export const setStopPeerVideoInProgress = (peerId, flag) => type : 'STOP_PEER_VIDEO_IN_PROGRESS', payload : { peerId, flag } }); + +export const setStopPeerScreenSharingInProgress = (peerId, flag) => +({ + type : 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS', + payload : { peerId, flag } +}); + diff --git a/app/src/components/MeetingDrawer/ParticipantList/ListPeer.js b/app/src/components/MeetingDrawer/ParticipantList/ListPeer.js index 7aa5181..b375c6f 100644 --- a/app/src/components/MeetingDrawer/ParticipantList/ListPeer.js +++ b/app/src/components/MeetingDrawer/ParticipantList/ListPeer.js @@ -306,6 +306,33 @@ const ListPeer = (props) => } + { isModerator && screenConsumer && + + + { + e.stopPropagation(); + + roomClient.stopPeerScreenSharing(peer.id); + }} + > + { !screenConsumer.remotelyPaused ? + + : + + } + + + } {children} ); diff --git a/app/src/reducers/peers.js b/app/src/reducers/peers.js index 32d6fef..8e6a7f7 100644 --- a/app/src/reducers/peers.js +++ b/app/src/reducers/peers.js @@ -82,6 +82,11 @@ const peer = (state = initialState, action) => stopPeerVideoInProgress : action.payload.flag }; + case 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS': + return { + ...state, + stopPeerScreenSharingInProgress : action.payload.flag + }; default: return state; } @@ -118,6 +123,7 @@ const peers = (state = initialState, action) => case 'REMOVE_PEER_ROLE': case 'STOP_PEER_AUDIO_IN_PROGRESS': case 'STOP_PEER_VIDEO_IN_PROGRESS': + case 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS': { const oldPeer = state[action.payload.peerId]; diff --git a/app/src/translations/en.json b/app/src/translations/en.json index 344d660..d667fa4 100644 --- a/app/src/translations/en.json +++ b/app/src/translations/en.json @@ -183,5 +183,6 @@ "moderator.clearChat": "Moderator cleared the chat", "moderator.clearFiles": "Moderator cleared the files", "moderator.muteAudio": "Moderator muted your audio", - "moderator.muteVideo": "Moderator muted your video" + "moderator.muteVideo": "Moderator muted your video", + "moderator.muteScreenSharing": "Moderator muted your screen sharing" } \ No newline at end of file diff --git a/server/lib/Room.js b/server/lib/Room.js index 74accc4..0610ffe 100644 --- a/server/lib/Room.js +++ b/server/lib/Room.js @@ -1441,6 +1441,25 @@ class Room extends EventEmitter break; } + case 'moderator:stopScreenSharing': + { + if (!this._hasPermission(peer, MODERATE_ROOM)) + throw new Error('peer not authorized'); + + const { peerId } = request.data; + + const stopVideoPeer = this._peers[peerId]; + + if (!stopVideoPeer) + throw new Error(`peer with id "${peerId}" not found`); + + this._notification(stopVideoPeer.socket, 'moderator:stopScreenSharing'); + + cb(); + + break; + } + case 'moderator:closeMeeting': { if (!this._hasPermission(peer, MODERATE_ROOM)) From b8c0a8450d5b6baedb656248fc9d72087c26f855 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 12 May 2020 19:31:51 +0200 Subject: [PATCH 05/43] Lint fix --- app/src/actions/peerActions.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/actions/peerActions.js b/app/src/actions/peerActions.js index 8a67371..b40d486 100644 --- a/app/src/actions/peerActions.js +++ b/app/src/actions/peerActions.js @@ -88,8 +88,8 @@ export const setStopPeerVideoInProgress = (peerId, flag) => }); export const setStopPeerScreenSharingInProgress = (peerId, flag) => -({ - type : 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS', - payload : { peerId, flag } -}); + ({ + type : 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS', + payload : { peerId, flag } + }); From d84d30e40215c4ffb11a96fa70b92235914b1e24 Mon Sep 17 00:00:00 2001 From: mi4aux <63875263+mi4aux@users.noreply.github.com> Date: Tue, 12 May 2020 22:52:30 +0200 Subject: [PATCH 06/43] Typofix german translation --- app/src/translations/de.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/translations/de.json b/app/src/translations/de.json index c4b67fe..b5e5f5d 100644 --- a/app/src/translations/de.json +++ b/app/src/translations/de.json @@ -64,7 +64,7 @@ "room.about": "Impressum", "room.shortcutKeys": "Tastaturkürzel", - "me.mutedPTT": "Du bist stummgeschalted, Halte die SPACE-Taste um zu sprechen", + "me.mutedPTT": "Du bist stummgeschaltet. Halte die SPACE-Taste um zu sprechen", "roles.gotRole": "Rolle erhalten: {role}", "roles.lostRole": "Rolle entzogen: {role}", @@ -110,9 +110,9 @@ "label.close": "Schließen", "label.media": "Audio / Video", "label.appearence": "Erscheinung", - "label.advanced": "Erweiter", + "label.advanced": "Erweitert", "label.addVideo": "Video hinzufügen", - "label.promoteAllPeers": "Alle Teinehmer einlassen", + "label.promoteAllPeers": "Alle Teilnehmer reinlassen", "label.moreActions": "Weitere Aktionen", "settings.settings": "Einstellungen", @@ -134,7 +134,7 @@ "settings.hiddenControls": "Medienwerkzeugleiste automatisch ausblenden", "settings.notificationSounds": "Audiosignal bei Benachrichtigungen", "settings.showNotifications": "Zeige Benachrichtigungen", - "settings.buttonControlBar": "Seperate seitliche Medienwerkzeugleiste", + "settings.buttonControlBar": "Separate seitliche Medienwerkzeugleiste", "settings.echoCancellation": "Echounterdrückung", "settings.autoGainControl": "Automatische Pegelregelung (Audioeingang)", "settings.noiseSuppression": "Rauschunterdrückung", From af1dcd6bab9cf06a3c3aaf075bd09f4fa84647e4 Mon Sep 17 00:00:00 2001 From: mi4aux <63875263+mi4aux@users.noreply.github.com> Date: Tue, 12 May 2020 22:55:42 +0200 Subject: [PATCH 07/43] Suggestions for better german translation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit room.closeMeeting: "Meeting beenden" or alternatively "Meeting abschließen" room.about: "Über" on software often also like "Über multiparty-meeting" or "Info" / "Informationen" in general "Impressum" is more like "imprint" / "legal info" on a website, .. but depends on what it's ment to be label.medium: "Mittel" better (true) german, "Medium" obtained on quality is german-english mix (or has other meaning) label.appearence: "Ansicht" shorter, more often used on software .. alternatively "Aussehen" or "Anzeige" --- app/src/translations/de.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/translations/de.json b/app/src/translations/de.json index b5e5f5d..e2ecc02 100644 --- a/app/src/translations/de.json +++ b/app/src/translations/de.json @@ -51,7 +51,7 @@ "room.videoPaused": "Video gestoppt", "room.muteAll": "Alle stummschalten", "room.stopAllVideo": "Alle Videos stoppen", - "room.closeMeeting": "Meeting schließen", + "room.closeMeeting": "Meeting beenden", "room.clearChat": "Liste löschen", "room.clearFileSharing": "Liste löschen", "room.speechUnsupported": "Dein Browser unterstützt keine Spracherkennung", @@ -61,7 +61,7 @@ "room.extraVideo": "Video hinzufügen", "room.overRoomLimit": "Der Raum ist voll, probiere es später nochmal", "room.help": "Hilfe", - "room.about": "Impressum", + "room.about": "Über", "room.shortcutKeys": "Tastaturkürzel", "me.mutedPTT": "Du bist stummgeschaltet. Halte die SPACE-Taste um zu sprechen", @@ -103,13 +103,13 @@ "label.democratic": "Demokratisch", "label.filmstrip": "Filmstreifen", "label.low": "Niedrig", - "label.medium": "Medium", + "label.medium": "Mittel", "label.high": "Hoch (HD)", "label.veryHigh": "Sehr hoch (FHD)", "label.ultra": "Ultra (UHD)", "label.close": "Schließen", "label.media": "Audio / Video", - "label.appearence": "Erscheinung", + "label.appearence": "Ansicht", "label.advanced": "Erweitert", "label.addVideo": "Video hinzufügen", "label.promoteAllPeers": "Alle Teilnehmer reinlassen", From bd06d68742bf6720b942724aa7a7915572994b94 Mon Sep 17 00:00:00 2001 From: mi4aux <63875263+mi4aux@users.noreply.github.com> Date: Tue, 12 May 2020 22:56:46 +0200 Subject: [PATCH 08/43] Typofix variablename --- app/src/components/Settings/Settings.js | 2 +- app/src/translations/cn.json | 2 +- app/src/translations/cs.json | 2 +- app/src/translations/de.json | 2 +- app/src/translations/dk.json | 2 +- app/src/translations/el.json | 2 +- app/src/translations/en.json | 2 +- app/src/translations/es.json | 2 +- app/src/translations/fr.json | 2 +- app/src/translations/hr.json | 2 +- app/src/translations/hu.json | 2 +- app/src/translations/it.json | 2 +- app/src/translations/lv.json | 2 +- app/src/translations/nb.json | 2 +- app/src/translations/pl.json | 2 +- app/src/translations/pt.json | 2 +- app/src/translations/ro.json | 2 +- app/src/translations/tr.json | 2 +- app/src/translations/uk.json | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/src/components/Settings/Settings.js b/app/src/components/Settings/Settings.js index 6633829..cbfb8b1 100644 --- a/app/src/components/Settings/Settings.js +++ b/app/src/components/Settings/Settings.js @@ -95,7 +95,7 @@ const Settings = ({ /> diff --git a/app/src/translations/cn.json b/app/src/translations/cn.json index 0ce5f5b..bf709ef 100644 --- a/app/src/translations/cn.json +++ b/app/src/translations/cn.json @@ -109,7 +109,7 @@ "label.ultra": "超高 (UHD)", "label.close": "关闭", "label.media": null, - "label.appearence": null, + "label.appearance": null, "label.advanced": null, "label.addVideo": null, "label.promoteAllPeers": null, diff --git a/app/src/translations/cs.json b/app/src/translations/cs.json index 3eac16c..b5c48f0 100644 --- a/app/src/translations/cs.json +++ b/app/src/translations/cs.json @@ -108,7 +108,7 @@ "label.ultra": "Ultra (UHD)", "label.close": "Zavřít", "label.media": null, - "label.appearence": null, + "label.appearance": null, "label.advanced": null, "label.addVideo": null, "label.promoteAllPeers": null, diff --git a/app/src/translations/de.json b/app/src/translations/de.json index e2ecc02..6acb321 100644 --- a/app/src/translations/de.json +++ b/app/src/translations/de.json @@ -109,7 +109,7 @@ "label.ultra": "Ultra (UHD)", "label.close": "Schließen", "label.media": "Audio / Video", - "label.appearence": "Ansicht", + "label.appearance": "Ansicht", "label.advanced": "Erweitert", "label.addVideo": "Video hinzufügen", "label.promoteAllPeers": "Alle Teilnehmer reinlassen", diff --git a/app/src/translations/dk.json b/app/src/translations/dk.json index c5c3a2d..ada9f33 100644 --- a/app/src/translations/dk.json +++ b/app/src/translations/dk.json @@ -109,7 +109,7 @@ "label.ultra": "Ultra (UHD)", "label.close": "Luk", "label.media": null, - "label.appearence": null, + "label.appearance": null, "label.advanced": null, "label.addVideo": null, "label.promoteAllPeers": null, diff --git a/app/src/translations/el.json b/app/src/translations/el.json index d71764f..4384c0a 100644 --- a/app/src/translations/el.json +++ b/app/src/translations/el.json @@ -109,7 +109,7 @@ "label.ultra": "Ultra (UHD)", "label.close": "Κλείσιμο", "label.media": null, - "label.appearence": null, + "label.appearance": null, "label.advanced": null, "label.addVideo": null, "label.promoteAllPeers": null, diff --git a/app/src/translations/en.json b/app/src/translations/en.json index 344d660..a8ec093 100644 --- a/app/src/translations/en.json +++ b/app/src/translations/en.json @@ -109,7 +109,7 @@ "label.ultra": "Ultra (UHD)", "label.close": "Close", "label.media": "Media", - "label.appearence": "Appearence", + "label.appearance": "Appearence", "label.advanced": "Advanced", "label.addVideo": "Add video", "label.promoteAllPeers": "Promote all", diff --git a/app/src/translations/es.json b/app/src/translations/es.json index 758b0c8..21e711d 100644 --- a/app/src/translations/es.json +++ b/app/src/translations/es.json @@ -109,7 +109,7 @@ "label.ultra": "Ultra (UHD)", "label.close": "Cerrar", "label.media": null, - "label.appearence": null, + "label.appearance": null, "label.advanced": null, "label.addVideo": null, "label.promoteAllPeers": null, diff --git a/app/src/translations/fr.json b/app/src/translations/fr.json index 2eb7edf..aad845d 100644 --- a/app/src/translations/fr.json +++ b/app/src/translations/fr.json @@ -109,7 +109,7 @@ "label.ultra": "Ultra Haute Définition", "label.close": "Fermer", "label.media": null, - "label.appearence": null, + "label.appearance": null, "label.advanced": null, "label.addVideo": null, "label.promoteAllPeers": null, diff --git a/app/src/translations/hr.json b/app/src/translations/hr.json index c0f8879..ac554d8 100644 --- a/app/src/translations/hr.json +++ b/app/src/translations/hr.json @@ -109,7 +109,7 @@ "label.ultra": "Ultra visoka (UHD)", "label.close": "Zatvori", "label.media": "Medij", - "label.appearence": "Prikaz", + "label.appearance": "Prikaz", "label.advanced": "Napredno", "label.addVideo": "Dodaj video", "label.promoteAllPeers": "Promoviraj sve", diff --git a/app/src/translations/hu.json b/app/src/translations/hu.json index cf65f1d..88fccce 100644 --- a/app/src/translations/hu.json +++ b/app/src/translations/hu.json @@ -109,7 +109,7 @@ "label.ultra": "Ultra magas (UHD)", "label.close": "Bezár", "label.media": "Média", - "label.appearence": "Megjelenés", + "label.appearance": "Megjelenés", "label.advanced": "Részletek", "label.addVideo": "Videó hozzáadása", "label.promoteAllPeers": "Mindenkit beengedek", diff --git a/app/src/translations/it.json b/app/src/translations/it.json index 312a2ff..ae210c5 100644 --- a/app/src/translations/it.json +++ b/app/src/translations/it.json @@ -109,7 +109,7 @@ "label.ultra": "Ultra (UHD)", "label.close": "Chiudi", "label.media": "Media", - "label.appearence": "Aspetto", + "label.appearance": "Aspetto", "label.advanced": "Avanzate", "label.addVideo": "Aggiungi video", "label.promoteAllPeers": "Promuovi tutti", diff --git a/app/src/translations/lv.json b/app/src/translations/lv.json index 7bf0b24..7a38196 100644 --- a/app/src/translations/lv.json +++ b/app/src/translations/lv.json @@ -107,7 +107,7 @@ "label.ultra": "Ultra (UHD)", "label.close": "Aizvērt", "label.media": "Mediji", - "label.appearence": "Izskats", + "label.appearance": "Izskats", "label.advanced": "Advancēts", "label.addVideo": "Pievienot video", "label.moreActions": null, diff --git a/app/src/translations/nb.json b/app/src/translations/nb.json index 251858b..b755d6e 100644 --- a/app/src/translations/nb.json +++ b/app/src/translations/nb.json @@ -109,7 +109,7 @@ "label.ultra": "Ultra (UHD)", "label.close": "Lukk", "label.media": "Media", - "label.appearence": "Utseende", + "label.appearance": "Utseende", "label.advanced": "Avansert", "label.addVideo": "Legg til video", "label.promoteAllPeers": "Slipp inn alle", diff --git a/app/src/translations/pl.json b/app/src/translations/pl.json index 174684c..142bf34 100644 --- a/app/src/translations/pl.json +++ b/app/src/translations/pl.json @@ -109,7 +109,7 @@ "label.ultra": "Ultra (UHD)", "label.close": "Zamknij", "label.media": "Media", - "label.appearence": "Wygląd", + "label.appearance": "Wygląd", "label.advanced": "Zaawansowane", "label.addVideo": "Dodaj wideo", "label.promoteAllPeers": "Wpuść wszystkich", diff --git a/app/src/translations/pt.json b/app/src/translations/pt.json index 8250231..3b79148 100644 --- a/app/src/translations/pt.json +++ b/app/src/translations/pt.json @@ -109,7 +109,7 @@ "label.ultra": "Ultra (UHD)", "label.close": "Fechar", "label.media": null, - "label.appearence": null, + "label.appearance": null, "label.advanced": null, "label.addVideo": null, "label.promoteAllPeers": null, diff --git a/app/src/translations/ro.json b/app/src/translations/ro.json index 1ba455c..ab70c94 100644 --- a/app/src/translations/ro.json +++ b/app/src/translations/ro.json @@ -109,7 +109,7 @@ "label.ultra": "Rezoluție ultra înaltă (UHD)", "label.close": "Închide", "label.media": null, - "label.appearence": null, + "label.appearance": null, "label.advanced": null, "label.addVideo": null, "label.promoteAllPeers": null, diff --git a/app/src/translations/tr.json b/app/src/translations/tr.json index 524c557..2716d13 100644 --- a/app/src/translations/tr.json +++ b/app/src/translations/tr.json @@ -109,7 +109,7 @@ "label.ultra": "Ultra (UHD)", "label.close": "Kapat", "label.media": null, - "label.appearence": null, + "label.appearance": null, "label.advanced": null, "label.addVideo": null, "label.promoteAllPeers": null, diff --git a/app/src/translations/uk.json b/app/src/translations/uk.json index a8cc077..b6b6526 100644 --- a/app/src/translations/uk.json +++ b/app/src/translations/uk.json @@ -109,7 +109,7 @@ "label.ultra": "Ультра (UHD)", "label.close": "Закрити", "label.media": null, - "label.appearence": null, + "label.appearance": null, "label.advanced": null, "label.addVideo": null, "label.promoteAllPeers": null, From 41d62cf9b808d71425858ffea9be11aafcdafc27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Wed, 13 May 2020 07:57:38 +0200 Subject: [PATCH 09/43] Update hungarian translation --- app/src/translations/hu.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/translations/hu.json b/app/src/translations/hu.json index 4a2cc50..dee4034 100644 --- a/app/src/translations/hu.json +++ b/app/src/translations/hu.json @@ -84,9 +84,9 @@ "tooltip.muteParticipantVideo": "Résztvevő videóstreamének némítása", "tooltip.raisedHand": "Jelentkezés", "tooltip.muteScreenSharing": "Képernyőmegosztás szüneteltetése", - "tooltip.muteParticipantAudioModerator": null, - "tooltip.muteParticipantVideoModerator": null, - "tooltip.muteScreenSharingModerator": null, + "tooltip.muteParticipantAudioModerator": "Résztvevő hangjának általános némítása", + "tooltip.muteParticipantVideoModerator": "Résztvevő videójának általános némítása", + "tooltip.muteScreenSharingModerator": "Résztvevő képernyőmegosztásának általános némítása", "label.roomName": "Konferencia", "label.chooseRoomButton": "Tovább", @@ -141,7 +141,7 @@ "settings.echoCancellation": "Visszhangelnyomás", "settings.autoGainControl": "Automatikus hangerő", "settings.noiseSuppression": "Zajelnyomás", - "settings.drawerOverlayed": null, + "settings.drawerOverlayed": "Oldalsáv a tartalom felett", "filesharing.saveFileError": "A file-t nem sikerült elmenteni", "filesharing.startingFileShare": "Fájl megosztása", From e4f6bde1647d9e9d6b8fd48e38d6c367e8aee455 Mon Sep 17 00:00:00 2001 From: Astagor Date: Wed, 13 May 2020 08:27:21 +0200 Subject: [PATCH 10/43] Added description of arrow keys for browsing passive peers into spotlight --- app/src/components/Controls/Help.js | 3 ++- app/src/translations/cn.json | 1 + app/src/translations/cs.json | 1 + app/src/translations/de.json | 1 + app/src/translations/dk.json | 1 + app/src/translations/el.json | 1 + app/src/translations/en.json | 1 + app/src/translations/es.json | 1 + app/src/translations/fr.json | 1 + app/src/translations/hr.json | 1 + app/src/translations/hu.json | 1 + app/src/translations/it.json | 1 + app/src/translations/lv.json | 1 + app/src/translations/nb.json | 1 + app/src/translations/pl.json | 1 + app/src/translations/pt.json | 1 + app/src/translations/ro.json | 1 + app/src/translations/tr.json | 1 + app/src/translations/uk.json | 1 + 19 files changed, 20 insertions(+), 1 deletion(-) diff --git a/app/src/components/Controls/Help.js b/app/src/components/Controls/Help.js index 98415b5..534f3e2 100644 --- a/app/src/components/Controls/Help.js +++ b/app/src/components/Controls/Help.js @@ -23,7 +23,8 @@ const shortcuts=[ { key: '1', label: 'label.democratic', defaultMessage: 'Democratic View' }, { key: '2', label: 'label.filmstrip', defaultMessage: 'Filmstrip View' }, { key: 'space', label: 'me.mutedPTT', defaultMessage: 'Push SPACE to talk' }, - { key: 'a', label: 'label.advanced', defaultMessage: 'Show advanced information' } + { key: 'a', label: 'label.advanced', defaultMessage: 'Show advanced information' }, + { key: String.fromCharCode(8592)+' '+String.fromCharCode(8594), label: 'room.browsePeersSpotlight', defaultMessage: 'Browse participants into Spotlight' } ]; const styles = (theme) => ({ diff --git a/app/src/translations/cn.json b/app/src/translations/cn.json index 0ae3fe0..2e4338c 100644 --- a/app/src/translations/cn.json +++ b/app/src/translations/cn.json @@ -63,6 +63,7 @@ "room.help": null, "room.about": null, "room.shortcutKeys": null, + "room.browsePeersSpotlight": null, "me.mutedPTT": null, diff --git a/app/src/translations/cs.json b/app/src/translations/cs.json index 8edfc1c..b76dc3b 100644 --- a/app/src/translations/cs.json +++ b/app/src/translations/cs.json @@ -62,6 +62,7 @@ "room.help": null, "room.about": null, "room.shortcutKeys": null, + "room.browsePeersSpotlight": null, "me.mutedPTT": null, diff --git a/app/src/translations/de.json b/app/src/translations/de.json index 0a2368a..e0cf1da 100644 --- a/app/src/translations/de.json +++ b/app/src/translations/de.json @@ -63,6 +63,7 @@ "room.help": "Hilfe", "room.about": "Über", "room.shortcutKeys": "Tastaturkürzel", + "room.browsePeersSpotlight": null, "me.mutedPTT": "Du bist stummgeschaltet. Halte die SPACE-Taste um zu sprechen", diff --git a/app/src/translations/dk.json b/app/src/translations/dk.json index fb9e6fc..0236280 100644 --- a/app/src/translations/dk.json +++ b/app/src/translations/dk.json @@ -63,6 +63,7 @@ "room.help": null, "room.about": null, "room.shortcutKeys": null, + "room.browsePeersSpotlight": null, "me.mutedPTT": null, diff --git a/app/src/translations/el.json b/app/src/translations/el.json index 2d9cb94..25df1a7 100644 --- a/app/src/translations/el.json +++ b/app/src/translations/el.json @@ -63,6 +63,7 @@ "room.help": null, "room.about": null, "room.shortcutKeys": null, + "room.browsePeersSpotlight": null, "me.mutedPTT": null, diff --git a/app/src/translations/en.json b/app/src/translations/en.json index 5014089..6237516 100644 --- a/app/src/translations/en.json +++ b/app/src/translations/en.json @@ -63,6 +63,7 @@ "room.help": "Help", "room.about": "About", "room.shortcutKeys": "Shortcut Keys", + "room.browsePeersSpotlight": null, "me.mutedPTT": "You are muted, hold down SPACE-BAR to talk", diff --git a/app/src/translations/es.json b/app/src/translations/es.json index 629bb2a..8075ff5 100644 --- a/app/src/translations/es.json +++ b/app/src/translations/es.json @@ -63,6 +63,7 @@ "room.help": null, "room.about": null, "room.shortcutKeys": null, + "room.browsePeersSpotlight": null, "me.mutedPTT": null, diff --git a/app/src/translations/fr.json b/app/src/translations/fr.json index 9776ac0..ea87e99 100644 --- a/app/src/translations/fr.json +++ b/app/src/translations/fr.json @@ -63,6 +63,7 @@ "room.help": null, "room.about": null, "room.shortcutKeys": null, + "room.browsePeersSpotlight": null, "me.mutedPTT": null, diff --git a/app/src/translations/hr.json b/app/src/translations/hr.json index 4788483..ef72efa 100644 --- a/app/src/translations/hr.json +++ b/app/src/translations/hr.json @@ -63,6 +63,7 @@ "room.help": null, "room.about": null, "room.shortcutKeys": null, + "room.browsePeersSpotlight": null, "me.mutedPTT": "Utišani ste, pritisnite i držite SPACE tipku za razgovor", diff --git a/app/src/translations/hu.json b/app/src/translations/hu.json index dee4034..58d485a 100644 --- a/app/src/translations/hu.json +++ b/app/src/translations/hu.json @@ -63,6 +63,7 @@ "room.help": "Segítség", "room.about": "Névjegy", "room.shortcutKeys": "Billentyűparancsok", + "room.browsePeersSpotlight": null, "me.mutedPTT": "Némítva vagy, ha beszélnél nyomd le a szóköz billentyűt", diff --git a/app/src/translations/it.json b/app/src/translations/it.json index 7a8bf62..243eaca 100644 --- a/app/src/translations/it.json +++ b/app/src/translations/it.json @@ -63,6 +63,7 @@ "room.help": "Aiuto", "room.about": "Informazioni su", "room.shortcutKeys": "Scorciatoie da tastiera", + "room.browsePeersSpotlight": null, "me.mutedPTT": "Sei mutato, tieni premuto SPAZIO per parlare", diff --git a/app/src/translations/lv.json b/app/src/translations/lv.json index 27adce1..824e26b 100644 --- a/app/src/translations/lv.json +++ b/app/src/translations/lv.json @@ -62,6 +62,7 @@ "room.help": null, "room.about": null, "room.shortcutKeys": null, + "room.browsePeersSpotlight": null, "me.mutedPTT": "Jūs esat noklusināts. Turiet taustiņu SPACE-BAR, lai runātu", diff --git a/app/src/translations/nb.json b/app/src/translations/nb.json index 172fcf9..10f387a 100644 --- a/app/src/translations/nb.json +++ b/app/src/translations/nb.json @@ -63,6 +63,7 @@ "room.help": null, "room.about": null, "room.shortcutKeys": null, + "room.browsePeersSpotlight": null, "me.mutedPTT": "Du er dempet, hold nede SPACE for å snakke", diff --git a/app/src/translations/pl.json b/app/src/translations/pl.json index dd12971..948a62d 100644 --- a/app/src/translations/pl.json +++ b/app/src/translations/pl.json @@ -63,6 +63,7 @@ "room.help": "Pomoc", "room.about": "O pogramie", "room.shortcutKeys": "Skróty klawiaturowe", + "room.browsePeersSpotlight": null, "me.mutedPTT": "Masz wyciszony mikrofon, przytrzymaj spację aby mówić", diff --git a/app/src/translations/pt.json b/app/src/translations/pt.json index 13fd0f6..b354e65 100644 --- a/app/src/translations/pt.json +++ b/app/src/translations/pt.json @@ -63,6 +63,7 @@ "room.help": null, "room.about": null, "room.shortcutKeys": null, + "room.browsePeersSpotlight": null, "me.mutedPTT": null, diff --git a/app/src/translations/ro.json b/app/src/translations/ro.json index 8e05b0b..d718998 100644 --- a/app/src/translations/ro.json +++ b/app/src/translations/ro.json @@ -63,6 +63,7 @@ "room.help": null, "room.about": null, "room.shortcutKeys": null, + "room.browsePeersSpotlight": null, "me.mutedPTT": null, diff --git a/app/src/translations/tr.json b/app/src/translations/tr.json index dc05c2f..8647707 100644 --- a/app/src/translations/tr.json +++ b/app/src/translations/tr.json @@ -63,6 +63,7 @@ "room.help": null, "room.about": null, "room.shortcutKeys": null, + "room.browsePeersSpotlight": null, "me.mutedPTT": null, diff --git a/app/src/translations/uk.json b/app/src/translations/uk.json index b06aef4..dce9425 100644 --- a/app/src/translations/uk.json +++ b/app/src/translations/uk.json @@ -63,6 +63,7 @@ "room.help": null, "room.about": null, "room.shortcutKeys": null, + "room.browsePeersSpotlight": null, "me.mutedPTT": null, From 8d9a045f328c52fa0ad282cc84ec17541c31f13e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9sz=C3=A1ros=20Mih=C3=A1ly?= Date: Wed, 13 May 2020 09:06:06 +0200 Subject: [PATCH 11/43] Add autoMuteThreshold --- app/public/config/config.example.js | 32 +++++++++++++++++++---------- app/src/RoomClient.js | 4 +++- app/src/reducers/settings.js | 1 + 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/app/public/config/config.example.js b/app/public/config/config.example.js index 7909284..3126613 100644 --- a/app/public/config/config.example.js +++ b/app/public/config/config.example.js @@ -52,26 +52,36 @@ var config = noiseSuppression : true, sampleSize : 16 }, - background : 'images/background.jpg', - defaultLayout : 'democratic', // democratic, filmstrip + + /** + * Set the auto mute / Push To Talk threshold + * default value is 4 + * + * Set it to 0 to disable auto mute functionality, + * but use it with caution + * full mesh audio strongly decrease room capacity! + */ + autoMuteThreshold : 4, + background : 'images/background.jpg', + defaultLayout : 'democratic', // democratic, filmstrip // If true, will show media control buttons in separate // control bar, not in the ME container. - buttonControlBar : false, + buttonControlBar : false, // If false, will push videos away to make room for side // drawer. If true, will overlay side drawer over videos - drawerOverlayed : true, + drawerOverlayed : true, // Timeout for autohiding topbar and button control bar - hideTimeout : 3000, - lastN : 4, - mobileLastN : 1, + hideTimeout : 3000, + lastN : 4, + mobileLastN : 1, // Highest number of speakers user can select - maxLastN : 5, + maxLastN : 5, // If truthy, users can NOT change number of speakers visible - lockLastN : false, + lockLastN : false, // Add file and uncomment for adding logo to appbar // logo : 'images/logo.svg', - title : 'Multiparty meeting', - theme : + title : 'Multiparty meeting', + theme : { palette : { diff --git a/app/src/RoomClient.js b/app/src/RoomClient.js index 2217d65..9635408 100644 --- a/app/src/RoomClient.js +++ b/app/src/RoomClient.js @@ -2960,7 +2960,9 @@ export default class RoomClient if (!this._muted) { await this.enableMic(); - if (peers.length > 4) + const { autoMuteThreshold } = store.getState().settings; + + if (autoMuteThreshold && peers.length > autoMuteThreshold) this.muteMic(); } diff --git a/app/src/reducers/settings.js b/app/src/reducers/settings.js index 1c375bf..f810d3a 100644 --- a/app/src/reducers/settings.js +++ b/app/src/reducers/settings.js @@ -20,6 +20,7 @@ const initialState = notificationSounds : true, buttonControlBar : window.config.buttonControlBar || false, drawerOverlayed : window.config.drawerOverlayed || true, + autoMuteThreshold : window.config.autoMuteThreshold || 4, ...window.config.defaultAudio }; From 774532e33ee979fa6f14a7815e4119f7b280b9b2 Mon Sep 17 00:00:00 2001 From: Yi Kuo Date: Wed, 13 May 2020 15:12:21 +0800 Subject: [PATCH 12/43] Create zh-Hant translation --- app/src/index.js | 16 ++- app/src/translations/tw.json | 190 +++++++++++++++++++++++++++++++++++ 2 files changed, 203 insertions(+), 3 deletions(-) create mode 100644 app/src/translations/tw.json diff --git a/app/src/index.js b/app/src/index.js index e89d06d..0a9228c 100644 --- a/app/src/index.js +++ b/app/src/index.js @@ -31,7 +31,8 @@ import messagesFrench from './translations/fr'; import messagesGreek from './translations/el'; import messagesRomanian from './translations/ro'; import messagesPortuguese from './translations/pt'; -import messagesChinese from './translations/cn'; +import messagesChineseSimplified from './translations/cn'; +import messagesChineseTraditional from './translations/tw'; import messagesSpanish from './translations/es'; import messagesCroatian from './translations/hr'; import messagesCzech from './translations/cs'; @@ -58,7 +59,8 @@ const messages = 'el' : messagesGreek, 'ro' : messagesRomanian, 'pt' : messagesPortuguese, - 'zh' : messagesChinese, + 'zh-hans' : messagesChineseSimplified, + 'zh-hant' : messagesChineseTraditional, 'es' : messagesSpanish, 'hr' : messagesCroatian, 'cs' : messagesCzech, @@ -68,7 +70,15 @@ const messages = 'lv' : messagesLatvian }; -const locale = navigator.language.split(/[-_]/)[0]; // language without region code +let browserLanguage = (navigator.language || navigator.browserLanguage).toLowerCase() +let locale = browserLanguage.split(/[-_]/)[0]; // language without region code +if (locale === 'zh') +{ + if (browserLanguage === 'zh-cn') + locale = 'zh-hans' + else + locale = 'zh-hant' +} const intl = createIntl({ locale, diff --git a/app/src/translations/tw.json b/app/src/translations/tw.json new file mode 100644 index 0000000..83f0c02 --- /dev/null +++ b/app/src/translations/tw.json @@ -0,0 +1,190 @@ +{ + "socket.disconnected": "您已斷開連接", + "socket.reconnecting": "嘗試重新連接", + "socket.reconnected": "您已重新連接", + "socket.requestError": "服務器請求錯誤", + + "room.chooseRoom": "選擇您要加入的房間的名稱", + "room.cookieConsent": "這個網站使用Cookies來提升您的使用者體驗", + "room.consentUnderstand": "了解", + "room.joined": "您已加入房間", + "room.cantJoin": "無法加入房間", + "room.youLocked": "您已鎖定房間", + "room.cantLock": "無法鎖定房間", + "room.youUnLocked": "您解鎖了房間", + "room.cantUnLock": "無法解鎖房間", + "room.locked": "房間已鎖定", + "room.unlocked": "房間現已解鎖", + "room.newLobbyPeer": "新參與者進入大廳", + "room.lobbyPeerLeft": "參與者離開大廳", + "room.lobbyPeerChangedDisplayName": "大廳的參與者將名稱變更為 {displayName}", + "room.lobbyPeerChangedPicture": "大廳的參與者變更了圖片", + "room.setAccessCode": "設置房間的進入密碼", + "room.accessCodeOn": "房間的進入密碼現已啟用", + "room.accessCodeOff": "房間的進入密碼已停用", + "room.peerChangedDisplayName": "{oldDisplayName} 已變更名稱為 {displayName}", + "room.newPeer": "{displayName} 加入了會議室", + "room.newFile": "有新文件", + "room.toggleAdvancedMode": "切換進階模式", + "room.setDemocraticView": "已更改為使用者佈局", + "room.setFilmStripView": "已更改為投影片佈局", + "room.loggedIn": "您已登入", + "room.loggedOut": "您已登出", + "room.changedDisplayName": "您的顯示名稱已變更為 {displayName}", + "room.changeDisplayNameError": "更改顯示名稱時發生錯誤", + "room.chatError": "無法發送聊天消息", + "room.aboutToJoin": "您即將參加會議", + "room.roomId": "房間ID: {roomName}", + "room.setYourName": "設置您的顯示名稱,並選擇您想加入的方式:", + "room.audioOnly": "僅通話", + "room.audioVideo": "通話和視訊", + "room.youAreReady": "準備完畢!", + "room.emptyRequireLogin": "房間是空的! 您可以登錄以開始會議或等待主持人加入", + "room.locketWait": "房間已鎖定! 請等待其他人允許您進入...", + "room.lobbyAdministration": "大廳管理", + "room.peersInLobby": "大廳的參與者", + "room.lobbyEmpty": "大廳目前沒有人", + "room.hiddenPeers": "{hiddenPeersCount, plural, one {participant} other {participants}}", + "room.me": "我", + "room.spotlights": "Spotlight中的參與者", + "room.passive": "被動參與者", + "room.videoPaused": "視訊已關閉", + "room.muteAll": "全部靜音", + "room.stopAllVideo": "關閉全部視訊", + "room.closeMeeting": "關閉會議", + "room.clearChat": "清除聊天", + "room.clearFileSharing": "清除檔案", + "room.speechUnsupported": "您的瀏覽器不支援語音辨識", + "room.moderatoractions": "管理員動作", + "room.raisedHand": "{displayName} 舉手了", + "room.loweredHand": "{displayName} 放下了他的手", + "room.extraVideo": "其他視訊", + "room.overRoomLimit": "房間已滿,請稍後重試", + "room.help": "幫助", + "room.about": "關於", + "room.shortcutKeys": "鍵盤快速鍵", + + "me.mutedPTT": "您已靜音,請按下 空白鍵 來說話", + + "roles.gotRole": "您已取得身份: {role}", + "roles.lostRole": "您的 {role} 身份已被撤銷", + + "tooltip.login": "登入", + "tooltip.logout": "登出", + "tooltip.admitFromLobby": "從大廳允許", + "tooltip.lockRoom": "鎖定房間", + "tooltip.unLockRoom": "解鎖房間", + "tooltip.enterFullscreen": "進入全螢幕", + "tooltip.leaveFullscreen": "退出全螢幕", + "tooltip.lobby": "顯示大廳", + "tooltip.settings": "顯示設置", + "tooltip.participants": "顯示參加者", + "tooltip.kickParticipant": "踢出", + "tooltip.muteParticipant": "靜音", + "tooltip.muteParticipantVideo": "隱藏視訊", + "tooltip.raisedHand": "舉手", + "tooltip.muteScreenSharing": "隱藏螢幕分享", + "tooltip.muteParticipantAudioModerator": "關閉聲音", + "tooltip.muteParticipantVideoModerator": "關閉視訊", + "tooltip.muteScreenSharingModerator": "關閉螢幕分享", + + "label.roomName": "房間名稱", + "label.chooseRoomButton": "繼續", + "label.yourName": "您的名字", + "label.newWindow": "新視窗", + "label.fullscreen": "全螢幕", + "label.openDrawer": "打開側邊欄", + "label.leave": "離開", + "label.chatInput": "輸入聊天訊息", + "label.chat": "聊天", + "label.filesharing": "文件分享", + "label.participants": "參與者", + "label.shareFile": "分享文件", + "label.shareGalleryFile": "分享圖片", + "label.fileSharingUnsupported": "不支援文件分享", + "label.unknown": "未知", + "label.democratic": "使用者佈局", + "label.filmstrip": "投影片佈局", + "label.low": "低", + "label.medium": "中", + "label.high": "高 (HD)", + "label.veryHigh": "非常高 (FHD)", + "label.ultra": "超高 (UHD)", + "label.close": "關閉", + "label.media": "媒體", + "label.appearance": "外觀", + "label.advanced": "進階", + "label.addVideo": "新增視訊", + "label.promoteAllPeers": "提升全部", + "label.moreActions": "更多", + + "settings.settings": "設置", + "settings.camera": "視訊來源", + "settings.selectCamera": "選擇視訊來源", + "settings.cantSelectCamera": "無法選擇此視訊來源", + "settings.audio": "音訊來源", + "settings.selectAudio": "選擇音訊來源", + "settings.cantSelectAudio": "無法選擇音訊來源", + "settings.audioOutput": "音訊輸出", + "settings.selectAudioOutput": "選擇音訊輸出設備", + "settings.cantSelectAudioOutput": "無法選擇音訊輸出設備", + "settings.resolution": "選擇視訊解析度", + "settings.layout": "房間佈局", + "settings.selectRoomLayout": "選擇房間佈局", + "settings.advancedMode": "進階模式", + "settings.permanentTopBar": "固定頂端列", + "settings.lastn": "視訊數量上限", + "settings.hiddenControls": "隱藏控制按鈕", + "settings.notificationSounds": "通知音效", + "settings.showNotifications": "顯示通知", + "settings.buttonControlBar": "獨立控制按鈕", + "settings.echoCancellation": "回音消除", + "settings.autoGainControl": "自動增益控制", + "settings.noiseSuppression": "噪音消除", + "settings.drawerOverlayed": "側邊欄覆蓋畫面", + + "filesharing.saveFileError": "無法保存文件", + "filesharing.startingFileShare": "開始分享文件", + "filesharing.successfulFileShare": "文件已成功分享", + "filesharing.unableToShare": "無法分享文件", + "filesharing.error": "文件分享發生錯誤", + "filesharing.finished": "文件分享成功", + "filesharing.save": "保存文件", + "filesharing.sharedFile": "{displayName} 分享了一個文件", + "filesharing.download": "下載文件", + "filesharing.missingSeeds": "如果過了很久還是無法下載,則可能沒有人播種了。請讓上傳者重新上傳您想要的文件。", + + "devices.devicesChanged": "您的設備已更改,請在設置中設定您的設備", + + "device.audioUnsupported": "不支援您的音訊格式", + "device.activateAudio": "開啟音訊", + "device.muteAudio": "靜音", + "device.unMuteAudio": "取消靜音", + + "device.videoUnsupported": "不支援您的視訊格式", + "device.startVideo": "開啟視訊", + "device.stopVideo": "關閉視訊", + + "device.screenSharingUnsupported": "不支援您的螢幕分享格式", + "device.startScreenSharing": "開始螢幕分享", + "device.stopScreenSharing": "停止螢幕分享", + + "devices.microphoneDisconnected": "麥克風已斷開", + "devices.microphoneError": "麥克風發生錯誤", + "devices.microphoneMute": "麥克風靜音", + "devices.microphoneUnMute": "取消麥克風靜音", + "devices.microphoneEnable": "麥克風已啟用", + "devices.microphoneMuteError": "無法使麥克風靜音", + "devices.microphoneUnMuteError": "無法取消麥克風靜音", + + "devices.screenSharingDisconnected" : "螢幕分享已斷開", + "devices.screenSharingError": "螢幕分享時發生錯誤", + + "devices.cameraDisconnected": "相機已斷開連接", + "devices.cameraError": "存取相機時發生錯誤", + + "moderator.clearChat": "管理員清除了聊天", + "moderator.clearFiles": "管理員清除了所有檔案", + "moderator.muteAudio": "您已被管理員靜音", + "moderator.muteVideo": "您的視訊已被管理員關閉" +} \ No newline at end of file From cbbfd1b26fb671c59bfe5c31a80cc8c9130be84c Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 12 May 2020 19:04:41 +0200 Subject: [PATCH 13/43] Moderator: disable screen sharing --- app/src/RoomClient.js | 36 ++++++++++++++++++- app/src/actions/peerActions.js | 7 ++++ .../MeetingDrawer/ParticipantList/ListPeer.js | 27 ++++++++++++++ app/src/reducers/peers.js | 6 ++++ app/src/translations/en.json | 3 +- server/lib/Room.js | 19 ++++++++++ 6 files changed, 96 insertions(+), 2 deletions(-) diff --git a/app/src/RoomClient.js b/app/src/RoomClient.js index 3d63d26..bb16d82 100644 --- a/app/src/RoomClient.js +++ b/app/src/RoomClient.js @@ -1442,6 +1442,26 @@ export default class RoomClient peerActions.setStopPeerVideoInProgress(peerId, false)); } + async stopPeerScreenSharing(peerId) + { + logger.debug('stopPeerScreenSharing() [peerId:"%s"]', peerId); + + store.dispatch( + peerActions.setStopPeerScreenSharingInProgress(peerId, true)); + + try + { + await this.sendRequest('moderator:stopScreenSharing', { peerId }); + } + catch (error) + { + logger.error('stopPeerScreenSharing() failed: %o', error); + } + + store.dispatch( + peerActions.setStopPeerScreenSharingInProgress(peerId, false)); + } + async muteAllPeers() { logger.debug('muteAllPeers()'); @@ -2602,7 +2622,6 @@ export default class RoomClient case 'moderator:stopVideo': { this.disableWebcam(); - this.disableScreenSharing(); store.dispatch(requestActions.notify( { @@ -2615,6 +2634,21 @@ export default class RoomClient break; } + case 'moderator:stopScreenSharing': + { + this.disableScreenSharing(); + + store.dispatch(requestActions.notify( + { + text : intl.formatMessage({ + id : 'moderator.muteScreenSharingModerator', + defaultMessage : 'Moderator stopped your screen sharing' + }) + })); + + break; + } + case 'moderator:kick': { // Need some feedback diff --git a/app/src/actions/peerActions.js b/app/src/actions/peerActions.js index 5672b47..8a67371 100644 --- a/app/src/actions/peerActions.js +++ b/app/src/actions/peerActions.js @@ -86,3 +86,10 @@ export const setStopPeerVideoInProgress = (peerId, flag) => type : 'STOP_PEER_VIDEO_IN_PROGRESS', payload : { peerId, flag } }); + +export const setStopPeerScreenSharingInProgress = (peerId, flag) => +({ + type : 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS', + payload : { peerId, flag } +}); + diff --git a/app/src/components/MeetingDrawer/ParticipantList/ListPeer.js b/app/src/components/MeetingDrawer/ParticipantList/ListPeer.js index 0ca5d89..5d11998 100644 --- a/app/src/components/MeetingDrawer/ParticipantList/ListPeer.js +++ b/app/src/components/MeetingDrawer/ParticipantList/ListPeer.js @@ -306,6 +306,33 @@ const ListPeer = (props) => } + { isModerator && screenConsumer && + + + { + e.stopPropagation(); + + roomClient.stopPeerScreenSharing(peer.id); + }} + > + { !screenConsumer.remotelyPaused ? + + : + + } + + + } {children} ); diff --git a/app/src/reducers/peers.js b/app/src/reducers/peers.js index 32d6fef..8e6a7f7 100644 --- a/app/src/reducers/peers.js +++ b/app/src/reducers/peers.js @@ -82,6 +82,11 @@ const peer = (state = initialState, action) => stopPeerVideoInProgress : action.payload.flag }; + case 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS': + return { + ...state, + stopPeerScreenSharingInProgress : action.payload.flag + }; default: return state; } @@ -118,6 +123,7 @@ const peers = (state = initialState, action) => case 'REMOVE_PEER_ROLE': case 'STOP_PEER_AUDIO_IN_PROGRESS': case 'STOP_PEER_VIDEO_IN_PROGRESS': + case 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS': { const oldPeer = state[action.payload.peerId]; diff --git a/app/src/translations/en.json b/app/src/translations/en.json index 6237516..e56fc8f 100644 --- a/app/src/translations/en.json +++ b/app/src/translations/en.json @@ -187,5 +187,6 @@ "moderator.clearChat": "Moderator cleared the chat", "moderator.clearFiles": "Moderator cleared the files", "moderator.muteAudio": "Moderator muted your audio", - "moderator.muteVideo": "Moderator muted your video" + "moderator.muteVideo": "Moderator muted your video", + "moderator.muteScreenSharing": "Moderator muted your screen sharing" } \ No newline at end of file diff --git a/server/lib/Room.js b/server/lib/Room.js index 74accc4..0610ffe 100644 --- a/server/lib/Room.js +++ b/server/lib/Room.js @@ -1441,6 +1441,25 @@ class Room extends EventEmitter break; } + case 'moderator:stopScreenSharing': + { + if (!this._hasPermission(peer, MODERATE_ROOM)) + throw new Error('peer not authorized'); + + const { peerId } = request.data; + + const stopVideoPeer = this._peers[peerId]; + + if (!stopVideoPeer) + throw new Error(`peer with id "${peerId}" not found`); + + this._notification(stopVideoPeer.socket, 'moderator:stopScreenSharing'); + + cb(); + + break; + } + case 'moderator:closeMeeting': { if (!this._hasPermission(peer, MODERATE_ROOM)) From 69244bdf1263b4b6e547b09a36356b110d3b3527 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 12 May 2020 19:31:51 +0200 Subject: [PATCH 14/43] Lint fix --- app/src/actions/peerActions.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/actions/peerActions.js b/app/src/actions/peerActions.js index 8a67371..b40d486 100644 --- a/app/src/actions/peerActions.js +++ b/app/src/actions/peerActions.js @@ -88,8 +88,8 @@ export const setStopPeerVideoInProgress = (peerId, flag) => }); export const setStopPeerScreenSharingInProgress = (peerId, flag) => -({ - type : 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS', - payload : { peerId, flag } -}); + ({ + type : 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS', + payload : { peerId, flag } + }); From f54ed84edb3080c3d941c6ef1092bc7e49bf0621 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 13 May 2020 10:42:03 +0200 Subject: [PATCH 15/43] Moderator: Mute all screen sharing --- app/src/RoomClient.js | 20 +++++++++++++++++++ app/src/actions/roomActions.js | 6 ++++++ .../ParticipantList/ListModerator.js | 16 +++++++++++++++ .../MeetingDrawer/ParticipantList/ListPeer.js | 2 +- app/src/reducers/room.js | 3 +++ server/lib/Room.js | 13 ++++++++++++ 6 files changed, 59 insertions(+), 1 deletion(-) diff --git a/app/src/RoomClient.js b/app/src/RoomClient.js index bb16d82..4883595 100644 --- a/app/src/RoomClient.js +++ b/app/src/RoomClient.js @@ -1502,6 +1502,26 @@ export default class RoomClient roomActions.setStopAllVideoInProgress(false)); } + async stopAllPeerScreenSharing() + { + logger.debug('stopAllPeerScreenSharing()'); + + store.dispatch( + roomActions.setStopAllScreenSharingInProgress(true)); + + try + { + await this.sendRequest('moderator:stopAllScreenSharing'); + } + catch (error) + { + logger.error('stopAllPeerScreenSharing() failed: %o', error); + } + + store.dispatch( + roomActions.setStopAllScreenSharingInProgress(false)); + } + async closeMeeting() { logger.debug('closeMeeting()'); diff --git a/app/src/actions/roomActions.js b/app/src/actions/roomActions.js index 5ae45e3..a73e18a 100644 --- a/app/src/actions/roomActions.js +++ b/app/src/actions/roomActions.js @@ -164,6 +164,12 @@ export const setStopAllVideoInProgress = (flag) => payload : { flag } }); +export const setStopAllScreenSharingInProgress = (flag) => + ({ + type : 'STOP_ALL_SCREEN_SHARING_IN_PROGRESS', + payload : { flag } + }); + export const setCloseMeetingInProgress = (flag) => ({ type : 'CLOSE_MEETING_IN_PROGRESS', diff --git a/app/src/components/MeetingDrawer/ParticipantList/ListModerator.js b/app/src/components/MeetingDrawer/ParticipantList/ListModerator.js index c10506a..2fff283 100644 --- a/app/src/components/MeetingDrawer/ParticipantList/ListModerator.js +++ b/app/src/components/MeetingDrawer/ParticipantList/ListModerator.js @@ -63,6 +63,22 @@ const ListModerator = (props) => />
+ +
); diff --git a/app/src/reducers/peers.js b/app/src/reducers/peers.js index 32d6fef..8e6a7f7 100644 --- a/app/src/reducers/peers.js +++ b/app/src/reducers/peers.js @@ -82,6 +82,11 @@ const peer = (state = initialState, action) => stopPeerVideoInProgress : action.payload.flag }; + case 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS': + return { + ...state, + stopPeerScreenSharingInProgress : action.payload.flag + }; default: return state; } @@ -118,6 +123,7 @@ const peers = (state = initialState, action) => case 'REMOVE_PEER_ROLE': case 'STOP_PEER_AUDIO_IN_PROGRESS': case 'STOP_PEER_VIDEO_IN_PROGRESS': + case 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS': { const oldPeer = state[action.payload.peerId]; diff --git a/app/src/translations/en.json b/app/src/translations/en.json index ec6c612..1c9fdb2 100644 --- a/app/src/translations/en.json +++ b/app/src/translations/en.json @@ -187,5 +187,6 @@ "moderator.clearChat": "Moderator cleared the chat", "moderator.clearFiles": "Moderator cleared the files", "moderator.muteAudio": "Moderator muted your audio", - "moderator.muteVideo": "Moderator muted your video" + "moderator.muteVideo": "Moderator muted your video", + "moderator.muteScreenSharing": "Moderator muted your screen sharing" } diff --git a/server/lib/Room.js b/server/lib/Room.js index 74accc4..0610ffe 100644 --- a/server/lib/Room.js +++ b/server/lib/Room.js @@ -1441,6 +1441,25 @@ class Room extends EventEmitter break; } + case 'moderator:stopScreenSharing': + { + if (!this._hasPermission(peer, MODERATE_ROOM)) + throw new Error('peer not authorized'); + + const { peerId } = request.data; + + const stopVideoPeer = this._peers[peerId]; + + if (!stopVideoPeer) + throw new Error(`peer with id "${peerId}" not found`); + + this._notification(stopVideoPeer.socket, 'moderator:stopScreenSharing'); + + cb(); + + break; + } + case 'moderator:closeMeeting': { if (!this._hasPermission(peer, MODERATE_ROOM)) From e1f5f804b0882dc3c46556ca736f007186baa964 Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 12 May 2020 19:31:51 +0200 Subject: [PATCH 34/43] Lint fix --- app/src/actions/peerActions.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/actions/peerActions.js b/app/src/actions/peerActions.js index 8a67371..b40d486 100644 --- a/app/src/actions/peerActions.js +++ b/app/src/actions/peerActions.js @@ -88,8 +88,8 @@ export const setStopPeerVideoInProgress = (peerId, flag) => }); export const setStopPeerScreenSharingInProgress = (peerId, flag) => -({ - type : 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS', - payload : { peerId, flag } -}); + ({ + type : 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS', + payload : { peerId, flag } + }); From 13c38cecfd569a0d113b09d762659f0a45973043 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 13 May 2020 10:42:03 +0200 Subject: [PATCH 35/43] Moderator: Mute all screen sharing --- app/src/RoomClient.js | 20 +++++++++++++++++++ app/src/actions/roomActions.js | 6 ++++++ .../ParticipantList/ListModerator.js | 16 +++++++++++++++ .../MeetingDrawer/ParticipantList/ListPeer.js | 2 +- app/src/reducers/room.js | 3 +++ server/lib/Room.js | 13 ++++++++++++ 6 files changed, 59 insertions(+), 1 deletion(-) diff --git a/app/src/RoomClient.js b/app/src/RoomClient.js index ccd9d6e..a936a14 100644 --- a/app/src/RoomClient.js +++ b/app/src/RoomClient.js @@ -1508,6 +1508,26 @@ export default class RoomClient roomActions.setStopAllVideoInProgress(false)); } + async stopAllPeerScreenSharing() + { + logger.debug('stopAllPeerScreenSharing()'); + + store.dispatch( + roomActions.setStopAllScreenSharingInProgress(true)); + + try + { + await this.sendRequest('moderator:stopAllScreenSharing'); + } + catch (error) + { + logger.error('stopAllPeerScreenSharing() failed: %o', error); + } + + store.dispatch( + roomActions.setStopAllScreenSharingInProgress(false)); + } + async closeMeeting() { logger.debug('closeMeeting()'); diff --git a/app/src/actions/roomActions.js b/app/src/actions/roomActions.js index 5ae45e3..a73e18a 100644 --- a/app/src/actions/roomActions.js +++ b/app/src/actions/roomActions.js @@ -164,6 +164,12 @@ export const setStopAllVideoInProgress = (flag) => payload : { flag } }); +export const setStopAllScreenSharingInProgress = (flag) => + ({ + type : 'STOP_ALL_SCREEN_SHARING_IN_PROGRESS', + payload : { flag } + }); + export const setCloseMeetingInProgress = (flag) => ({ type : 'CLOSE_MEETING_IN_PROGRESS', diff --git a/app/src/components/MeetingDrawer/ParticipantList/ListModerator.js b/app/src/components/MeetingDrawer/ParticipantList/ListModerator.js index c10506a..2fff283 100644 --- a/app/src/components/MeetingDrawer/ParticipantList/ListModerator.js +++ b/app/src/components/MeetingDrawer/ParticipantList/ListModerator.js @@ -63,6 +63,22 @@ const ListModerator = (props) => />
+ +