diff --git a/app/src/components/UnsupportedBrowser.js b/app/src/components/UnsupportedBrowser.js new file mode 100644 index 0000000..480e792 --- /dev/null +++ b/app/src/components/UnsupportedBrowser.js @@ -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 ( + + + {!webrtcUnavailable && + + } + {webrtcUnavailable && + + } + + + + + + +
+ + {supportedBrowsers.map((browser, index) => + { + const supportedBrowser = `${browser.vendor} ${browser.name}`; + const supportedVersion = `${browser.version}+`; + + return ( + + + + + + + + + ); + })} + +
+
+ + + + + +
+
+
+ ); +}; + +UnsupportedBrowser.propTypes = +{ + webrtcUnavailable : PropTypes.bool.isRequired, + platform : PropTypes.string.isRequired, + classes : PropTypes.object.isRequired +}; + +export default withStyles(styles)(UnsupportedBrowser); diff --git a/app/src/index.js b/app/src/index.js index c5f333d..e21de44 100644 --- a/app/src/index.js +++ b/app/src/index.js @@ -12,6 +12,7 @@ import RoomClient from './RoomClient'; import RoomContext from './RoomContext'; import deviceInfo from './deviceInfo'; import * as meActions from './actions/meActions'; +import UnsupportedBrowser from './components/UnsupportedBrowser'; import ChooseRoom from './components/ChooseRoom'; import LoadingView from './components/LoadingView'; import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles'; @@ -20,7 +21,7 @@ import { persistor, store } from './store'; import { SnackbarProvider } from 'notistack'; import * as serviceWorker from './serviceWorker'; import { ReactLazyPreload } from './components/ReactLazyPreload'; - +import { detectDevice } from 'mediasoup-client'; // import messagesEnglish from './translations/en'; import messagesNorwegian from './translations/nb'; import messagesGerman from './translations/de'; @@ -138,6 +139,52 @@ function run() // Get current device. 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( + + + + + , + document.getElementById('multiparty-meeting') + ); + + return; + } + store.dispatch( meActions.setMe({ peerId, diff --git a/app/src/translations/cn.json b/app/src/translations/cn.json index 8976787..6ecd36f 100644 --- a/app/src/translations/cn.json +++ b/app/src/translations/cn.json @@ -191,5 +191,9 @@ "moderator.muteAudio": null, "moderator.muteVideo": null, "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } \ No newline at end of file diff --git a/app/src/translations/cs.json b/app/src/translations/cs.json index b119b50..3305f92 100644 --- a/app/src/translations/cs.json +++ b/app/src/translations/cs.json @@ -190,5 +190,9 @@ "moderator.muteAudio": null, "moderator.muteVideo": null, "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } \ No newline at end of file diff --git a/app/src/translations/de.json b/app/src/translations/de.json index d05780f..6a5dcf6 100644 --- a/app/src/translations/de.json +++ b/app/src/translations/de.json @@ -191,5 +191,9 @@ "moderator.muteAudio": "Moderator hat dich stummgeschaltet", "moderator.muteVideo": "Moderator hat dein Video gestoppt", "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } diff --git a/app/src/translations/dk.json b/app/src/translations/dk.json index fa40da0..bf09c55 100644 --- a/app/src/translations/dk.json +++ b/app/src/translations/dk.json @@ -191,5 +191,9 @@ "moderator.muteAudio": null, "moderator.muteVideo": null, "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } diff --git a/app/src/translations/el.json b/app/src/translations/el.json index ef661a0..87a37c4 100644 --- a/app/src/translations/el.json +++ b/app/src/translations/el.json @@ -191,5 +191,9 @@ "moderator.muteAudio": null, "moderator.muteVideo": null, "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } \ No newline at end of file diff --git a/app/src/translations/en.json b/app/src/translations/en.json index f8e4bfd..fbbd13b 100644 --- a/app/src/translations/en.json +++ b/app/src/translations/en.json @@ -191,5 +191,9 @@ "moderator.muteAudio": "Moderator muted your audio", "moderator.muteVideo": "Moderator muted your video", "moderator.muteScreenSharing": "Moderator muted your screen sharing", - "moderator.stopScreenSharing": "Moderator stopped your screen sharing" + "moderator.stopScreenSharing": "Moderator stopped 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:" } \ No newline at end of file diff --git a/app/src/translations/es.json b/app/src/translations/es.json index 8100917..6d20c1f 100644 --- a/app/src/translations/es.json +++ b/app/src/translations/es.json @@ -191,5 +191,9 @@ "moderator.muteAudio": null, "moderator.muteVideo": null, "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } diff --git a/app/src/translations/fr.json b/app/src/translations/fr.json index a85d841..4f80ebe 100644 --- a/app/src/translations/fr.json +++ b/app/src/translations/fr.json @@ -190,5 +190,9 @@ "moderator.muteAudio": null, "moderator.muteVideo": null, "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } diff --git a/app/src/translations/hr.json b/app/src/translations/hr.json index 2e3a973..b62ac73 100644 --- a/app/src/translations/hr.json +++ b/app/src/translations/hr.json @@ -191,5 +191,9 @@ "moderator.muteAudio": "Moderator je utišao tvoj zvuk", "moderator.muteVideo": "Moderator je zaustavio tvoj video", "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } diff --git a/app/src/translations/hu.json b/app/src/translations/hu.json index 8b6ea25..124e0e1 100644 --- a/app/src/translations/hu.json +++ b/app/src/translations/hu.json @@ -191,5 +191,9 @@ "moderator.muteAudio": "A moderátor elnémította a hangod", "moderator.muteVideo": "A moderátor elnémította a videód", "moderator.muteScreenSharing": "A moderátor szünetelteti képernyőmegosztásod", - "moderator.stopScreenSharing": "A moderátor leállította a képernyőmegosztásod" + "moderator.stopScreenSharing": "A moderátor leállította a 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:" } diff --git a/app/src/translations/it.json b/app/src/translations/it.json index 6dce676..4e092c1 100644 --- a/app/src/translations/it.json +++ b/app/src/translations/it.json @@ -191,5 +191,9 @@ "moderator.muteAudio": "Il moderatore ha mutato il tuo audio", "moderator.muteVideo": "Il moderatore ha fermato il tuo video", "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null -} \ No newline at end of file + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null +} diff --git a/app/src/translations/lv.json b/app/src/translations/lv.json index 2d71aaf..9f62d12 100644 --- a/app/src/translations/lv.json +++ b/app/src/translations/lv.json @@ -185,5 +185,9 @@ "moderator.muteAudio": "Moderators noklusināja jūsu mikrofonu", "moderator.muteVideo": "Moderators atslēdza jūsu kameru", "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } diff --git a/app/src/translations/nb.json b/app/src/translations/nb.json index b1ba84e..8cd31a9 100644 --- a/app/src/translations/nb.json +++ b/app/src/translations/nb.json @@ -190,6 +190,10 @@ "moderator.clearFiles": "Moderator fjernet filer", "moderator.muteAudio": "Moderator mutet lyden din", "moderator.muteVideo": "Moderator mutet videoen din", - "moderator.muteScreenSharing": null , - "moderator.stopScreenSharing": null + "moderator.muteScreenSharing": null, + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } \ No newline at end of file diff --git a/app/src/translations/pl.json b/app/src/translations/pl.json index 2a0d08c..c5baa68 100644 --- a/app/src/translations/pl.json +++ b/app/src/translations/pl.json @@ -191,5 +191,9 @@ "moderator.muteAudio": "Moderator wyciszył audio", "moderator.muteVideo": "Moderator wyciszył twoje video", "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } \ No newline at end of file diff --git a/app/src/translations/pt.json b/app/src/translations/pt.json index 6c7b122..1fb0103 100644 --- a/app/src/translations/pt.json +++ b/app/src/translations/pt.json @@ -191,5 +191,9 @@ "moderator.muteAudio": null, "moderator.muteVideo": null, "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } diff --git a/app/src/translations/ro.json b/app/src/translations/ro.json index e6f390a..9520474 100644 --- a/app/src/translations/ro.json +++ b/app/src/translations/ro.json @@ -191,5 +191,9 @@ "moderator.muteAudio": null, "moderator.muteVideo": null, "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } diff --git a/app/src/translations/tr.json b/app/src/translations/tr.json index 0c53df3..f3fa20d 100644 --- a/app/src/translations/tr.json +++ b/app/src/translations/tr.json @@ -182,6 +182,15 @@ "devices.cameraDisconnected": "Kamera bağlı değil", "devices.cameraError": "Kameranıza erişilirken bir hata oluştu", + + "moderator.clearChat": null, + "moderator.clearFiles": null, + "moderator.muteAudio": null, + "moderator.muteVideo": null, "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } diff --git a/app/src/translations/tw.json b/app/src/translations/tw.json index 20ad15e..103d4ce 100644 --- a/app/src/translations/tw.json +++ b/app/src/translations/tw.json @@ -190,5 +190,9 @@ "moderator.muteAudio": "您已被管理員靜音", "moderator.muteVideo": "您的視訊已被管理員關閉", "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } \ No newline at end of file diff --git a/app/src/translations/uk.json b/app/src/translations/uk.json index 9ab44d4..fc9b0a6 100644 --- a/app/src/translations/uk.json +++ b/app/src/translations/uk.json @@ -191,5 +191,9 @@ "moderator.muteAudio": null, "moderator.muteVideo": null, "moderator.muteScreenSharing": null, - "moderator.stopScreenSharing": null + "moderator.stopScreenSharing": null, + + "unsupportedBrowser.titleUnsupportedBrowser": null, + "unsupportedBrowser.titlewebrtcUnavailable": null, + "unsupportedBrowser.bodyText": null } \ No newline at end of file