import React from 'react'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import { get as getStorage } from '../util/storage'; import { isTouchDevice } from '../util/helpers'; import * as uiActions from '../services/ui/actions'; import { indexToArray } from '../util/arrays'; import localForage from 'localforage'; class DebugInfo extends React.Component { constructor(props) { super(props); this.state = { localForageLength: 0 } } componentDidMount() { localForage.length().then((localForageLength) => this.setState({ localForageLength })) } localStorageSize() { let data = ''; for (const key in window.localStorage) { if (window.localStorage.hasOwnProperty(key)) { data += window.localStorage[key]; } } let used = 0; const total = 5000; if (data !== '') { used = ((data.length * 16) / (8 * 1024)).toFixed(2); } return { used, percent: (used / total * 100).toFixed(2), }; } renderLoadQueue() { const { ui: { load_queue } } = this.props; if (!load_queue) return
Nothing loading
; const queue = indexToArray(load_queue, null, true); if (queue.length > 0) { return (
{queue.map((item, index) => (
{item}
))}
); } return
Nothing loading
; } render = () => { const localStorageUsage = this.localStorageSize(); return (
Version: {' '} {version}
Build: {' '} {build}
State
Items: {' '} {this.props.core.items ? Object.keys(this.props.core.items).length : '0'}
Coldstore items: {' '} {this.state.localForageLength}
Albums: {' '} {this.props.core.albums ? Object.keys(this.props.core.albums).length : '0'}
Artists: {' '} {this.props.core.artists ? Object.keys(this.props.core.artists).length : '0'}
Playlists: {' '} {this.props.core.playlists ? Object.keys(this.props.core.playlists).length : '0'}
Tracks: {' '} {this.props.core.tracks ? Object.keys(this.props.core.tracks).length : '0'}
Users: {' '} {this.props.core.users ? Object.keys(this.props.core.users).length : '0'}
Notifications: {' '} {this.props.ui.notifications ? Object.keys(this.props.ui.notifications).length : '0'}
Processes: {' '} {this.props.ui.processes ? Object.keys(this.props.ui.processes).length : '0'}
Enqueue batches: {' '} {this.props.mopidy.enqueue_uris_batches ? this.props.mopidy.enqueue_uris_batches.length : '0'}
Cached URLs: {' '} {Object.keys(getStorage('cache')).length}
Config
Slim mode: {' '} {this.props.ui.slim_mode ? 'on' : 'off'}
Test mode: {' '} {this.props.ui.test_mode ? 'on' : 'off'}
Touch: {' '} {isTouchDevice() ? 'on' : 'off'}
LocalStorage usage: {' '} {localStorageUsage.used} kb (~ {localStorageUsage.percent} %)
Selected tracks: {' '} {this.props.ui.selected_tracks.length}
{ this.props.ui.selected_tracks.map((track_key, index) => (
{track_key}
)) }
Load queue
{this.renderLoadQueue()}
); } } const mapStateToProps = (state) => ({ core: state.core, ui: state.ui, mopidy: state.mopidy, }); const mapDispatchToProps = (dispatch) => ({ uiActions: bindActionCreators(uiActions, dispatch), }); export default connect(mapStateToProps, mapDispatchToProps)(DebugInfo);