const colors = require('material-ui/styles/colors') const createGetter = require('fn-getter') const React = require('react') const darkBaseTheme = require('material-ui/styles/baseThemes/darkBaseTheme').default const getMuiTheme = require('material-ui/styles/getMuiTheme').default const MuiThemeProvider = require('material-ui/styles/MuiThemeProvider').default const Header = require('../components/header') // Perf optimization: Needed immediately, so do not lazy load it below const TorrentListPage = require('./torrent-list-page') const Views = { home: createGetter(() => TorrentListPage), player: createGetter(() => require('./player-page')), 'create-torrent': createGetter(() => require('./create-torrent-page')), preferences: createGetter(() => require('./preferences-page')) } const Modals = { 'open-torrent-address-modal': createGetter( () => require('../components/open-torrent-address-modal') ), 'remove-torrent-modal': createGetter(() => require('../components/remove-torrent-modal')), 'update-available-modal': createGetter(() => require('../components/update-available-modal')), 'unsupported-media-modal': createGetter(() => require('../components/unsupported-media-modal')), 'delete-all-torrents-modal': createGetter(() => require('../components/delete-all-torrents-modal')) } const fontFamily = process.platform === 'win32' ? '"Segoe UI", sans-serif' : 'BlinkMacSystemFont, "Helvetica Neue", Helvetica, sans-serif' darkBaseTheme.fontFamily = fontFamily darkBaseTheme.userAgent = false darkBaseTheme.palette.primary1Color = colors.grey50 darkBaseTheme.palette.primary2Color = colors.grey50 darkBaseTheme.palette.primary3Color = colors.grey600 darkBaseTheme.palette.accent1Color = colors.redA200 darkBaseTheme.palette.accent2Color = colors.redA400 darkBaseTheme.palette.accent3Color = colors.redA100 let darkMuiTheme let lightMuiTheme class App extends React.Component { render () { const state = this.props.state // Hide player controls while playing video, if the mouse stays still for a while // Never hide the controls when: // * The mouse is over the controls or we're scrubbing (see CSS) // * The video is paused // * The video is playing remotely on Chromecast or Airplay const hideControls = state.shouldHidePlayerControls() const cls = [ 'view-' + state.location.url(), /* e.g. view-home, view-player */ 'is-' + process.platform /* e.g. is-darwin, is-win32, is-linux */ ] if (state.window.isFullScreen) cls.push('is-fullscreen') if (state.window.isFocused) cls.push('is-focused') if (hideControls) cls.push('hide-video-controls') if (!darkMuiTheme) { darkMuiTheme = getMuiTheme(darkBaseTheme) } return (
{this.getErrorPopover()}
{this.getView()}
{this.getModal()}
) } getErrorPopover () { const state = this.props.state const now = new Date().getTime() const recentErrors = state.errors.filter((x) => now - x.time < 5000) const hasErrors = recentErrors.length > 0 const errorElems = recentErrors.map(function (error, i) { return (
{error.message}
) }) return (
Error
{errorElems}
) } getModal () { const state = this.props.state if (!state.modal) return if (!lightMuiTheme) { const lightBaseTheme = require('material-ui/styles/baseThemes/lightBaseTheme').default lightBaseTheme.fontFamily = fontFamily lightBaseTheme.userAgent = false lightMuiTheme = getMuiTheme(lightBaseTheme) } const ModalContents = Modals[state.modal.id]() return (
) } getView () { const state = this.props.state const View = Views[state.location.url()]() return () } } module.exports = App