A button to promote all peers from lobby, fixes #287

auto_join_3.3
Håvar Aambø Fosstveit 2020-05-04 15:09:05 +02:00
parent a00d33ee4b
commit a1ed79c5db
23 changed files with 117 additions and 39 deletions

View File

@ -1274,6 +1274,26 @@ export default class RoomClient
roomActions.setSelectedPeer(peerId)); roomActions.setSelectedPeer(peerId));
} }
async promoteAllLobbyPeers()
{
logger.debug('promoteAllLobbyPeers()');
store.dispatch(
roomActions.setLobbyPeersPromotionInProgress(true));
try
{
await this.sendRequest('promoteAllPeers');
}
catch (error)
{
logger.error('promoteAllLobbyPeers() [error:"%o"]', error);
}
store.dispatch(
roomActions.setLobbyPeersPromotionInProgress(false));
}
async promoteLobbyPeer(peerId) async promoteLobbyPeer(peerId)
{ {
logger.debug('promoteLobbyPeer() [peerId:"%s"]', peerId); logger.debug('promoteLobbyPeer() [peerId:"%s"]', peerId);

View File

@ -123,6 +123,12 @@ export const toggleConsumerFullscreen = (consumerId) =>
payload : { consumerId } payload : { consumerId }
}); });
export const setLobbyPeersPromotionInProgress = (flag) =>
({
type : 'SET_LOBBY_PEERS_PROMOTION_IN_PROGRESS',
payload : { flag }
});
export const setMuteAllInProgress = (flag) => export const setMuteAllInProgress = (flag) =>
({ ({
type : 'MUTE_ALL_IN_PROGRESS', type : 'MUTE_ALL_IN_PROGRESS',

View File

@ -27,6 +27,7 @@ const ListLobbyPeer = (props) =>
const { const {
roomClient, roomClient,
peer, peer,
promotionInProgress,
canPromote, canPromote,
classes classes
} = props; } = props;
@ -55,7 +56,11 @@ const ListLobbyPeer = (props) =>
})} })}
> >
<IconButton <IconButton
disabled={!canPromote || peer.promotionInProgress} disabled={
!canPromote ||
peer.promotionInProgress ||
promotionInProgress
}
onClick={(e) => onClick={(e) =>
{ {
e.stopPropagation(); e.stopPropagation();
@ -74,6 +79,7 @@ ListLobbyPeer.propTypes =
roomClient : PropTypes.any.isRequired, roomClient : PropTypes.any.isRequired,
advancedMode : PropTypes.bool, advancedMode : PropTypes.bool,
peer : PropTypes.object.isRequired, peer : PropTypes.object.isRequired,
promotionInProgress : PropTypes.bool.isRequired,
canPromote : PropTypes.bool.isRequired, canPromote : PropTypes.bool.isRequired,
classes : PropTypes.object.isRequired classes : PropTypes.object.isRequired
}; };
@ -82,6 +88,7 @@ const mapStateToProps = (state, { id }) =>
{ {
return { return {
peer : state.lobbyPeers[id], peer : state.lobbyPeers[id],
promotionInProgress : state.room.lobbyPeersPromotionInProgress,
canPromote : canPromote :
state.me.roles.some((role) => state.me.roles.some((role) =>
state.room.permissionsFromRoles.PROMOTE_PEER.includes(role)) state.room.permissionsFromRoles.PROMOTE_PEER.includes(role))
@ -97,6 +104,8 @@ export default withRoomContext(connect(
{ {
return ( return (
prev.room.permissionsFromRoles === next.room.permissionsFromRoles && prev.room.permissionsFromRoles === next.room.permissionsFromRoles &&
prev.room.lobbyPeersPromotionInProgress ===
next.room.lobbyPeersPromotionInProgress &&
prev.me.roles === next.me.roles && prev.me.roles === next.me.roles &&
prev.lobbyPeers === next.lobbyPeers prev.lobbyPeers === next.lobbyPeers
); );

View File

@ -51,9 +51,11 @@ const styles = (theme) =>
}); });
const LockDialog = ({ const LockDialog = ({
roomClient,
room, room,
handleCloseLockDialog, handleCloseLockDialog,
lobbyPeers, lobbyPeers,
canPromote,
classes classes
}) => }) =>
{ {
@ -102,6 +104,20 @@ const LockDialog = ({
</DialogContent> </DialogContent>
} }
<DialogActions> <DialogActions>
<Button
disabled={
lobbyPeers.length === 0 ||
!canPromote ||
room.lobbyPeersPromotionInProgress
}
onClick={() => roomClient.promoteAllLobbyPeers()}
color='primary'
>
<FormattedMessage
id='label.promoteAllPeers'
defaultMessage='Promote all'
/>
</Button>
<Button onClick={() => handleCloseLockDialog(false)} color='primary'> <Button onClick={() => handleCloseLockDialog(false)} color='primary'>
<FormattedMessage <FormattedMessage
id='label.close' id='label.close'
@ -115,10 +131,12 @@ const LockDialog = ({
LockDialog.propTypes = LockDialog.propTypes =
{ {
roomClient : PropTypes.object.isRequired,
room : appPropTypes.Room.isRequired, room : appPropTypes.Room.isRequired,
handleCloseLockDialog : PropTypes.func.isRequired, handleCloseLockDialog : PropTypes.func.isRequired,
handleAccessCode : PropTypes.func.isRequired, handleAccessCode : PropTypes.func.isRequired,
lobbyPeers : PropTypes.array, lobbyPeers : PropTypes.array,
canPromote : PropTypes.bool,
classes : PropTypes.object.isRequired classes : PropTypes.object.isRequired
}; };
@ -126,7 +144,10 @@ const mapStateToProps = (state) =>
{ {
return { return {
room : state.room, room : state.room,
lobbyPeers : lobbyPeersKeySelector(state) lobbyPeers : lobbyPeersKeySelector(state),
canPromote :
state.me.roles.some((role) =>
state.room.permissionsFromRoles.PROMOTE_PEER.includes(role))
}; };
}; };
@ -144,6 +165,7 @@ export default withRoomContext(connect(
{ {
return ( return (
prev.room === next.room && prev.room === next.room &&
prev.me.roles === next.me.roles &&
prev.lobbyPeers === next.lobbyPeers prev.lobbyPeers === next.lobbyPeers
); );
} }

View File

@ -25,6 +25,7 @@ const initialState =
lockDialogOpen : false, lockDialogOpen : false,
joined : false, joined : false,
muteAllInProgress : false, muteAllInProgress : false,
lobbyPeersPromotionInProgress : false,
stopAllVideoInProgress : false, stopAllVideoInProgress : false,
closeMeetingInProgress : false, closeMeetingInProgress : false,
clearChatInProgress : false, clearChatInProgress : false,
@ -199,6 +200,9 @@ const room = (state = initialState, action) =>
return { ...state, spotlights }; return { ...state, spotlights };
} }
case 'SET_LOBBY_PEERS_PROMOTION_IN_PROGRESS':
return { ...state, lobbyPeersPromotionInProgress: action.payload.flag };
case 'MUTE_ALL_IN_PROGRESS': case 'MUTE_ALL_IN_PROGRESS':
return { ...state, muteAllInProgress: action.payload.flag }; return { ...state, muteAllInProgress: action.payload.flag };

View File

@ -106,6 +106,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "设置", "settings.settings": "设置",
"settings.camera": "视频设备", "settings.camera": "视频设备",

View File

@ -105,6 +105,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "Nastavení", "settings.settings": "Nastavení",
"settings.camera": "Kamera", "settings.camera": "Kamera",

View File

@ -106,6 +106,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "Einstellungen", "settings.settings": "Einstellungen",
"settings.camera": "Kamera", "settings.camera": "Kamera",

View File

@ -106,6 +106,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "Indstillinger", "settings.settings": "Indstillinger",
"settings.camera": "Kamera", "settings.camera": "Kamera",

View File

@ -106,6 +106,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "Ρυθμίσεις", "settings.settings": "Ρυθμίσεις",
"settings.camera": "Κάμερα", "settings.camera": "Κάμερα",

View File

@ -106,6 +106,7 @@
"label.appearence": "Appearence", "label.appearence": "Appearence",
"label.advanced": "Advanced", "label.advanced": "Advanced",
"label.addVideo": "Add video", "label.addVideo": "Add video",
"label.promoteAllPeers": "Promote all",
"settings.settings": "Settings", "settings.settings": "Settings",
"settings.camera": "Camera", "settings.camera": "Camera",

View File

@ -106,6 +106,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "Ajustes", "settings.settings": "Ajustes",
"settings.camera": "Cámara", "settings.camera": "Cámara",

View File

@ -106,6 +106,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "Paramètres", "settings.settings": "Paramètres",
"settings.camera": "Caméra", "settings.camera": "Caméra",

View File

@ -106,6 +106,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "Postavke", "settings.settings": "Postavke",
"settings.camera": "Kamera", "settings.camera": "Kamera",

View File

@ -106,6 +106,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "Beállítások", "settings.settings": "Beállítások",
"settings.camera": "Kamera", "settings.camera": "Kamera",

View File

@ -105,6 +105,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "Impostazioni", "settings.settings": "Impostazioni",
"settings.camera": "Videocamera", "settings.camera": "Videocamera",

View File

@ -106,6 +106,7 @@
"label.appearence": "Utseende", "label.appearence": "Utseende",
"label.advanced": "Avansert", "label.advanced": "Avansert",
"label.addVideo": "Legg til video", "label.addVideo": "Legg til video",
"label.promoteAllPeers": "Slipp inn alle",
"settings.settings": "Innstillinger", "settings.settings": "Innstillinger",
"settings.camera": "Kamera", "settings.camera": "Kamera",

View File

@ -106,6 +106,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "Ustawienia", "settings.settings": "Ustawienia",
"settings.camera": "Kamera", "settings.camera": "Kamera",

View File

@ -106,6 +106,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "Definições", "settings.settings": "Definições",
"settings.camera": "Camera", "settings.camera": "Camera",

View File

@ -106,6 +106,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "Setări", "settings.settings": "Setări",
"settings.camera": "Cameră video", "settings.camera": "Cameră video",

View File

@ -106,6 +106,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "Ayarlar", "settings.settings": "Ayarlar",
"settings.camera": "Kamera", "settings.camera": "Kamera",

View File

@ -106,6 +106,7 @@
"label.appearence": null, "label.appearence": null,
"label.advanced": null, "label.advanced": null,
"label.addVideo": null, "label.addVideo": null,
"label.promoteAllPeers": null,
"settings.settings": "Налаштування", "settings.settings": "Налаштування",
"settings.camera": "Камера", "settings.camera": "Камера",

View File

@ -63,8 +63,8 @@ class Lobby extends EventEmitter
for (const peer in this._peers) for (const peer in this._peers)
{ {
if (peer.socket) if (!this._peers[peer].closed)
this.promotePeer(peer.id); this.promotePeer(peer);
} }
} }