Linting and translations

auto_join_3.3
Håvar Aambø Fosstveit 2020-03-27 22:57:04 +01:00
parent 34cdac8102
commit a1dc652d04
30 changed files with 176 additions and 117 deletions

View File

@ -46,7 +46,8 @@
"test": "react-scripts test", "test": "react-scripts test",
"eject": "react-scripts eject", "eject": "react-scripts eject",
"electron": "electron --no-sandbox .", "electron": "electron --no-sandbox .",
"dev": "nf start -p 3000" "dev": "nf start -p 3000",
"lint": "eslint -c .eslintrc.json --ext .js src"
}, },
"browserslist": [ "browserslist": [
">0.2%", ">0.2%",

View File

@ -231,7 +231,7 @@ export default class RoomClient
this._hark = null; this._hark = null;
// Local MediaStream for hark // Local MediaStream for hark
this._harkStream = null this._harkStream = null;
// Local webcam mediasoup Producer. // Local webcam mediasoup Producer.
this._webcamProducer = null; this._webcamProducer = null;
@ -1162,21 +1162,30 @@ export default class RoomClient
...VIDEO_CONSTRAINS[resolution] ...VIDEO_CONSTRAINS[resolution]
} }
}); });
if (stream){
if (stream)
{
const track = stream.getVideoTracks()[0]; const track = stream.getVideoTracks()[0];
if (track) {
if (track)
{
await this._webcamProducer.replaceTrack({ track }); await this._webcamProducer.replaceTrack({ track });
store.dispatch( store.dispatch(
producerActions.setProducerTrack(this._webcamProducer.id, track)); producerActions.setProducerTrack(this._webcamProducer.id, track));
} else { }
logger.warn('getVideoTracks Error: First Video Track is null') else
{
logger.warn('getVideoTracks Error: First Video Track is null');
} }
} else {
logger.warn ('getUserMedia Error: Stream is null!')
} }
else
{
logger.warn('getUserMedia Error: Stream is null!');
}
store.dispatch(settingsActions.setSelectedWebcamDevice(deviceId)); store.dispatch(settingsActions.setSelectedWebcamDevice(deviceId));
await this._updateWebcams(); await this._updateWebcams();
@ -2340,7 +2349,7 @@ export default class RoomClient
dtlsParameters, dtlsParameters,
iceServers : this._turnServers, iceServers : this._turnServers,
// TODO: Fix for issue #72 // TODO: Fix for issue #72
iceTransportPolicy : this._device.flag === 'firefox' ? 'relay' : undefined, iceTransportPolicy : this._device.flag === 'firefox' ? 'relay' : undefined,
proprietaryConstraints : PC_PROPRIETARY_CONSTRAINTS proprietaryConstraints : PC_PROPRIETARY_CONSTRAINTS
}); });
@ -2402,7 +2411,7 @@ export default class RoomClient
iceParameters, iceParameters,
iceCandidates, iceCandidates,
dtlsParameters, dtlsParameters,
iceServers : this._turnServers, iceServers : this._turnServers,
// TODO: Fix for issue #72 // TODO: Fix for issue #72
iceTransportPolicy : this._device.flag === 'firefox' ? 'relay' : undefined iceTransportPolicy : this._device.flag === 'firefox' ? 'relay' : undefined
}); });

View File

@ -35,12 +35,10 @@ export const setConsumerPreferredLayers = (consumerId, spatialLayer, temporalLay
}); });
export const setConsumerPriority = (consumerId, priority) => export const setConsumerPriority = (consumerId, priority) =>
{ ({
return { type : 'SET_CONSUMER_PRIORITY',
type : 'SET_CONSUMER_PRIORITY', payload : { consumerId, priority }
payload : { consumerId, priority } });
};
};
export const setConsumerTrack = (consumerId, track) => export const setConsumerTrack = (consumerId, track) =>
({ ({

View File

@ -34,11 +34,11 @@ export const setPicture = (picture) =>
}); });
export const setMediaCapabilities = ({ export const setMediaCapabilities = ({
canSendMic, canSendMic,
canSendWebcam, canSendWebcam,
canShareScreen, canShareScreen,
canShareFiles canShareFiles
}) => }) =>
({ ({
type : 'SET_MEDIA_CAPABILITIES', type : 'SET_MEDIA_CAPABILITIES',
payload : { canSendMic, canSendWebcam, canShareScreen, canShareFiles } payload : { canSendMic, canSendWebcam, canShareScreen, canShareFiles }
@ -92,7 +92,7 @@ export const setDisplayNameInProgress = (flag) =>
payload : { flag } payload : { flag }
}); });
export const setIsSpeaking = (flag) => export const setIsSpeaking = (flag) =>
({ ({
type : 'SET_IS_SPEAKING', type : 'SET_IS_SPEAKING',
payload : { flag } payload : { flag }

View File

@ -46,7 +46,6 @@ export const setPeerPicture = (peerId, picture) =>
payload : { peerId, picture } payload : { peerId, picture }
}); });
export const addPeerRole = (peerId, role) => export const addPeerRole = (peerId, role) =>
({ ({
type : 'ADD_PEER_ROLE', type : 'ADD_PEER_ROLE',

View File

@ -178,7 +178,8 @@ const ChooseRoom = ({
<CookieConsent buttonText={intl.formatMessage({ <CookieConsent buttonText={intl.formatMessage({
id : 'room.consentUnderstand', id : 'room.consentUnderstand',
defaultMessage : 'I understand' defaultMessage : 'I understand'
})}> })}
>
<FormattedMessage <FormattedMessage
id='room.cookieConsent' id='room.cookieConsent'
defaultMessage='This website uses cookies to enhance the user experience' defaultMessage='This website uses cookies to enhance the user experience'

View File

@ -68,34 +68,33 @@ const styles = (theme) =>
}, },
controls : controls :
{ {
position : 'absolute', position : 'absolute',
width : '100%', width : '100%',
height : '100%', height : '100%',
backgroundColor : 'rgba(0, 0, 0, 0.3)', display : 'flex',
display : 'flex', flexDirection : 'column',
flexDirection : 'column', justifyContent : 'center',
justifyContent : 'center', alignItems : 'flex-end',
alignItems : 'flex-end', padding : theme.spacing(1),
padding : theme.spacing(1), zIndex : 21,
zIndex : 21, touchAction : 'none',
opacity : 0, pointerEvents : 'none',
transition : 'opacity 0.3s', '& p' :
touchAction : 'none',
pointerEvents : 'none',
'&.hover' :
{ {
opacity : 1 position : 'absolute',
}, float : 'left',
'& p' : top : '50%',
{ left : '50%',
position : 'absolute', opacity : 0,
float : 'left', transition : 'opacity 0.3s',
top : '50%', transform : 'translate(-50%, -50%)',
left : '50%', color : 'rgba(255, 255, 255, 0.5)',
transform : 'translate(-50%, -50%)', fontSize : '7em',
color : 'rgba(255, 255, 255, 0.5)', margin : 0,
fontSize : '7em', '&.hover' :
margin : 0 {
opacity : 1
}
} }
}, },
ptt : ptt :
@ -112,8 +111,8 @@ const styles = (theme) =>
padding : '15px', padding : '15px',
borderRadius : '20px', borderRadius : '20px',
textAlign : 'center', textAlign : 'center',
opacity : 0, opacity : 0,
'&.enabled' : '&.enabled' :
{ {
opacity : 1 opacity : 1
} }
@ -317,13 +316,13 @@ const Me = (props) =>
<FormattedMessage <FormattedMessage
id='room.me' id='room.me'
defaultMessage='ME' defaultMessage='ME'
/> />
</p> </p>
<div className={classnames(classes.ptt, (micState ==='muted' && me.isSpeaking) ? 'enabled' : null)} > <div className={classnames(classes.ptt, (micState ==='muted' && me.isSpeaking) ? 'enabled' : null)} >
<FormattedMessage <FormattedMessage
id='me.mutedPTT' id='me.mutedPTT'
defaultMessage='You are muted: hold SPACE-BAR to speak!' defaultMessage='You are muted, hold down SPACE-BAR to talk'
/> />
</div> </div>

View File

@ -47,7 +47,7 @@ const styles = (theme) =>
}, },
divider : divider :
{ {
marginLeft : theme.spacing(3), marginLeft : theme.spacing(3)
}, },
show : show :
{ {
@ -364,7 +364,7 @@ TopBar.propTypes =
room : appPropTypes.Room.isRequired, room : appPropTypes.Room.isRequired,
peersLength : PropTypes.number, peersLength : PropTypes.number,
lobbyPeers : PropTypes.array, lobbyPeers : PropTypes.array,
permanentTopBar : PropTypes.bool, permanentTopBar : PropTypes.bool,
myPicture : PropTypes.string, myPicture : PropTypes.string,
loggedIn : PropTypes.bool.isRequired, loggedIn : PropTypes.bool.isRequired,
loginEnabled : PropTypes.bool.isRequired, loginEnabled : PropTypes.bool.isRequired,
@ -383,14 +383,14 @@ TopBar.propTypes =
const mapStateToProps = (state) => const mapStateToProps = (state) =>
({ ({
room : state.room, room : state.room,
peersLength : peersLengthSelector(state), peersLength : peersLengthSelector(state),
lobbyPeers : lobbyPeersKeySelector(state), lobbyPeers : lobbyPeersKeySelector(state),
permanentTopBar : state.settings.permanentTopBar, permanentTopBar : state.settings.permanentTopBar,
loggedIn : state.me.loggedIn, loggedIn : state.me.loggedIn,
loginEnabled : state.me.loginEnabled, loginEnabled : state.me.loginEnabled,
myPicture : state.me.picture, myPicture : state.me.picture,
unread : state.toolarea.unreadMessages + unread : state.toolarea.unreadMessages +
state.toolarea.unreadFiles state.toolarea.unreadFiles
}); });

View File

@ -339,7 +339,8 @@ const JoinDialog = ({
<CookieConsent buttonText={intl.formatMessage({ <CookieConsent buttonText={intl.formatMessage({
id : 'room.consentUnderstand', id : 'room.consentUnderstand',
defaultMessage : 'I understand' defaultMessage : 'I understand'
})}> })}
>
<FormattedMessage <FormattedMessage
id='room.cookieConsent' id='room.cookieConsent'
defaultMessage='This website uses cookies to enhance the user experience' defaultMessage='This website uses cookies to enhance the user experience'

View File

@ -151,14 +151,14 @@ const ListPeer = (props) =>
id : 'tooltip.muteScreenSharing', id : 'tooltip.muteScreenSharing',
defaultMessage : 'Mute participant share' defaultMessage : 'Mute participant share'
})} })}
color={ screenVisible ? 'primary' : 'secondary'} color={screenVisible ? 'primary' : 'secondary'}
disabled={ peer.peerScreenInProgress } disabled={peer.peerScreenInProgress}
onClick={() => onClick={() =>
{ {
screenVisible ? screenVisible ?
roomClient.modifyPeerConsumer(peer.id, 'screen', true) : roomClient.modifyPeerConsumer(peer.id, 'screen', true) :
roomClient.modifyPeerConsumer(peer.id, 'screen', false); roomClient.modifyPeerConsumer(peer.id, 'screen', false);
}} }}
> >
{ screenVisible ? { screenVisible ?
<ScreenIcon /> <ScreenIcon />
@ -172,14 +172,14 @@ const ListPeer = (props) =>
id : 'tooltip.muteParticipant', id : 'tooltip.muteParticipant',
defaultMessage : 'Mute participant' defaultMessage : 'Mute participant'
})} })}
color={ micEnabled ? 'primary' : 'secondary'} color={micEnabled ? 'primary' : 'secondary'}
disabled={ peer.peerAudioInProgress } disabled={peer.peerAudioInProgress}
onClick={() => onClick={() =>
{ {
micEnabled ? micEnabled ?
roomClient.modifyPeerConsumer(peer.id, 'mic', true) : roomClient.modifyPeerConsumer(peer.id, 'mic', true) :
roomClient.modifyPeerConsumer(peer.id, 'mic', false); roomClient.modifyPeerConsumer(peer.id, 'mic', false);
}} }}
> >
{ micEnabled ? { micEnabled ?
<MicIcon /> <MicIcon />
@ -193,11 +193,11 @@ const ListPeer = (props) =>
id : 'tooltip.kickParticipant', id : 'tooltip.kickParticipant',
defaultMessage : 'Kick out participant' defaultMessage : 'Kick out participant'
})} })}
disabled={ peer.peerKickInProgress } disabled={peer.peerKickInProgress}
onClick={() => onClick={() =>
{ {
roomClient.kickPeer(peer.id); roomClient.kickPeer(peer.id);
}} }}
> >
<ExitIcon /> <ExitIcon />
</IconButton> </IconButton>

View File

@ -287,28 +287,28 @@ class Filmstrip extends React.PureComponent
} }
Filmstrip.propTypes = { Filmstrip.propTypes = {
roomClient : PropTypes.any.isRequired, roomClient : PropTypes.any.isRequired,
activeSpeakerId : PropTypes.string, activeSpeakerId : PropTypes.string,
advancedMode : PropTypes.bool, advancedMode : PropTypes.bool,
peers : PropTypes.object.isRequired, peers : PropTypes.object.isRequired,
consumers : PropTypes.object.isRequired, consumers : PropTypes.object.isRequired,
myId : PropTypes.string.isRequired, myId : PropTypes.string.isRequired,
selectedPeerId : PropTypes.string, selectedPeerId : PropTypes.string,
spotlights : PropTypes.array.isRequired, spotlights : PropTypes.array.isRequired,
boxes : PropTypes.number, boxes : PropTypes.number,
classes : PropTypes.object.isRequired classes : PropTypes.object.isRequired
}; };
const mapStateToProps = (state) => const mapStateToProps = (state) =>
{ {
return { return {
activeSpeakerId : state.room.activeSpeakerId, activeSpeakerId : state.room.activeSpeakerId,
selectedPeerId : state.room.selectedPeerId, selectedPeerId : state.room.selectedPeerId,
peers : state.peers, peers : state.peers,
consumers : state.consumers, consumers : state.consumers,
myId : state.me.id, myId : state.me.id,
spotlights : state.room.spotlights, spotlights : state.room.spotlights,
boxes : videoBoxesSelector(state) boxes : videoBoxesSelector(state)
}; };
}; };

View File

@ -159,13 +159,13 @@ class Room extends React.PureComponent
<CookieConsent <CookieConsent
buttonText={ buttonText={
<FormattedMessage <FormattedMessage
id = 'room.consentUnderstand' id='room.consentUnderstand'
defaultMessage = 'I understand' defaultMessage='I understand'
/> />
} }
> >
<FormattedMessage <FormattedMessage
id = 'room.cookieConsent' id='room.cookieConsent'
defaultMessage='This website uses cookies to enhance the user experience' defaultMessage='This website uses cookies to enhance the user experience'
/> />
</CookieConsent> </CookieConsent>

View File

@ -353,15 +353,15 @@ const Settings = ({
Settings.propTypes = Settings.propTypes =
{ {
roomClient : PropTypes.any.isRequired, roomClient : PropTypes.any.isRequired,
me : appPropTypes.Me.isRequired, me : appPropTypes.Me.isRequired,
room : appPropTypes.Room.isRequired, room : appPropTypes.Room.isRequired,
settings : PropTypes.object.isRequired, settings : PropTypes.object.isRequired,
onToggleAdvancedMode : PropTypes.func.isRequired, onToggleAdvancedMode : PropTypes.func.isRequired,
onTogglePermanentTopBar : PropTypes.func.isRequired, onTogglePermanentTopBar : PropTypes.func.isRequired,
handleChangeMode : PropTypes.func.isRequired, handleChangeMode : PropTypes.func.isRequired,
handleCloseSettings : PropTypes.func.isRequired, handleCloseSettings : PropTypes.func.isRequired,
classes : PropTypes.object.isRequired classes : PropTypes.object.isRequired
}; };
const mapStateToProps = (state) => const mapStateToProps = (state) =>
@ -374,10 +374,10 @@ const mapStateToProps = (state) =>
}; };
const mapDispatchToProps = { const mapDispatchToProps = {
onToggleAdvancedMode : settingsActions.toggleAdvancedMode, onToggleAdvancedMode : settingsActions.toggleAdvancedMode,
onTogglePermanentTopBar : settingsActions.togglePermanentTopBar, onTogglePermanentTopBar : settingsActions.togglePermanentTopBar,
handleChangeMode : roomActions.setDisplayMode, handleChangeMode : roomActions.setDisplayMode,
handleCloseSettings : roomActions.setSettingsOpen handleCloseSettings : roomActions.setSettingsOpen
}; };
export default withRoomContext(connect( export default withRoomContext(connect(

View File

@ -135,7 +135,7 @@ FullScreenView.propTypes =
consumer : appPropTypes.Consumer, consumer : appPropTypes.Consumer,
toggleConsumerFullscreen : PropTypes.func.isRequired, toggleConsumerFullscreen : PropTypes.func.isRequired,
toolbarsVisible : PropTypes.bool, toolbarsVisible : PropTypes.bool,
permanentTopBar : PropTypes.bool, permanentTopBar : PropTypes.bool,
classes : PropTypes.object.isRequired classes : PropTypes.object.isRequired
}; };
@ -143,7 +143,7 @@ const mapStateToProps = (state) =>
({ ({
consumer : state.consumers[state.room.fullScreenConsumer], consumer : state.consumers[state.room.fullScreenConsumer],
toolbarsVisible : state.room.toolbarsVisible, toolbarsVisible : state.room.toolbarsVisible,
permanentTopBar : state.settings.permanentTopBar permanentTopBar : state.settings.permanentTopBar
}); });
const mapDispatchToProps = (dispatch) => const mapDispatchToProps = (dispatch) =>

View File

@ -6,7 +6,7 @@ const initialState =
advancedMode : false, advancedMode : false,
resolution : 'medium', // low, medium, high, veryhigh, ultra resolution : 'medium', // low, medium, high, veryhigh, ultra
lastN : 4, lastN : 4,
permanentTopBar : true permanentTopBar : true
}; };
const settings = (state = initialState, action) => const settings = (state = initialState, action) =>

View File

@ -52,6 +52,9 @@
"room.muteAll": null, "room.muteAll": null,
"room.stopAllVideo": null, "room.stopAllVideo": null,
"room.closeMeeting": null, "room.closeMeeting": null,
"room.speechUnsupported": null,
"me.mutedPTT": null,
"tooltip.login": "登录", "tooltip.login": "登录",
"tooltip.logout": "注销", "tooltip.logout": "注销",

View File

@ -48,6 +48,12 @@
"room.spotlights": "Aktivní Účastníci", "room.spotlights": "Aktivní Účastníci",
"room.passive": "Pasivní Účastníci", "room.passive": "Pasivní Účastníci",
"room.videoPaused": "Toto video bylo pozastaveno", "room.videoPaused": "Toto video bylo pozastaveno",
"room.muteAll": null,
"room.stopAllVideo": null,
"room.closeMeeting": null,
"room.speechUnsupported": null,
"me.mutedPTT": null,
"tooltip.login": "Přihlášení", "tooltip.login": "Přihlášení",
"tooltip.logout": "Odhlášení", "tooltip.logout": "Odhlášení",

View File

@ -52,6 +52,9 @@
"room.muteAll": null, "room.muteAll": null,
"room.stopAllVideo": null, "room.stopAllVideo": null,
"room.closeMeeting": null, "room.closeMeeting": null,
"room.speechUnsupported": null,
"me.mutedPTT": null,
"tooltip.login": "Anmelden", "tooltip.login": "Anmelden",
"tooltip.logout": "Abmelden", "tooltip.logout": "Abmelden",

View File

@ -52,6 +52,9 @@
"room.muteAll": null, "room.muteAll": null,
"room.stopAllVideo": null, "room.stopAllVideo": null,
"room.closeMeeting": null, "room.closeMeeting": null,
"room.speechUnsupported": null,
"me.mutedPTT": null,
"tooltip.login": "Log ind", "tooltip.login": "Log ind",
"tooltip.logout": "Log ud", "tooltip.logout": "Log ud",

View File

@ -52,6 +52,9 @@
"room.muteAll": null, "room.muteAll": null,
"room.stopAllVideo": null, "room.stopAllVideo": null,
"room.closeMeeting": null, "room.closeMeeting": null,
"room.speechUnsupported": null,
"me.mutedPTT": null,
"tooltip.login": "Σύνδεση", "tooltip.login": "Σύνδεση",
"tooltip.logout": "Αποσύνδεση", "tooltip.logout": "Αποσύνδεση",

View File

@ -52,6 +52,9 @@
"room.muteAll": "Mute all", "room.muteAll": "Mute all",
"room.stopAllVideo": "Stop all video", "room.stopAllVideo": "Stop all video",
"room.closeMeeting": "Close meeting", "room.closeMeeting": "Close meeting",
"room.speechUnsupported": "Your browser does not support speech recognition",
"me.mutedPTT": "You are muted, hold down SPACE-BAR to talk",
"tooltip.login": "Log in", "tooltip.login": "Log in",
"tooltip.logout": "Log out", "tooltip.logout": "Log out",

View File

@ -52,6 +52,9 @@
"room.muteAll": null, "room.muteAll": null,
"room.stopAllVideo": null, "room.stopAllVideo": null,
"room.closeMeeting": null, "room.closeMeeting": null,
"room.speechUnsupported": null,
"me.mutedPTT": null,
"tooltip.login": "Entrar", "tooltip.login": "Entrar",
"tooltip.logout": "Salir", "tooltip.logout": "Salir",

View File

@ -52,6 +52,9 @@
"room.muteAll": null, "room.muteAll": null,
"room.stopAllVideo": null, "room.stopAllVideo": null,
"room.closeMeeting": null, "room.closeMeeting": null,
"room.speechUnsupported": null,
"me.mutedPTT": null,
"tooltip.login": "Connexion", "tooltip.login": "Connexion",
"tooltip.logout": "Déconnexion", "tooltip.logout": "Déconnexion",

View File

@ -52,6 +52,9 @@
"room.muteAll": null, "room.muteAll": null,
"room.stopAllVideo": null, "room.stopAllVideo": null,
"room.closeMeeting": null, "room.closeMeeting": null,
"room.speechUnsupported": null,
"me.mutedPTT": null,
"tooltip.login": "Prijava", "tooltip.login": "Prijava",
"tooltip.logout": "Odjava", "tooltip.logout": "Odjava",

View File

@ -52,6 +52,9 @@
"room.muteAll": null, "room.muteAll": null,
"room.stopAllVideo": null, "room.stopAllVideo": null,
"room.closeMeeting": null, "room.closeMeeting": null,
"room.speechUnsupported": null,
"me.mutedPTT": null,
"tooltip.login": "Belépés", "tooltip.login": "Belépés",
"tooltip.logout": "Kilépés", "tooltip.logout": "Kilépés",

View File

@ -49,6 +49,12 @@
"room.spotlights": "Partecipanti in Evidenza", "room.spotlights": "Partecipanti in Evidenza",
"room.passive": "Participanti Passivi", "room.passive": "Participanti Passivi",
"room.videoPaused": "Il video è in pausa", "room.videoPaused": "Il video è in pausa",
"room.muteAll": null,
"room.stopAllVideo": null,
"room.closeMeeting": null,
"room.speechUnsupported": null,
"me.mutedPTT": null,
"tooltip.login": "Log in", "tooltip.login": "Log in",
"tooltip.logout": "Log out", "tooltip.logout": "Log out",

View File

@ -52,6 +52,9 @@
"room.muteAll": "Demp alle", "room.muteAll": "Demp alle",
"room.stopAllVideo": "Stopp all video", "room.stopAllVideo": "Stopp all video",
"room.closeMeeting": "Avslutt møte", "room.closeMeeting": "Avslutt møte",
"room.speechUnsupported": "Din nettleser støtter ikke stemmegjenkjenning",
"me.mutedPTT": "Du er dempet, hold nede SPACE for å snakke",
"tooltip.login": "Logg in", "tooltip.login": "Logg in",
"tooltip.logout": "Logg ut", "tooltip.logout": "Logg ut",

View File

@ -52,6 +52,9 @@
"room.muteAll": null, "room.muteAll": null,
"room.stopAllVideo": null, "room.stopAllVideo": null,
"room.closeMeeting": null, "room.closeMeeting": null,
"room.speechUnsupported": null,
"me.mutedPTT": null,
"tooltip.login": "Zaloguj", "tooltip.login": "Zaloguj",
"tooltip.logout": "Wyloguj", "tooltip.logout": "Wyloguj",

View File

@ -52,6 +52,9 @@
"room.muteAll": null, "room.muteAll": null,
"room.stopAllVideo": null, "room.stopAllVideo": null,
"room.closeMeeting": null, "room.closeMeeting": null,
"room.speechUnsupported": null,
"me.mutedPTT": null,
"tooltip.login": "Entrar", "tooltip.login": "Entrar",
"tooltip.logout": "Sair", "tooltip.logout": "Sair",

View File

@ -52,6 +52,9 @@
"room.muteAll": null, "room.muteAll": null,
"room.stopAllVideo": null, "room.stopAllVideo": null,
"room.closeMeeting": null, "room.closeMeeting": null,
"room.speechUnsupported": null,
"me.mutedPTT": null,
"tooltip.login": "Intră în cont", "tooltip.login": "Intră în cont",
"tooltip.logout": "Deconectare", "tooltip.logout": "Deconectare",