import React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import { Route, Link } from 'react-router-dom'; import ConfirmationButton from '../components/Fields/ConfirmationButton'; import PusherConnectionList from '../components/PusherConnectionList'; import SourcesPriority from '../components/Fields/SourcesPriority'; import Commands from '../components/Fields/Commands'; import TextField from '../components/Fields/TextField'; import Header from '../components/Header'; import Icon from '../components/Icon'; import Services from '../components/Services'; import * as helpers from '../helpers'; import * as coreActions from '../services/core/actions'; import * as uiActions from '../services/ui/actions'; import * as pusherActions from '../services/pusher/actions'; import * as mopidyActions from '../services/mopidy/actions'; import * as lastfmActions from '../services/lastfm/actions'; import * as spotifyActions from '../services/spotify/actions'; class Settings extends React.Component { constructor(props){ super(props); this.state = { mopidy_host: this.props.mopidy.host, mopidy_port: this.props.mopidy.port, mopidy_library_artists_uri: this.props.mopidy.library_artists_uri, mopidy_library_albums_uri: this.props.mopidy.library_albums_uri, pusher_username: this.props.pusher.username, input_in_focus: null } } componentDidMount(){ this.props.uiActions.setWindowTitle("Settings"); } componentWillReceiveProps(nextProps){ var changed = false var state = this.state if (nextProps.pusher.username && nextProps.pusher.username != this.state.pusher_username && this.state.input_in_focus != 'pusher_username'){ state.pusher_username = nextProps.pusher.username changed = true } if (changed){ this.setState(state) } } resetAllSettings(){ localStorage.clear(); window.location = '#' window.location.reload(true) return false; } setConfig(e){ this.setState({input_in_focus: null}); e.preventDefault(); this.props.mopidyActions.set({ host: this.state.mopidy_host, port: this.state.mopidy_port }); window.location.reload(true); return false; } handleBlur(service, name, value){ this.setState({input_in_focus: null}); var data = {}; data[name] = value; this.props[service+'Actions'].set(data); // Any per-field actions switch (name){ case 'library_albums_uri': this.props.mopidyActions.clearLibraryAlbums(); break; case 'library_artists_uri': this.props.mopidyActions.clearLibraryArtists(); break; } } renderApplyButton(){ if (this.props.mopidy.host == this.state.mopidy_host && this.props.mopidy.port == this.state.mopidy_port){ return null; } return (
) } renderServerStatus(){ var colour = 'grey'; var icon = 'help'; var status = 'Unknown'; var className = null; if (this.props.mopidy.connecting || this.props.pusher.connecting){ icon = 'autorenew'; status = 'Connecting...'; className = 'icon--spin'; } else if (!this.props.mopidy.connected || !this.props.pusher.connected){ colour = 'red'; icon = 'close'; status = 'Disconnected'; } else if (this.props.mopidy.connected && this.props.pusher.connected){ colour = 'green'; icon = 'check'; status = 'Connected'; } return ( {status} ); } render(){ var options = ( this.props.history.push('/settings/debug')}> Debug Help ) return (
Settings

Server

Status
{this.renderServerStatus()}
this.setConfig(e)}> {this.renderApplyButton()}

Services

Interface

Theme
Behavior
Sources priority
Drag-and-drop to prioritize search providers and results
{helpers.isHosted() ? null :
Reporting
This helps identify errors and potential features that make Iris better for everyone. See privacy policy.
}
Commands
this.props.pusherActions.runCommand(id, notify)} onChange={commands => this.props.pusherActions.setCommands(commands)} /> Add new

Advanced

Artist library URI
this.setState({mopidy_library_artists_uri: e.target.value})} onBlur={e => this.handleBlur('mopidy', 'library_artists_uri', e.target.value)} />
URI used for collecting library artists
Connections
Version
{this.props.pusher.version.current} installed {this.props.pusher.version.upgrade_available ?   Upgrade available :   Up-to-date}
Share configuration
{this.props.pusher.version.upgrade_available ? : null } this.resetAllSettings()} />

About

Iris is an open-source project by James Barnsley. It is provided free and with absolutely no warranty. If you paid someone for this software, please let me know.


Donate GitHub  Licence
); } } const mapStateToProps = (state, ownProps) => { return state; } const mapDispatchToProps = (dispatch) => { return { coreActions: bindActionCreators(coreActions, dispatch), uiActions: bindActionCreators(uiActions, dispatch), pusherActions: bindActionCreators(pusherActions, dispatch), mopidyActions: bindActionCreators(mopidyActions, dispatch), lastfmActions: bindActionCreators(lastfmActions, dispatch), spotifyActions: bindActionCreators(spotifyActions, dispatch) } } export default connect(mapStateToProps, mapDispatchToProps)(Settings)