Merge remote-tracking branch 'upstream/master' into nav-bar-performance-issue

This commit is contained in:
Tainan Felipe 2019-08-26 17:17:29 -03:00
commit 3301589cb3
27 changed files with 388 additions and 196 deletions

View File

@ -219,7 +219,7 @@ check_file() {
print_header() {
if [ ! $HEADER ]; then
echo
echo "** Potential problems described below **"
echo "# Potential problems described below"
HEADER=1
fi
}
@ -1910,10 +1910,10 @@ if [ -n "$HOST" ]; then
yq w -i $HTML5_CONFIG public.note.url "$PROTOCOL://$HOST/pad"
chown meteor:meteor $HTML5_CONFIG
if [ -f $KURENTO_CONFIG ]; then
yq w -i $KURENTO_CONFIG kurento[0].url "ws://$HOST:8888/kurento"
chown bigbluebutton:bigbluebutton $KURENTO_CONFIG
fi
#if [ -f $KURENTO_CONFIG ]; then
# yq w -i $KURENTO_CONFIG kurento[0].url "ws://$HOST:8888/kurento"
# chown bigbluebutton:bigbluebutton $KURENTO_CONFIG
#fi
fi
echo "Restarting the BigBlueButton $BIGBLUEBUTTON_RELEASE ..."

View File

@ -1,6 +1,5 @@
import { Meteor } from 'meteor/meteor';
import { check } from 'meteor/check';
import { UsersTyping } from '/imports/api/group-chat-msg';
import RedisPubSub from '/imports/startup/server/redis';
export default function startUserTyping(credentials, chatId) {
@ -15,13 +14,6 @@ export default function startUserTyping(credentials, chatId) {
check(requesterUserId, String);
check(chatId, String);
const userTyping = UsersTyping.findOne({
meetingId,
userId: requesterUserId,
});
if (userTyping) return;
const payload = {
chatId: chatId || PUBLIC_GROUP_CHAT_ID,
};

View File

@ -14,6 +14,6 @@ export default function stopUserTyping(credentials) {
});
if (userTyping) {
stopTyping(meetingId, requesterUserId);
stopTyping(meetingId, requesterUserId, true);
}
}

View File

@ -2,6 +2,9 @@ import { check } from 'meteor/check';
import Logger from '/imports/startup/server/logger';
import Users from '/imports/api/users';
import { UsersTyping } from '/imports/api/group-chat-msg';
import stopTyping from './stopTyping';
const TYPING_TIMEOUT = 5000;
export default function startTyping(meetingId, userId, chatId) {
check(meetingId, String);
@ -19,12 +22,27 @@ export default function startTyping(meetingId, userId, chatId) {
userId,
name: user.name,
isTypingTo: chatId,
time: (new Date()),
};
const typingUser = UsersTyping.findOne(selector, {
fields: {
time: 1,
},
});
if (typingUser) {
if (mod.time - typingUser.time <= TYPING_TIMEOUT - 100) return;
}
const cb = (err) => {
if (err) {
return Logger.error(`Typing indicator update error: ${err}`);
}
Meteor.setTimeout(() => {
stopTyping(meetingId, userId);
}, TYPING_TIMEOUT);
return Logger.debug(`Typing indicator update for userId={${userId}} chatId={${chatId}}`);
};

View File

@ -2,15 +2,20 @@ import { check } from 'meteor/check';
import Logger from '/imports/startup/server/logger';
import { UsersTyping } from '/imports/api/group-chat-msg';
export default function stopTyping(meetingId, userId) {
export default function stopTyping(meetingId, userId, sendMsgInitiated = false) {
check(meetingId, String);
check(userId, String);
check(sendMsgInitiated, Boolean);
const selector = {
meetingId,
userId,
};
const user = UsersTyping.findOne(selector);
const stillTyping = !sendMsgInitiated && user && (new Date()) - user.time < 3000;
if (stillTyping) return;
const cb = (err) => {
if (err) {
return Logger.error(`Stop user=${userId} typing indicator error: ${err}`);
@ -18,5 +23,5 @@ export default function stopTyping(meetingId, userId) {
return Logger.debug(`Stopped typing indicator for user=${userId}`);
};
return UsersTyping.remove(selector, cb);
UsersTyping.remove(selector, cb);
}

View File

@ -204,7 +204,7 @@ class ChatAlert extends PureComponent {
const reducedMessage = Service
.reduceAndMapGroupMessages(pendingNotificationsByChat[chatId].slice(-5)).pop();
if (!reducedMessage) return null;
if (!reducedMessage || !reducedMessage.sender) return null;
const content = this
.createMessage(reducedMessage.sender.name, reducedMessage.content);

View File

@ -21,18 +21,6 @@ const intlMessages = defineMessages({
id: 'app.chat.hideChatLabel',
description: 'aria-label for hiding chat button',
},
singularTyping: {
id: 'app.chat.singularTyping',
description: 'used to indicate when 1 user is typing',
},
pluralTyping: {
id: 'app.chat.pluralTyping',
description: 'used to indicate when multiple user are typing',
},
severalPeople: {
id: 'app.chat.severalPeople',
description: 'displayed when 4 or more users are typing',
},
});
const Chat = (props) => {
const {
@ -46,10 +34,6 @@ const Chat = (props) => {
intl,
shortcuts,
isMeteorConnected,
typingUsers,
currentUserId,
startUserTyping,
stopUserTyping,
lastReadMessageTime,
hasUnreadMessages,
scrollPosition,
@ -61,47 +45,6 @@ const Chat = (props) => {
const HIDE_CHAT_AK = shortcuts.hidePrivateChat;
const CLOSE_CHAT_AK = shortcuts.closePrivateChat;
let names = [];
names = typingUsers.map((user) => {
const currentChatPartner = chatID;
const { userId: typingUserId, isTypingTo, name } = user;
let userNameTyping = null;
userNameTyping = currentUserId !== typingUserId ? name : userNameTyping;
const isPrivateMsg = currentChatPartner !== isTypingTo;
if (isPrivateMsg) {
const isMsgParticipant = typingUserId === currentChatPartner && currentUserId === isTypingTo;
userNameTyping = isMsgParticipant ? name : null;
}
return userNameTyping;
}).filter(e => e);
const renderIsTypingString = () => {
if (names) {
const { length } = names;
const noTypers = length < 1;
const singleTyper = length === 1;
const multipleTypersShown = length > 1 && length <= 3;
if (noTypers) return null;
if (singleTyper) {
if (names[0].length < 20) {
return ` ${names[0]} ${intl.formatMessage(intlMessages.singularTyping)}`;
}
return (` ${names[0].slice(0, 20)}... ${intl.formatMessage(intlMessages.singularTyping)}`);
}
if (multipleTypersShown) {
const formattedNames = names.map((name) => {
if (name.length < 15) return ` ${name}`;
return ` ${name.slice(0, 15)}...`;
});
return (`${formattedNames} ${intl.formatMessage(intlMessages.pluralTyping)}`);
}
return (` ${intl.formatMessage(intlMessages.severalPeople)} ${intl.formatMessage(intlMessages.pluralTyping)}`);
}
};
return (
<div
data-test="publicChat"
@ -165,9 +108,6 @@ const Chat = (props) => {
chatName,
minMessageLength,
maxMessageLength,
renderIsTypingString,
startUserTyping,
stopUserTyping,
}}
chatId={chatID}
chatTitle={title}

View File

@ -3,9 +3,6 @@ import { defineMessages, injectIntl } from 'react-intl';
import { withTracker } from 'meteor/react-meteor-data';
import { Session } from 'meteor/session';
import Auth from '/imports/ui/services/auth';
import Users from '/imports/api/users';
import { UsersTyping } from '/imports/api/group-chat-msg';
import { makeCall } from '/imports/ui/services/api';
import Chat from './component';
import ChatService from './service';
@ -41,9 +38,10 @@ class ChatContainer extends PureComponent {
}
render() {
const { children } = this.props;
return (
<Chat {...this.props}>
{this.props.children}
{children}
</Chat>
);
}
@ -112,7 +110,7 @@ export default injectIntl(withTracker(({ intl }) => {
chatName = receiverUser.name;
systemMessageIntl = { 0: receiverUser.name };
title = intl.formatMessage(intlMessages.titlePrivate, systemMessageIntl);
partnerIsLoggedOut = !receiverUser.connectionStatus === CONNECTION_STATUS;
partnerIsLoggedOut = receiverUser.connectionStatus !== CONNECTION_STATUS;
if (partnerIsLoggedOut) {
const time = Date.now();
@ -148,28 +146,7 @@ export default injectIntl(withTracker(({ intl }) => {
const { connected: isMeteorConnected } = Meteor.status();
const typingUsers = UsersTyping.find({
meetingId: Auth.meetingID,
$or: [
{ isTypingTo: PUBLIC_CHAT_KEY },
{ isTypingTo: Auth.userID },
],
}).fetch();
const currentUser = Users.findOne({
meetingId: Auth.meetingID,
userId: Auth.userID,
}, {
fields: {
userId: 1,
},
});
return {
startUserTyping: chatId => makeCall('startUserTyping', chatId),
stopUserTyping: () => makeCall('stopUserTyping'),
currentUserId: currentUser ? currentUser.userId : null,
typingUsers,
chatID,
chatName,
title,

View File

@ -4,6 +4,7 @@ import cx from 'classnames';
import TextareaAutosize from 'react-autosize-textarea';
import browser from 'browser-detect';
import PropTypes from 'prop-types';
import TypingIndicatorContainer from './typing-indicator/container';
import { styles } from './styles.scss';
import Button from '../../button/component';
@ -22,7 +23,6 @@ const propTypes = {
connected: PropTypes.bool.isRequired,
locked: PropTypes.bool.isRequired,
partnerIsLoggedOut: PropTypes.bool.isRequired,
renderIsTypingString: PropTypes.func.isRequired,
stopUserTyping: PropTypes.func.isRequired,
startUserTyping: PropTypes.func.isRequired,
};
@ -56,10 +56,21 @@ const messages = defineMessages({
errorChatLocked: {
id: 'app.chat.locked',
},
singularTyping: {
id: 'app.chat.singularTyping',
description: 'used to indicate when 1 user is typing',
},
pluralTyping: {
id: 'app.chat.pluralTyping',
description: 'used to indicate when multiple user are typing',
},
severalPeople: {
id: 'app.chat.severalPeople',
description: 'displayed when 4 or more users are typing',
},
});
const CHAT_ENABLED = Meteor.settings.public.chat.enabled;
const IS_TYPING_INTERVAL = 2500;
class MessageForm extends PureComponent {
constructor(props) {
@ -203,15 +214,8 @@ class MessageForm extends PureComponent {
}
const handleUserTyping = () => {
if (error) return;
startUserTyping(chatId);
setTimeout(() => {
const { message: messageState } = this.state;
const userStoppedTyping = messageState === '' || message.length === messageState.length;
if (userStoppedTyping) {
const { stopUserTyping } = this.props;
stopUserTyping();
}
}, IS_TYPING_INTERVAL);
};
this.setState({
@ -274,7 +278,6 @@ class MessageForm extends PureComponent {
disabled,
className,
chatAreaId,
renderIsTypingString,
} = this.props;
const { hasErrors, error, message } = this.state;
@ -314,14 +317,10 @@ class MessageForm extends PureComponent {
color="primary"
icon="send"
onClick={() => {}}
data-test="sendMessageButton"
/>
</div>
<div className={error ? styles.error : styles.info}>
<span>
<span>{error || renderIsTypingString()}</span>
{!error && renderIsTypingString() ? <span className={styles.connectingAnimation} /> : null}
</span>
</div>
<TypingIndicatorContainer {...{ error }} />
</form>
) : null;
}

View File

@ -1,9 +1,11 @@
import React, { PureComponent } from 'react';
import { withTracker } from 'meteor/react-meteor-data';
import { makeCall } from '/imports/ui/services/api';
import ChatForm from './component';
import ChatService from '../service';
const CHAT_CONFIG = Meteor.settings.public.chat;
class ChatContainer extends PureComponent {
render() {
return (
@ -17,7 +19,14 @@ export default withTracker(() => {
ChatService.updateScrollPosition(null);
return ChatService.sendGroupMessage(message);
};
const startUserTyping = chatId => makeCall('startUserTyping', chatId);
const stopUserTyping = () => makeCall('stopUserTyping');
return {
startUserTyping,
stopUserTyping,
UnsentMessagesCollection: ChatService.UnsentMessagesCollection,
minMessageLength: CHAT_CONFIG.min_message_length,
maxMessageLength: CHAT_CONFIG.max_message_length,

View File

@ -0,0 +1,111 @@
import React, { PureComponent } from 'react';
import { defineMessages, injectIntl, intlShape } from 'react-intl';
import browser from 'browser-detect';
import PropTypes from 'prop-types';
import { styles } from '../styles.scss';
const propTypes = {
intl: intlShape.isRequired,
currentChatPartner: PropTypes.string.isRequired,
currentUserId: PropTypes.string.isRequired,
typingUsers: PropTypes.arrayOf(Object).isRequired,
};
const messages = defineMessages({
singularTyping: {
id: 'app.chat.singularTyping',
description: 'used to indicate when 1 user is typing',
},
pluralTyping: {
id: 'app.chat.pluralTyping',
description: 'used to indicate when multiple user are typing',
},
severalPeople: {
id: 'app.chat.severalPeople',
description: 'displayed when 4 or more users are typing',
},
});
class TypingIndicator extends PureComponent {
constructor(props) {
super(props);
this.BROWSER_RESULTS = browser();
this.renderIsTypingString = this.renderIsTypingString.bind(this);
}
renderIsTypingString() {
const {
intl, typingUsers, currentUserId, currentChatPartner, indicatorEnabled,
} = this.props;
if (!indicatorEnabled) return null;
let names = [];
names = typingUsers.map((user) => {
const { userId: typingUserId, isTypingTo, name } = user;
let userNameTyping = null;
userNameTyping = currentUserId !== typingUserId ? name : userNameTyping;
const isPrivateMsg = currentChatPartner !== isTypingTo;
if (isPrivateMsg) {
const isMsgParticipant = typingUserId === currentChatPartner
&& currentUserId === isTypingTo;
userNameTyping = isMsgParticipant ? name : null;
}
return userNameTyping;
}).filter(e => e);
if (names) {
const { length } = names;
const noTypers = length < 1;
const singleTyper = length === 1;
const multipleTypersShown = length > 1 && length <= 3;
if (noTypers) return null;
if (singleTyper) {
if (names[0].length < 20) {
return ` ${names[0]} ${intl.formatMessage(messages.singularTyping)}`;
}
return (` ${names[0].slice(0, 20)}... ${intl.formatMessage(messages.singularTyping)}`);
}
if (multipleTypersShown) {
const formattedNames = names.map((name) => {
if (name.length < 15) return ` ${name}`;
return ` ${name.slice(0, 15)}...`;
});
return (`${formattedNames} ${intl.formatMessage(messages.pluralTyping)}`);
}
return (` ${intl.formatMessage(messages.severalPeople)} ${intl.formatMessage(messages.pluralTyping)}`);
}
return null;
}
render() {
const {
error,
} = this.props;
return (
<div className={error ? styles.error : styles.info}>
<span>
<span>{error || this.renderIsTypingString()}</span>
{!error && this.renderIsTypingString()
? <span className={styles.connectingAnimation} />
: null
}
</span>
</div>
);
}
}
TypingIndicator.propTypes = propTypes;
export default injectIntl(TypingIndicator);

View File

@ -0,0 +1,53 @@
import React, { PureComponent } from 'react';
import { withTracker } from 'meteor/react-meteor-data';
import Auth from '/imports/ui/services/auth';
import { UsersTyping } from '/imports/api/group-chat-msg';
import Users from '/imports/api/users';
import TypingIndicator from './component';
const CHAT_CONFIG = Meteor.settings.public.chat;
const PUBLIC_CHAT_KEY = CHAT_CONFIG.public_id;
const TYPING_INDICATOR_ENABLED = CHAT_CONFIG.typingIndicator.enabled;
class TypingIndicatorContainer extends PureComponent {
render() {
return (
<TypingIndicator {...this.props} />
);
}
}
export default withTracker(() => {
const idChatOpen = Session.get('idChatOpen');
let selector = {
meetingId: Auth.meetingID,
isTypingTo: PUBLIC_CHAT_KEY,
};
if (idChatOpen !== PUBLIC_CHAT_KEY) {
selector = {
meetingId: Auth.meetingID,
isTypingTo: Auth.userID,
userId: idChatOpen,
};
}
const typingUsers = UsersTyping.find(selector).fetch();
const currentUser = Users.findOne({
meetingId: Auth.meetingID,
userId: Auth.userID,
}, {
fields: {
userId: 1,
},
});
return {
currentUserId: currentUser ? currentUser.userId : null,
typingUsers,
currentChatPartner: idChatOpen,
indicatorEnabled: TYPING_INDICATOR_ENABLED,
};
})(TypingIndicatorContainer);

View File

@ -11,7 +11,7 @@ const lockContextContainer = component => withTracker(() => {
const lockSetting = new LockStruct();
const Meeting = Meetings.findOne({ meetingId: Auth.meetingID });
const User = Users.findOne({ userId: Auth.userID });
const userIsLocked = User.locked && User.role === ROLE_MODERATOR;
const userIsLocked = User.locked && User.role !== ROLE_MODERATOR;
const lockSettings = Meeting.lockSettingsProps;
lockSetting.isLocked = userIsLocked;

View File

@ -123,6 +123,29 @@ class RecordingIndicator extends PureComponent {
document.activeElement.blur();
};
const recordingIndicatorIcon = (
<span className={styles.recordingIndicatorIcon}>
<svg xmlns="http://www.w3.org/2000/svg" height="100%" version="1" viewBox="0 0 20 20">
<g stroke="#FFF" fill="#FFF" strokeLinecap="square">
<circle
fill="none"
strokeWidth="1"
r="9"
cx="10"
cy="10"
/>
<circle
stroke={recording ? '#F00' : '#FFF'}
fill={recording ? '#F00' : '#FFF'}
r="4"
cx="10"
cy="10"
/>
</g>
</svg>
</span>
);
const showButton = amIModerator && allowStartStopRecording;
const recordMeetingButton = (
@ -135,9 +158,7 @@ class RecordingIndicator extends PureComponent {
onClick={recordingToggle}
onKeyPress={recordingToggle}
>
<span
className={recording ? styles.recordingIndicatorON : styles.recordingIndicatorOFF}
/>
{recordingIndicatorIcon}
<div className={styles.presentationTitle}>
{recording

View File

@ -91,56 +91,10 @@
display: flex;
}
%recordingIndicator {
border: var(--border-size-small) solid var(--color-white) !important;
border-radius: 50%;
span {
border: none;
box-shadow: none;
background-color: transparent !important;
}
position: relative;
display: inline-block;
padding: 0 !important;
.recordingIndicatorIcon {
width: var(--font-size-large);
height: var(--font-size-large);
border-radius: 50%;
&:after {
content: '';
width: calc(var(--font-size-large) / 2);
height: calc(var(--font-size-large) / 2);
position: absolute;
top: 50%;
left: 50%;
margin-top: calc((var(--font-size-large) / -4));
margin-left: calc((var(--font-size-large) / -4));
border-radius: 50%;
}
}
.recordingIndicatorON {
@extend %recordingIndicator;
&:after {
border: var(--border-size) solid transparent;
background-color: var(--color-danger);
}
}
.recordingIndicatorOFF {
@extend %recordingIndicator;
&:after {
background-color: var(--color-white);
}
}
.isRecordingCircle {
border: var(--border-size-small) solid var(--color-white) !important;
border-radius: 50%;
span {
border: none;
box-shadow: none;
background-color: transparent !important;
}
font-size: var(--font-size-base);
}
.recordingIndicator {

View File

@ -2,7 +2,6 @@ import React from 'react';
import { withTracker } from 'meteor/react-meteor-data';
import Users from '/imports/api/users/';
import Auth from '/imports/ui/services/auth';
import mapUser from '/imports/ui/services/user/mapUser';
import {
isVideoBroadcasting, presenterScreenshareHasEnded, unshareScreen,
presenterScreenshareHasStarted,
@ -19,9 +18,8 @@ const ScreenshareContainer = (props) => {
export default withTracker(() => {
const user = Users.findOne({ userId: Auth.userID });
const MappedUser = mapUser(user);
return {
isPresenter: MappedUser.isPresenter,
isPresenter: user.presenter,
unshareScreen,
isVideoBroadcasting,
presenterScreenshareHasStarted,

View File

@ -9,10 +9,12 @@ import AnnotationsTextService from '/imports/ui/components/whiteboard/annotation
import AnnotationsLocal from '/imports/ui/components/whiteboard/service';
import mapUser from '/imports/ui/services/user/mapUser';
const CHAT_CONFIG = Meteor.settings.public.chat;
const CHAT_ENABLED = CHAT_CONFIG.enabled;
const PUBLIC_GROUP_CHAT_ID = CHAT_CONFIG.public_group_id;
const PUBLIC_CHAT_TYPE = CHAT_CONFIG.type_public;
const TYPING_INDICATOR_ENABLED = CHAT_CONFIG.typingIndicator.enabled;
const SUBSCRIPTIONS = [
'users', 'meetings', 'polls', 'presentations', 'slides', 'slide-positions', 'captions',
'voiceUsers', 'whiteboard-multi-user', 'screenshare', 'group-chat',
@ -54,7 +56,9 @@ export default withTracker(() => {
};
let subscriptionsHandlers = SUBSCRIPTIONS.map((name) => {
if (!CHAT_ENABLED && name.indexOf('chat') !== -1) return;
if ((!TYPING_INDICATOR_ENABLED && name.indexOf('typing') !== -1)
|| (!CHAT_ENABLED && name.indexOf('chat') !== -1)) return;
return Meteor.subscribe(
name,
credentials,

View File

@ -94,9 +94,11 @@ class UserParticipants extends Component {
return !isPropsEqual || !isStateEqual;
}
componentDidUpdate() {
componentDidUpdate(prevProps, prevState) {
const { selectedUser } = this.state;
if (selectedUser === prevState.selectedUser) return;
if (selectedUser) {
const { firstChild } = selectedUser;
if (firstChild) firstChild.focus();

View File

@ -154,7 +154,6 @@ class UserDropdown extends PureComponent {
componentDidUpdate() {
const { dropdownVisible } = this.props;
if (!dropdownVisible) document.activeElement.blur();
this.checkDropdownDirection();
}

View File

@ -282,21 +282,23 @@ class WhiteboardToolbar extends Component {
* 4. Trigger initial animation for the icons
*/
// 1st case
if (colorSelected.value !== prevState.colorSelected.value) {
// 1st case b)
if (annotationSelected.value !== 'text') {
if (this.thicknessListIconRadius && this.thicknessListIconColor) {
if (colorSelected.value !== prevState.colorSelected.value) {
// 1st case b)
if (annotationSelected.value !== 'text') {
this.thicknessListIconColor.beginElement();
}
// 1st case a)
this.colorListIconColor.beginElement();
// 2nd case
} else if (thicknessSelected.value !== prevState.thicknessSelected.value) {
this.thicknessListIconRadius.beginElement();
// 3rd case
} else if (annotationSelected.value !== 'text'
&& prevState.annotationSelected.value === 'text') {
this.thicknessListIconRadius.beginElement();
this.thicknessListIconColor.beginElement();
}
// 1st case a)
this.colorListIconColor.beginElement();
// 2nd case
} else if (thicknessSelected.value !== prevState.thicknessSelected.value) {
this.thicknessListIconRadius.beginElement();
// 3rd case
} else if (annotationSelected.value !== 'text'
&& prevState.annotationSelected.value === 'text') {
this.thicknessListIconRadius.beginElement();
this.thicknessListIconColor.beginElement();
}
// 4th case, initial animation is triggered in componentDidMount
}

View File

@ -171,6 +171,8 @@ public:
storage_key: UNREAD_CHATS
system_messages_keys:
chat_clear: PUBLIC_CHAT_CLEAR
typingIndicator:
enabled: true
note:
enabled: false
url: ETHERPAD_HOST

View File

@ -3,6 +3,8 @@
"app.chat.submitLabel": "Üzenet küldése",
"app.chat.errorMinMessageLength": "Az üzenet {0} karakterrel túl rövid",
"app.chat.errorMaxMessageLength": "Az üzenet {0} karakterrel túl hosszú",
"app.chat.disconnected": "Nem küldhetsz üzenete, mert nem kapcsolódtál",
"app.chat.locked": "Nem küldhetsz üzenete, mert a beszélgetés zárolt",
"app.chat.inputLabel": "{0}: üzenet érkezett",
"app.chat.inputPlaceholder": "Üzenet küldése {0} felhasználónak",
"app.chat.titlePublic": "Nyilvános üzenetek",
@ -19,6 +21,9 @@
"app.chat.offline": "Offline",
"app.chat.emptyLogLabel": "Az üzenetek naplója üres",
"app.chat.clearPublicChatMessage": "A nyilvános beszélgetés előzményeit csak moderátor törölheti",
"app.chat.severalPeople": "Számos ember",
"app.chat.pluralTyping": "gépel jelenleg",
"app.chat.singularTyping": "gépel jelenleg",
"app.captions.label": "Feliratok",
"app.captions.menu.close": "Bezárás",
"app.captions.menu.start": "Indítás",
@ -36,7 +41,11 @@
"app.captions.menu.cancelLabel": "Mégsem",
"app.captions.pad.hide": "Felirat elrejtése",
"app.captions.pad.tip": "Nyomj Esc-et a szerkesztő eszköztárra fokuszálásához",
"app.captions.pad.ownership": "Átvétel",
"app.captions.pad.ownershipTooltip": "{0} feliratok tulajdonosa leszel",
"app.captions.pad.interimResult": "Közbenső eredmények",
"app.captions.pad.dictationStart": "Diktálás indítása",
"app.captions.pad.dictationStop": "Diktálás befejezése",
"app.captions.pad.dictationOnDesc": "Beszédfelismerés bekapcsolása",
"app.captions.pad.dictationOffDesc": "Beszédfelismerés kikapcsolása",
"app.note.title": "Megosztott jegyzetek",
@ -89,6 +98,7 @@
"app.userList.userOptions.disablePrivChat": "A privát üzenetek le van tiltva",
"app.userList.userOptions.disablePubChat": "A nyilvános üzenetek le van tiltva",
"app.userList.userOptions.disableNote": "A megosztott jegyzetek zárolva vannak",
"app.userList.userOptions.hideUserList": "A résztvevők nem látják a felhasználók listáját",
"app.userList.userOptions.webcamsOnlyForModerator": "Csak a moderátorok láthatják a résztvevők webkaméráját (zárolási beállítások miatt)",
"app.userList.content.participants.options.clearedStatus": "Az összes felhasználó állapotát sikeresen törölted",
"app.userList.userOptions.enableCam": " A résztvevők webkamerája engedélyezve van",
@ -96,11 +106,15 @@
"app.userList.userOptions.enablePrivChat": "A privát üzenetek engedélyezve van",
"app.userList.userOptions.enablePubChat": "A nyilvános üzenetek engedélyezve van",
"app.userList.userOptions.enableNote": "A megosztott jegyzet engedélyezve van",
"app.userList.userOptions.showUserList": "A résztvevők látják a felhasználók listáját",
"app.userList.userOptions.enableOnlyModeratorWebcam": "A webkamerád engedélyezve van, így a többiek láthatnak",
"app.media.label": "Média",
"app.media.autoplayAlertDesc": "Hozzáférés engedélyezése",
"app.media.screenshare.start": "A képernyőmegosztás elindult",
"app.media.screenshare.end": "A képernyőmegosztás befejeződött",
"app.media.screenshare.safariNotSupported": "A képernyőmegosztás jelenleg nem működik Safari alatt. Javasoljuk Firefox, illetve Google Chrome használatát.",
"app.media.screenshare.autoplayBlockedDesc": "Az előadó képernyőjének megjelenítéséhez az engedélyedre van szükségünk.",
"app.media.screenshare.autoplayAllowLabel": "Megosztott képernyő megjelenítése",
"app.meeting.ended": "Ez a munkamenet befejeződött",
"app.meeting.meetingTimeRemaining": "Az előadásból hátralévő idő: {0}",
"app.meeting.meetingTimeHasEnded": "Az idő lejárt. Az előadás hamarosan véget ér",
@ -212,6 +226,7 @@
"app.downloadPresentationButton.label": "Az eredeti prezentáció letöltése",
"app.connectingMessage": "Kapcsolódás ...",
"app.waitingMessage": "Szétkapcsolódtunk. {0} másodperc múlva próbálunk újra csatlakozni ...",
"app.retryNow": "Most próbáld újra",
"app.navBar.settingsDropdown.optionsLabel": "Beállítások",
"app.navBar.settingsDropdown.fullscreenLabel": "Teljes képernyő",
"app.navBar.settingsDropdown.settingsLabel": "Beállítások",
@ -382,6 +397,11 @@
"app.audioModal.audioDialTitle": "Csatlakozás telefon használatával",
"app.audioDial.audioDialDescription": "Tárcsázás",
"app.audioDial.audioDialConfrenceText": "és add meg a megbeszélés PIN számát: ",
"app.audioModal.autoplayBlockedDesc": "Hang lejátszásához az engedélyedre van szükségünk.",
"app.audioModal.playAudio": "Hang lejátszása",
"app.audioModal.playAudio.arialabel" : "Hang lejátszása",
"app.audioDial.tipIndicator": "Tipp",
"app.audioDial.tipMessage": "Saját magad némításához/hangosításához nyomj '0'-t a telefonon.",
"app.audioModal.connecting": "Kapcsolódás",
"app.audioModal.connectingEchoTest": "Kapcsolódás a hangteszthez",
"app.audioManager.joinedAudio": "Csatlakoztál a beszélgetéshez",
@ -455,6 +475,7 @@
"app.toast.meetingMuteOn.label": "Az összes felhasználót elnémítottad",
"app.toast.meetingMuteOff.label": "A megbeszélés némaságát kikapcsoltad",
"app.notification.recordingStart": "Ezt a munkamenetet rögzítjük",
"app.notification.recordingStop": "Ezt a munkamenetet nem rögzítjük",
"app.notification.recordingPaused": "Ezt a munkamenetet nem rögzítjük tovább",
"app.notification.recordingAriaLabel": "Felvétel hossza",
"app.shortcut-help.title": "Gyorsbillentyűk",
@ -590,6 +611,8 @@
"app.videoDock.webcamFocusDesc": "Fókusz a kiválasztott webkamerára",
"app.videoDock.webcamUnfocusLabel": "Fókusz elvétele",
"app.videoDock.webcamUnfocusDesc": "Fókusz elvétele a kiválasztott webkameráról",
"app.videoDock.autoplayBlockedDesc": "Mások webkamerájának a megjelenítéséhez az engedélyedre van szükségünk.",
"app.videoDock.autoplayAllowLabel": "Webkamerák megjelenítése",
"app.invitation.title": "Meghívás csapatszobába",
"app.invitation.confirm": "Meghívás",
"app.createBreakoutRoom.title": "Csapatszobák",

View File

@ -3,7 +3,10 @@
"app.chat.submitLabel": "Invia Messaggio",
"app.chat.errorMinMessageLength": "Il messaggio di {0} carattere(i) è troppo breve",
"app.chat.errorMaxMessageLength": "Il messaggio di {0} carattere(i) è troppo lungo",
"app.chat.disconnected": "Sei disconnesso, la chat è disattivata.",
"app.chat.locked": "La chat è disabilitata.",
"app.chat.inputLabel": "Messaggio di input per la chat {0}",
"app.chat.inputPlaceholder": "Invia un messaggio a {0}",
"app.chat.titlePublic": "Chat pubblica",
"app.chat.titlePrivate": "Chat privata con {0}",
"app.chat.partnerDisconnected": "{0} ha lasciato il meeting",
@ -18,11 +21,33 @@
"app.chat.offline": "Disconnesso",
"app.chat.emptyLogLabel": "Il registro chat è vuoto",
"app.chat.clearPublicChatMessage": "Il registro della Chat pubblica è stato cancellato da un moderatore",
"app.chat.severalPeople": "Alcune persone",
"app.chat.pluralTyping": "stanno scrivendo",
"app.chat.singularTyping": "sta scrivendo",
"app.captions.label": "Sottotitoli",
"app.captions.menu.close": "Chiudi",
"app.captions.menu.start": "Avvia",
"app.captions.menu.ariaStart": "Avvia la scrittura dei sottotitoli",
"app.captions.menu.ariaStartDesc": "Apre la finestra di modifica dei sottotitoli e chiude la finestra di dialogo",
"app.captions.menu.select": "Seleziona le lingue disponibili",
"app.captions.menu.ariaSelect": "Lingua dei sottotitoli",
"app.captions.menu.subtitle": "Seleziona una lingua e uno stile per i sottotitoli della sessione",
"app.captions.menu.title": "Sottotitoli",
"app.captions.menu.fontSize": "Dimensione",
"app.captions.menu.fontColor": "Colore",
"app.captions.menu.fontFamily": "Carattere",
"app.captions.menu.backgroundColor": "Colore di sfondo",
"app.captions.menu.previewLabel": "Anteprima",
"app.captions.menu.cancelLabel": "Annulla",
"app.captions.pad.hide": "Nascondi i sottotitoli",
"app.captions.pad.tip": "Premi ESC per utilizzare la barra degli strumenti",
"app.captions.pad.ownership": "Ottieni permessi",
"app.captions.pad.ownershipTooltip": "Sarai assegnato come proprietario di {0} sottotitoli",
"app.captions.pad.interimResult": "Risultati provvisori",
"app.captions.pad.dictationStart": "Avvia dettatura",
"app.captions.pad.dictationStop": "Interrompi dettatura",
"app.captions.pad.dictationOnDesc": "Attiva riconoscimento vocale",
"app.captions.pad.dictationOffDesc": "Disattiva riconoscimento vocale",
"app.note.title": "Note condivise",
"app.note.label": "Note",
"app.note.hideNoteLabel": "Nascondi nota",
@ -34,6 +59,8 @@
"app.userList.participantsTitle": "Partecipanti",
"app.userList.messagesTitle": "Messaggi",
"app.userList.notesTitle": "Note",
"app.userList.notesListItem.unreadContent": "I nuovi contenuti sono disponibili nelle note condivise",
"app.userList.captionsTitle": "Sottotitoli",
"app.userList.presenter": "Presentatore",
"app.userList.you": "Tu",
"app.userList.locked": "Bloccato",
@ -43,6 +70,7 @@
"app.userList.menuTitleContext": "Opzioni disponibili",
"app.userList.chatListItem.unreadSingular": "{0} Nuovo Messaggio",
"app.userList.chatListItem.unreadPlural": "{0} Nuovi Messaggi",
"app.userList.menu.chat.label": "Avvia una chat privata",
"app.userList.menu.clearStatus.label": "Cancella stato",
"app.userList.menu.removeUser.label": "Rimuovi Utente",
"app.userList.menu.muteUserAudio.label": "Silenzia utente",
@ -70,11 +98,23 @@
"app.userList.userOptions.disablePrivChat": "Le chat private sono disabilitate",
"app.userList.userOptions.disablePubChat": "La chat pubblica è disabilitata",
"app.userList.userOptions.disableNote": "Ora le note condivise sono bloccate",
"app.userList.userOptions.hideUserList": "La lista utenti è ora nascosta agli utenti",
"app.userList.userOptions.webcamsOnlyForModerator": "Solo i moderatori possono vedere il video degli spettatori (impostazioni)",
"app.userList.content.participants.options.clearedStatus": "Ripristinati tutti gli stati",
"app.userList.userOptions.enableCam": "La webcam degli utenti è ora abilitata",
"app.userList.userOptions.enableMic": "Il microfono degli utenti è ora abilitato",
"app.userList.userOptions.enablePrivChat": "Le chat private sono abilitate",
"app.userList.userOptions.enablePubChat": "Le chat pubbliche sono abilitate",
"app.userList.userOptions.enableNote": "Le note condivise sono abilitate",
"app.userList.userOptions.showUserList": "La lista utenti è ora visibile agli utenti",
"app.userList.userOptions.enableOnlyModeratorWebcam": "Puoi attivare la tua webcam adesso, tutti ti vedranno",
"app.media.label": "Audio/Video",
"app.media.autoplayAlertDesc": "Premetti l'accesso",
"app.media.screenshare.start": "Condivisione schermo avviata",
"app.media.screenshare.end": "Condivisione schermo terminata",
"app.media.screenshare.safariNotSupported": "La condivisione schermo non è attualmente supportata da Safari. Per favore usa Firefox o Google Chrome.",
"app.media.screenshare.autoplayBlockedDesc": "Abbiamo bisogno del tuo permesso per mostrarti lo schermo del presentatore",
"app.media.screenshare.autoplayAllowLabel": "Visualizza schermo condiviso",
"app.meeting.ended": "La sessione è terminata",
"app.meeting.meetingTimeRemaining": "Tempo rimanente al termine del meeting: {0}",
"app.meeting.meetingTimeHasEnded": "Tempo scaduto. Il meeting terminerà a breve",
@ -87,6 +127,8 @@
"app.presentation.startSlideContent": "Inizio contenuto slide",
"app.presentation.endSlideContent": "Termine contenuto slide",
"app.presentation.emptySlideContent": "Nessun contenuto per la slide corrente",
"app.presentation.presentationToolbar.noNextSlideDesc": "Fine della presentazione",
"app.presentation.presentationToolbar.noPrevSlideDesc": "Avvia presentazione",
"app.presentation.presentationToolbar.selectLabel": "Seleziona slide",
"app.presentation.presentationToolbar.prevSlideLabel": "Slide precedente",
"app.presentation.presentationToolbar.prevSlideDesc": "Spostati alla slide precedente",
@ -110,7 +152,9 @@
"app.presentation.presentationToolbar.fitToPage": "Adatta alla pagina",
"app.presentation.presentationToolbar.goToSlide": "Slide {0}",
"app.presentationUploder.title": "Presentazione",
"app.presentationUploder.message": "Come presentatore hai la possibilità di caricare documenti di Office o PDF. Si raccomanda di utilizzare i file PDF per i migliori risultati. Assicurarsi che la presentazione sia selezionata utilizzando la casella di controllo sulla destra.",
"app.presentationUploder.uploadLabel": "Carica",
"app.presentationUploder.confirmLabel": "Conferma",
"app.presentationUploder.confirmDesc": "Salva modifiche e avvia presentazione",
"app.presentationUploder.dismissLabel": "Annulla",
"app.presentationUploder.dismissDesc": "Chiudi la finestra e annulla le modifiche",
@ -121,6 +165,7 @@
"app.presentationUploder.fileToUpload": "Da caricare...",
"app.presentationUploder.currentBadge": "Attuale",
"app.presentationUploder.genericError": "Dannazione, qualcosa è andato storto",
"app.presentationUploder.rejectedError": "Il file selezionato è stato rifiutato. controllare il tipo di file.",
"app.presentationUploder.upload.progress": "Caricamento ({0}%)",
"app.presentationUploder.upload.413": "Il file è troppo grande, il numero massimo di 200 pagine è stato raggiunto",
"app.presentationUploder.conversion.conversionProcessingSlides": "Elaborazione pagina {0} di {1}",
@ -181,6 +226,7 @@
"app.downloadPresentationButton.label": "Scarica la presentazione originale",
"app.connectingMessage": "Connessione...",
"app.waitingMessage": "Disconnesso. Prossimo tentativo in {0} secondi...",
"app.retryNow": "Riprova ora",
"app.navBar.settingsDropdown.optionsLabel": "Opzioni",
"app.navBar.settingsDropdown.fullscreenLabel": "Schermo intero",
"app.navBar.settingsDropdown.settingsLabel": "Impostazioni",
@ -266,6 +312,7 @@
"app.actionsBar.actionsDropdown.presentationLabel": "Gestisci Presentazione",
"app.actionsBar.actionsDropdown.initPollLabel": "Crea un sondaggio",
"app.actionsBar.actionsDropdown.desktopShareLabel": "Condividi lo schermo",
"app.actionsBar.actionsDropdown.lockedDesktopShareLabel": "La condivisione dello schermo è bloccata",
"app.actionsBar.actionsDropdown.stopDesktopShareLabel": "Termina condivisione schermo",
"app.actionsBar.actionsDropdown.presentationDesc": "Gestisci Presentazione",
"app.actionsBar.actionsDropdown.initPollDesc": "Crea un sondaggio",
@ -273,8 +320,11 @@
"app.actionsBar.actionsDropdown.stopDesktopShareDesc": "Termina condivisione schermo con ",
"app.actionsBar.actionsDropdown.pollBtnLabel": "Avvia un sondaggio",
"app.actionsBar.actionsDropdown.pollBtnDesc": "Attiva/Disattiva pannello sondaggi",
"app.actionsBar.actionsDropdown.saveUserNames": "Salva lista nomi utente",
"app.actionsBar.actionsDropdown.createBreakoutRoom": "Crea una stanza breakout",
"app.actionsBar.actionsDropdown.createBreakoutRoomDesc": "crea un breakout per dividere il meeting in corso",
"app.actionsBar.actionsDropdown.captionsLabel": "Scrivi sottotitoli",
"app.actionsBar.actionsDropdown.captionsDesc": "Attiva/Disattiva pannello sottotitoli",
"app.actionsBar.actionsDropdown.takePresenter": "Diventa Presentatore",
"app.actionsBar.actionsDropdown.takePresenterDesc": "Assegna al tuo utente il ruolo di presentatore",
"app.actionsBar.emojiMenu.statusTriggerLabel": "Imposta Stato",
@ -299,6 +349,8 @@
"app.actionsBar.emojiMenu.thumbsDownLabel": "Contrariato",
"app.actionsBar.emojiMenu.thumbsDownDesc": "Cambia il tuo stato in \"contrariato\"",
"app.actionsBar.currentStatusDesc": "stato corrente {0}",
"app.actionsBar.captions.start": "Avvia riproduzione dei sottotitoli",
"app.actionsBar.captions.stop": "Interrompi riproduzione sottotitoli",
"app.audioNotification.audioFailedError1001": "Errore 1001: Websocket disconnesso",
"app.audioNotification.audioFailedError1002": "Errore 1002: Impossibile stabilire una connessione al WebSocket",
"app.audioNotification.audioFailedError1003": "Errore 1003: La versione del browser non è supportata",
@ -345,11 +397,17 @@
"app.audioModal.audioDialTitle": "Partecipa utilizzando il telefono",
"app.audioDial.audioDialDescription": "Componi",
"app.audioDial.audioDialConfrenceText": "e inserisci il seguente numero PIN:",
"app.audioModal.autoplayBlockedDesc": "Abbiamo bisogno del tuo permesso per riprodurre l'audio",
"app.audioModal.playAudio": "Riproduci audio",
"app.audioModal.playAudio.arialabel" : "Riproduci audio",
"app.audioDial.tipIndicator": "Consiglio",
"app.audioDial.tipMessage": "Premi il tasto '0' sul tuo telefono per abilitare o disabilitare il muto",
"app.audioModal.connecting": "Connessione in corso",
"app.audioModal.connectingEchoTest": "Connessione al test audio",
"app.audioManager.joinedAudio": "Stai partecipando al meeting audio",
"app.audioManager.joinedEcho": "Stai partecipando al test audio",
"app.audioManager.leftAudio": "L'audio del meeting è disattivato",
"app.audioManager.reconnectingAudio": "Tentativo di riconnessione dell'audio",
"app.audioManager.genericError": "Errore: c'è stato un errore, riprova",
"app.audioManager.connectionError": "Errore: Problema di connessione",
"app.audioManager.requestTimeout": "Errore: E' scaduto il tempo in attesa della risposta",
@ -412,7 +470,12 @@
"app.toast.chat.public": "Nuovo messaggio nella chat pubblica",
"app.toast.chat.private": "Nuovo messaggio privato",
"app.toast.chat.system": "Sistema",
"app.toast.clearedEmoji.label": "Reimpostate tutte le emoticons",
"app.toast.setEmoji.label": "Lo stato della emoticon è impostato {0}",
"app.toast.meetingMuteOn.label": "Tutti gli utenti sono stati messi in muto",
"app.toast.meetingMuteOff.label": "E' stato disattivato l'audio del meeting",
"app.notification.recordingStart": "La registrazione della sessione è stata avviata",
"app.notification.recordingStop": "La sessione non viene registrata",
"app.notification.recordingPaused": "La registrazione della sessione è stata interrotta",
"app.notification.recordingAriaLabel": "Durata registrazione",
"app.shortcut-help.title": "Scorciatoie da tastiera",
@ -471,6 +534,9 @@
"app.video.notSupportedError": "E' possibile condividere la webcam solo con sorgenti sicure, controllare che il certificato SSL sia valido",
"app.video.notReadableError": "Impossibile condividere la webcam. Controlla che la webcam non sia utilizzata da un altro programma",
"app.video.mediaFlowTimeout1020": "Errore 1020: Impossibile raggiungere il server media",
"app.video.suggestWebcamLock": "Impostare il blocco delle webcam degli utenti?",
"app.video.suggestWebcamLockReason": "(questo migliorerà la stabilità del meeting)",
"app.video.enable": "Abilita",
"app.video.cancel": "Annulla",
"app.video.swapCam": "Scambia",
"app.video.swapCamDesc": "cambia la webcam",
@ -545,6 +611,8 @@
"app.videoDock.webcamFocusDesc": "Metti in evidenza la webcam selezionata",
"app.videoDock.webcamUnfocusLabel": "Disattiva webcam",
"app.videoDock.webcamUnfocusDesc": "Disattiva la webcam selezionata",
"app.videoDock.autoplayBlockedDesc": "Abbiamo bisogno del tuo permesso per mostrarti le webcam degli utenti.",
"app.videoDock.autoplayAllowLabel": "Visualizza webcam",
"app.invitation.title": "Invito alla Stanza Separata",
"app.invitation.confirm": "Invita",
"app.createBreakoutRoom.title": "Stanze Separate",
@ -567,11 +635,14 @@
"app.createBreakoutRoom.roomName": "{0} (Stanza - {1})",
"app.createBreakoutRoom.doneLabel": "Fatto",
"app.createBreakoutRoom.nextLabel": "Prossimo",
"app.createBreakoutRoom.minusRoomTime": "Diminuisci la durata della stanza separata",
"app.createBreakoutRoom.addRoomTime": "Aumenta la durata della stanza separata",
"app.createBreakoutRoom.addParticipantLabel": "+ Aggiungi partecipante",
"app.createBreakoutRoom.freeJoin": "Permetti agli utenti di entrare in una Stanza Separata",
"app.createBreakoutRoom.leastOneWarnBreakout": "Devi posizionare almeno un utente nella Stanza Separata",
"app.createBreakoutRoom.modalDesc": "Completa i passaggi seguenti per creare Stanze nella tua sessione e aggiungere partecipanti ad esse.",
"app.createBreakoutRoom.roomTime": "{0} minuti",
"app.createBreakoutRoom.numberOfRoomsError": "Il numero di stanze non è valido.",
"app.externalVideo.start": "Condividi un nuovo video",
"app.externalVideo.title": "Condividi un video da YouTube",
"app.externalVideo.input": "Indirizzo video YouTube ",
@ -579,12 +650,14 @@
"app.externalVideo.urlError": "Questo indirizzo non è un video YouTube valido",
"app.externalVideo.close": "Chiudi",
"app.network.connection.effective.slow": "Stiamo rilevando problemi di connessione",
"app.network.connection.effective.slow.help": "Più informazioni",
"app.externalVideo.noteLabel": "Nota: I video condivisi da YouTube non appariranno nella registrazione",
"app.actionsBar.actionsDropdown.shareExternalVideo": "Condividi un video da YouTube",
"app.actionsBar.actionsDropdown.stopShareExternalVideo": "Interrompi condivisione video da YouTube",
"app.iOSWarning.label": "Aggiornare alla versione iOS 12.2 o seguenti",
"app.legacy.unsupportedBrowser": "Sembra che tu stia usando un browser non supportato. Per favore utilizza {0} oppure {1} per un supporto completo.",
"app.legacy.upgradeBrowser": "Sembra tu stia usando una vecchia versione di un browser supportato. Per favore aggiorna la versione del browser per un supporto completo."
"app.legacy.upgradeBrowser": "Sembra tu stia usando una vecchia versione di un browser supportato. Per favore aggiorna la versione del browser per un supporto completo.",
"app.legacy.criosBrowser": "Su iPhone/iPad (iOS) utilizzare il browser Safari per il supporto completo."
}

View File

@ -16,7 +16,7 @@ class ChatPage extends Page {
sendPublicChatMessage(message) {
this.publicChatElement.setValue(message);
pageObject.pressEnter();
this.sendMessageButtonElement.click();
}
// ////////
@ -74,6 +74,16 @@ class ChatPage extends Page {
copyChat() {
this.copyChatButtonElement.click();
}
// ////////
get sendMessageButtonSelector() {
return '[data-test=sendMessageButton]';
}
get sendMessageButtonElement() {
return $(this.sendMessageButtonSelector);
}
}
module.exports = new ChatPage();

View File

@ -13,7 +13,7 @@ const loginWithoutAudio = function (username) {
// login
LandingPage.open();
browser.setValue(LandingPage.usernameInputSelector, username);
LandingPage.joinWithEnterKey();
LandingPage.joinWithButtonClick();
// close audio modal
browser.waitForExist(ModalPage.modalCloseSelector, WAIT_TIME);

View File

@ -11,7 +11,7 @@ const loginWithoutAudio = function (username) {
// login
LandingPage.open();
browser.setValue(LandingPage.usernameInputSelector, username);
LandingPage.joinWithEnterKey();
LandingPage.joinWithButtonClick();
// close audio modal
browser.waitForExist(ModalPage.modalCloseSelector, WAIT_TIME);

View File

@ -34,7 +34,7 @@ describe('Settings', () => {
LandingPage.open();
browser.setValue(LandingPage.usernameInputSelector, 'user');
browser.setValue(LandingPage.meetingNameInputSelector, 'Demo Meeting Tests');
LandingPage.joinWithEnterKey();
LandingPage.joinWithButtonClick();
closeAudioModal();
});