From c5080872bb53df0bc14a840be61138e9fbd2f6e6 Mon Sep 17 00:00:00 2001 From: Alex Kern Date: Mon, 27 Apr 2015 21:23:26 -0700 Subject: [PATCH] Show an error if there's no WebRTC support. --- lib/actions/SupportActions.js | 9 +++++++++ lib/client.js | 4 ++++ lib/components/App.js | 22 +++++++++++++++++++++- lib/stores/ErrorStore.js | 9 +++++++++ lib/stores/SupportStore.js | 15 +++++++++++++++ package.json | 5 +++-- 6 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 lib/actions/SupportActions.js create mode 100644 lib/stores/SupportStore.js diff --git a/lib/actions/SupportActions.js b/lib/actions/SupportActions.js new file mode 100644 index 0000000..24dafa8 --- /dev/null +++ b/lib/actions/SupportActions.js @@ -0,0 +1,9 @@ +import alt from '../alt' + +export default alt.createActions(class SupportActions { + constructor() { + this.generateActions( + 'noSupport' + ) + } +}) diff --git a/lib/client.js b/lib/client.js index 1980c27..a36db16 100644 --- a/lib/client.js +++ b/lib/client.js @@ -2,6 +2,8 @@ import React from 'react' import ReactRouter from 'react-router' import routes from './routes' import alt from './alt' +import webrtcSupport from 'webrtcsupport' +import SupportActions from './actions/SupportActions' let bootstrap = document.documentElement.getAttribute('data-bootstrap') alt.bootstrap(bootstrap) @@ -10,4 +12,6 @@ window.FilePizza = () => { ReactRouter.run(routes, ReactRouter.HistoryLocation, function (Handler) { React.render(, document) }) + + if (!webrtcSupport.support) SupportActions.noSupport() } diff --git a/lib/components/App.js b/lib/components/App.js index 20f6ec5..4e4aaea 100644 --- a/lib/components/App.js +++ b/lib/components/App.js @@ -1,9 +1,27 @@ +import ErrorPage from './ErrorPage' import FrozenHead from 'react-frozenhead' import React from 'react' +import SupportStore from '../stores/SupportStore' import { RouteHandler } from 'react-router' export default class App extends React.Component { + constructor() { + this.state = SupportStore.getState() + + this._onChange = () => { + this.setState(SupportStore.getState()) + } + } + + componentDidMount() { + SupportStore.listen(this._onChange) + } + + componentDidUnmount() { + SupportStore.unlisten(this._onChange) + } + render() { return @@ -23,7 +41,9 @@ export default class App extends React.Component { - + {this.state.isSupported + ? + : } diff --git a/lib/stores/ErrorStore.js b/lib/stores/ErrorStore.js index f10a684..63565db 100644 --- a/lib/stores/ErrorStore.js +++ b/lib/stores/ErrorStore.js @@ -1,11 +1,20 @@ +import SupportActions from '../actions/SupportActions' import alt from '../alt' export default alt.createStore(class ErrorStore { constructor() { + this.bindActions(SupportActions) + this.status = 404 this.message = 'Not Found' this.stack = null } + onNoSupport() { + this.status = 400 + this.message = 'No WebRTC Support' + this.stack = null + } + }, 'ErrorStore') diff --git a/lib/stores/SupportStore.js b/lib/stores/SupportStore.js new file mode 100644 index 0000000..e1b531b --- /dev/null +++ b/lib/stores/SupportStore.js @@ -0,0 +1,15 @@ +import SupportActions from '../actions/SupportActions' +import alt from '../alt' + +export default alt.createStore(class SupportStore { + + constructor() { + this.bindActions(SupportActions) + this.isSupported = true + } + + onNoSupport() { + this.isSupported = false + } + +}, 'SupportStore') diff --git a/package.json b/package.json index 6ba2c8d..8e1dead 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,8 @@ "browserify-middleware": "^5.0.2", "classnames": "^1.2.0", "express": "^4.12.0", + "filepizza-peer": "./node_modules/filepizza-peer", + "filepizza-socket": "./node_modules/filepizza-socket", "morgan": "^1.5.2", "nib": "^1.1.0", "peer": "^0.2.8", @@ -33,8 +35,7 @@ "react-router": "^0.13.1", "socket.io": "^1.3.5", "stylus": "^0.50.0", - "filepizza-socket": "./node_modules/filepizza-socket", - "filepizza-peer": "./node_modules/filepizza-peer" + "webrtcsupport": "^2.1.2" }, "engines": { "node": "0.10.x"