Detect unsupported browsers, add a dialog

auto_join_3.3
Mészáros Mihály 2020-05-12 11:01:10 +02:00
parent 7f16487e45
commit 868b91a776
21 changed files with 300 additions and 21 deletions

View File

@ -0,0 +1,154 @@
import React from 'react';
import { withStyles } from '@material-ui/core/styles';
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import Dialog from '@material-ui/core/Dialog';
import DialogTitle from '@material-ui/core/DialogTitle';
import DialogContent from '@material-ui/core/DialogContent';
import Grid from '@material-ui/core/Grid';
import List from '@material-ui/core/List';
import ListItem from '@material-ui/core/ListItem';
import ListItemText from '@material-ui/core/ListItemText';
import ListItemAvatar from '@material-ui/core/ListItemAvatar';
import Avatar from '@material-ui/core/Avatar';
import WebAssetIcon from '@material-ui/icons/WebAsset';
import ErrorIcon from '@material-ui/icons/Error';
import Hidden from '@material-ui/core/Hidden';
const styles = (theme) =>
({
dialogPaper :
{
width : '40vw',
[theme.breakpoints.down('lg')] :
{
width : '40vw'
},
[theme.breakpoints.down('md')] :
{
width : '50vw'
},
[theme.breakpoints.down('sm')] :
{
width : '70vw'
},
[theme.breakpoints.down('xs')] :
{
width : '90vw'
}
// display : 'flex',
// flexDirection : 'column'
},
list : {
backgroundColor : theme.palette.background.paper
},
errorAvatar : {
width : theme.spacing(20),
height : theme.spacing(20)
}
});
const open=true;
const dividers=true;
let dense=false;
const supportedBrowsers=[
{ name: 'Chrome/Chromium', version: '74', vendor: 'Google' },
{ name: 'Edge', version: '18', vendor: 'Microsoft' },
{ name: 'Firefox', version: '60', vendor: 'Mozilla' },
{ name: 'Safari', version: '12', vendor: 'Apple' },
{ name: 'Opera', version: '62', vendor: '' },
// { name: 'Brave', version: '1.5', vendor: '' },
// { name: 'Vivaldi', version: '3', vendor: '' },
{ name: 'Samsung Internet', version: '11.1.1.52', vendor: '' }
];
const UnsupportedBrowser = ({
platform,
webrtcUnavailable,
classes
}) =>
{
if (platform !== 'desktop')
{
dense=true;
}
return (
<Dialog
open={open}
scroll={'body'}
classes={{
paper : classes.dialogPaper
}}
>
<DialogTitle id='form-dialog-title'>
{!webrtcUnavailable &&
<FormattedMessage
id='unsupportedBrowser.titleUnsupportedBrowser'
defaultMessage='Detected unsupported browser!'
/>
}
{webrtcUnavailable &&
<FormattedMessage
id='unsupportedBrowser.titlewebrtcUnavailable'
defaultMessage='Required functionality not availble in your browser!'
/>
}
</DialogTitle>
<DialogContent dividers={dividers} >
<FormattedMessage
id='unsupportedBrowser.bodyText'
defaultMessage='This meeting service requires a
functionality that is not supported by your browser.
Please upgrade, or switch to a different browser, or
check your settings. Supported browsers:'
/>
<Grid container spacing={2} justify='center' alignItems='center'>
<Grid item xs={12} md={7}>
<div className={classes.list}>
<List dense={dense}>
{supportedBrowsers.map((browser, index) =>
{
const supportedBrowser = `${browser.vendor} ${browser.name}`;
const supportedVersion = `${browser.version}+`;
return (
<ListItem key={index}>
<ListItemAvatar>
<Avatar>
<WebAssetIcon />
</Avatar>
</ListItemAvatar>
<ListItemText
primary={supportedBrowser}
secondary={supportedVersion}
/>
</ListItem>
);
})}
</List>
</div>
</Grid>
<Grid item xs={12} md={5} align='center'>
<Hidden mdDown>
<ErrorIcon className={classes.errorAvatar} color='error'/>
</Hidden>
</Grid>
</Grid>
</DialogContent>
</Dialog>
);
};
UnsupportedBrowser.propTypes =
{
webrtcUnavailable : PropTypes.bool.isRequired,
platform : PropTypes.string.isRequired,
classes : PropTypes.object.isRequired
};
export default withStyles(styles)(UnsupportedBrowser);

View File

@ -12,6 +12,7 @@ import RoomClient from './RoomClient';
import RoomContext from './RoomContext'; import RoomContext from './RoomContext';
import deviceInfo from './deviceInfo'; import deviceInfo from './deviceInfo';
import * as meActions from './actions/meActions'; import * as meActions from './actions/meActions';
import UnsupportedBrowser from './components/UnsupportedBrowser';
import ChooseRoom from './components/ChooseRoom'; import ChooseRoom from './components/ChooseRoom';
import LoadingView from './components/LoadingView'; import LoadingView from './components/LoadingView';
import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles'; import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';
@ -20,7 +21,7 @@ import { persistor, store } from './store';
import { SnackbarProvider } from 'notistack'; import { SnackbarProvider } from 'notistack';
import * as serviceWorker from './serviceWorker'; import * as serviceWorker from './serviceWorker';
import { ReactLazyPreload } from './components/ReactLazyPreload'; import { ReactLazyPreload } from './components/ReactLazyPreload';
import { detectDevice } from 'mediasoup-client';
// import messagesEnglish from './translations/en'; // import messagesEnglish from './translations/en';
import messagesNorwegian from './translations/nb'; import messagesNorwegian from './translations/nb';
import messagesGerman from './translations/de'; import messagesGerman from './translations/de';
@ -138,6 +139,52 @@ function run()
// Get current device. // Get current device.
const device = deviceInfo(); const device = deviceInfo();
let unsupportedBrowser=false;
let webrtcUnavailable=false;
if (detectDevice() === undefined)
{
logger.error('Unsupported browser detected by mediasoup client detectDevice! deviceInfo: %o', device);
unsupportedBrowser=true;
}
else
if (
navigator.mediaDevices === undefined ||
navigator.mediaDevices.getUserMedia === undefined ||
window.RTCPeerConnection === undefined
)
{
logger.error('WebRTC is unavialable in your browser! deviceInfo: %o', device);
webrtcUnavailable=true;
}
else
if (device.name === 'safari' && !isNaN(device.version) && parseFloat(device.version) < 12)
{
unsupportedBrowser=true;
}
else
{
logger.debug('Supported Browser! deviceInfo: %o', device);
}
if (unsupportedBrowser || webrtcUnavailable)
{
render(
<MuiThemeProvider theme={theme}>
<RawIntlProvider value={intl}>
<UnsupportedBrowser
webrtcUnavailable={webrtcUnavailable}
platform={device.platform}
/>
</RawIntlProvider>
</MuiThemeProvider>,
document.getElementById('multiparty-meeting')
);
return;
}
store.dispatch( store.dispatch(
meActions.setMe({ meActions.setMe({
peerId, peerId,

View File

@ -189,5 +189,9 @@
"moderator.clearFiles": null, "moderator.clearFiles": null,
"moderator.muteAudio": null, "moderator.muteAudio": null,
"moderator.muteVideo": null, "moderator.muteVideo": null,
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -188,5 +188,9 @@
"moderator.clearFiles": null, "moderator.clearFiles": null,
"moderator.muteAudio": null, "moderator.muteAudio": null,
"moderator.muteVideo": null, "moderator.muteVideo": null,
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -189,5 +189,9 @@
"moderator.clearFiles": "Moderator hat geteilte Dateiliste gelöscht", "moderator.clearFiles": "Moderator hat geteilte Dateiliste gelöscht",
"moderator.muteAudio": "Moderator hat dich stummgeschaltet", "moderator.muteAudio": "Moderator hat dich stummgeschaltet",
"moderator.muteVideo": "Moderator hat dein Video gestoppt", "moderator.muteVideo": "Moderator hat dein Video gestoppt",
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -189,5 +189,9 @@
"moderator.clearFiles": null, "moderator.clearFiles": null,
"moderator.muteAudio": null, "moderator.muteAudio": null,
"moderator.muteVideo": null, "moderator.muteVideo": null,
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -189,5 +189,9 @@
"moderator.clearFiles": null, "moderator.clearFiles": null,
"moderator.muteAudio": null, "moderator.muteAudio": null,
"moderator.muteVideo": null, "moderator.muteVideo": null,
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -189,5 +189,9 @@
"moderator.clearFiles": "Moderator cleared the files", "moderator.clearFiles": "Moderator cleared the files",
"moderator.muteAudio": "Moderator muted your audio", "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" "moderator.muteScreenSharing": "Moderator muted your screen sharing",
"unsupportedBrowser.titleUsnsupportedBrowser": "Detected unsupported browser!",
"unsupportedBrowser.titlewebrtcUnavailable": "Required functionality not available in your browser!",
"unsupportedBrowser.bodyText": "This meeting service requires a functionality that is not supported by your browser. Please upgrade, or switch to a different browser, or check your settings. Supported browsers:"
} }

View File

@ -189,5 +189,9 @@
"moderator.clearFiles": null, "moderator.clearFiles": null,
"moderator.muteAudio": null, "moderator.muteAudio": null,
"moderator.muteVideo": null, "moderator.muteVideo": null,
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -188,5 +188,9 @@
"moderator.clearFiles": null, "moderator.clearFiles": null,
"moderator.muteAudio": null, "moderator.muteAudio": null,
"moderator.muteVideo": null, "moderator.muteVideo": null,
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -189,5 +189,9 @@
"moderator.clearFiles": "Moderator je izbrisao datoteke", "moderator.clearFiles": "Moderator je izbrisao datoteke",
"moderator.muteAudio": "Moderator je utišao tvoj zvuk", "moderator.muteAudio": "Moderator je utišao tvoj zvuk",
"moderator.muteVideo": "Moderator je zaustavio tvoj video", "moderator.muteVideo": "Moderator je zaustavio tvoj video",
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -189,5 +189,10 @@
"moderator.clearFiles": "A moderátor kiürítette a file megosztás történelmet", "moderator.clearFiles": "A moderátor kiürítette a file megosztás történelmet",
"moderator.muteAudio": "A moderátor elnémította a hangod", "moderator.muteAudio": "A moderátor elnémította a hangod",
"moderator.muteVideo": "A moderátor elnémította a videód", "moderator.muteVideo": "A moderátor elnémította a videód",
"moderator.muteScreenSharing": "A moderátor leállította képernyőmegosztásod" "moderator.muteScreenSharing": "A moderátor leállította képernyőmegosztásod",
"unsupportedBrowser.titleUnsupportedBrowser": "A bőngésző verziód sajnos nem támogatott! :-(",
"unsupportedBrowser.titlewebrtcUnavailable": "A böngésződ egy szükséges funkciója nem elérhető!",
"unsupportedBrowser.bodyText": "Kérlek frissítsd a böngésződ, válts másik böngészőre, vagy ellenőrizd a böngésződ beállításait! Támogatott böngészők:"
} }

View File

@ -189,5 +189,10 @@
"moderator.clearFiles": "Il moderatore ha pulito i file", "moderator.clearFiles": "Il moderatore ha pulito i file",
"moderator.muteAudio": "Il moderatore ha mutato il tuo audio", "moderator.muteAudio": "Il moderatore ha mutato il tuo audio",
"moderator.muteVideo": "Il moderatore ha fermato il tuo video", "moderator.muteVideo": "Il moderatore ha fermato il tuo video",
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -183,5 +183,9 @@
"moderator.clearFiles": "Moderators notīrīja failus", "moderator.clearFiles": "Moderators notīrīja failus",
"moderator.muteAudio": "Moderators noklusināja jūsu mikrofonu", "moderator.muteAudio": "Moderators noklusināja jūsu mikrofonu",
"moderator.muteVideo": "Moderators atslēdza jūsu kameru", "moderator.muteVideo": "Moderators atslēdza jūsu kameru",
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -189,5 +189,9 @@
"moderator.clearFiles": "Moderator fjernet filer", "moderator.clearFiles": "Moderator fjernet filer",
"moderator.muteAudio": "Moderator mutet lyden din", "moderator.muteAudio": "Moderator mutet lyden din",
"moderator.muteVideo": "Moderator mutet videoen din", "moderator.muteVideo": "Moderator mutet videoen din",
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -189,5 +189,9 @@
"moderator.clearFiles": "Moderator wyczyścił pliki", "moderator.clearFiles": "Moderator wyczyścił pliki",
"moderator.muteAudio": "Moderator wyciszył audio", "moderator.muteAudio": "Moderator wyciszył audio",
"moderator.muteVideo": "Moderator wyciszył twoje video", "moderator.muteVideo": "Moderator wyciszył twoje video",
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -189,5 +189,9 @@
"moderator.clearFiles": null, "moderator.clearFiles": null,
"moderator.muteAudio": null, "moderator.muteAudio": null,
"moderator.muteVideo": null, "moderator.muteVideo": null,
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -189,5 +189,9 @@
"moderator.clearFiles": null, "moderator.clearFiles": null,
"moderator.muteAudio": null, "moderator.muteAudio": null,
"moderator.muteVideo": null, "moderator.muteVideo": null,
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -181,5 +181,9 @@
"devices.cameraDisconnected": "Kamera bağlı değil", "devices.cameraDisconnected": "Kamera bağlı değil",
"devices.cameraError": "Kameranıza erişilirken bir hata oluştu", "devices.cameraError": "Kameranıza erişilirken bir hata oluştu",
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -188,5 +188,9 @@
"moderator.clearFiles": "管理員清除了所有檔案", "moderator.clearFiles": "管理員清除了所有檔案",
"moderator.muteAudio": "您已被管理員靜音", "moderator.muteAudio": "您已被管理員靜音",
"moderator.muteVideo": "您的視訊已被管理員關閉", "moderator.muteVideo": "您的視訊已被管理員關閉",
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }

View File

@ -189,5 +189,9 @@
"moderator.clearFiles": null, "moderator.clearFiles": null,
"moderator.muteAudio": null, "moderator.muteAudio": null,
"moderator.muteVideo": null, "moderator.muteVideo": null,
"moderator.muteScreenSharing": null "moderator.muteScreenSharing": null,
"unsupportedBrowser.titleUnsupportedBrowser": null,
"unsupportedBrowser.titlewebrtcUnavailable": null,
"unsupportedBrowser.bodyText": null
} }