Files
Iris/src/js/components/DebugInfo.js

193 lines
5.5 KiB
JavaScript
Raw Normal View History

2017-01-29 12:54:06 +13:00
2019-09-05 15:36:11 +12:00
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';
2019-09-05 15:36:11 +12:00
import * as uiActions from '../services/ui/actions';
2020-03-13 16:41:44 +13:00
import { indexToArray } from '../util/arrays';
import localForage from 'localforage';
2019-09-05 15:36:11 +12:00
class DebugInfo extends React.Component {
constructor(props) {
super(props);
this.state = { localForageLength: 0 }
}
componentDidMount() {
localForage.length().then((localForageLength) => this.setState({ localForageLength }))
}
2019-09-05 15:36:11 +12:00
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),
};
}
renderload_queue() {
const { ui: { load_queue } } = this.props;
if (!load_queue) return <div className="debug-info-item mid_grey-text">Nothing loading</div>;
2019-09-05 15:36:11 +12:00
const queue = indexToArray(load_queue, null, true);
2019-09-05 15:36:11 +12:00
if (queue.length > 0) {
return (
<div className="debug-info-item">
{queue.map((item, index) => (<div key={`${item}_${index}`}>{item}</div>))}
2019-09-05 15:36:11 +12:00
</div>
);
}
return <div className="debug-info-item mid_grey-text">Nothing loading</div>;
2019-09-05 15:36:11 +12:00
}
render = () => {
2019-09-05 15:36:11 +12:00
const localStorageUsage = this.localStorageSize();
return (
<div className="debug-info">
<div className="debug-info-section">
<div className="debug-info-item">
Version:
{' '}
2019-09-05 15:36:11 +12:00
{version}
</div>
<div className="debug-info-item">
Build:
{' '}
2019-09-05 15:36:11 +12:00
{build}
</div>
</div>
<div className="debug-info-section">
<h5>State</h5>
<div className="debug-info-item">
Items:
{' '}
{this.props.core.items ? Object.keys(this.props.core.items).length : '0'}
</div>
<div className="debug-info-item">
Coldstore items:
{' '}
{this.state.localForageLength}
</div>
2019-09-05 15:36:11 +12:00
<div className="debug-info-item">
Albums:
{' '}
2019-09-05 15:36:11 +12:00
{this.props.core.albums ? Object.keys(this.props.core.albums).length : '0'}
</div>
<div className="debug-info-item">
Artists:
{' '}
2019-09-05 15:36:11 +12:00
{this.props.core.artists ? Object.keys(this.props.core.artists).length : '0'}
</div>
<div className="debug-info-item">
Playlists:
{' '}
2019-09-05 15:36:11 +12:00
{this.props.core.playlists ? Object.keys(this.props.core.playlists).length : '0'}
</div>
<div className="debug-info-item">
Tracks:
{' '}
2019-09-05 15:36:11 +12:00
{this.props.core.tracks ? Object.keys(this.props.core.tracks).length : '0'}
</div>
<div className="debug-info-item">
Users:
{' '}
2019-09-05 15:36:11 +12:00
{this.props.core.users ? Object.keys(this.props.core.users).length : '0'}
</div>
<div className="debug-info-item">
Notifications:
{' '}
2019-09-05 15:36:11 +12:00
{this.props.ui.notifications ? Object.keys(this.props.ui.notifications).length : '0'}
</div>
<div className="debug-info-item">
Processes:
{' '}
2019-09-05 15:36:11 +12:00
{this.props.ui.processes ? Object.keys(this.props.ui.processes).length : '0'}
</div>
<div className="debug-info-item">
Enqueue batches:
{' '}
2019-09-05 15:36:11 +12:00
{this.props.mopidy.enqueue_uris_batches ? this.props.mopidy.enqueue_uris_batches.length : '0'}
</div>
<div className="debug-info-item">
Cached URLs:
{' '}
{Object.keys(getStorage('cache')).length}
</div>
2019-09-05 15:36:11 +12:00
</div>
<div className="debug-info-section">
<h5>Config</h5>
<div className="debug-info-item">
Slim mode:
{' '}
2019-09-05 15:36:11 +12:00
{this.props.ui.slim_mode ? 'on' : 'off'}
</div>
<div className="debug-info-item">
Test mode:
{' '}
2019-09-05 15:36:11 +12:00
{this.props.ui.test_mode ? 'on' : 'off'}
</div>
<div className="debug-info-item">
Touch:
{' '}
{isTouchDevice() ? 'on' : 'off'}
2019-09-05 15:36:11 +12:00
</div>
<div className="debug-info-item">
LocalStorage usage:
{' '}
{localStorageUsage.used}
kb (~
{localStorageUsage.percent}
2019-09-05 15:36:11 +12:00
%)
</div>
<div className="debug-info-item">
Selected tracks:
{' '}
{this.props.ui.selected_tracks.length}
2019-09-05 15:36:11 +12:00
<br />
{
this.props.ui.selected_tracks.map((track_key, index) => (
<div key={`${track_key}_${index}`}>{track_key}</div>
))
}
2019-09-05 15:36:11 +12:00
</div>
</div>
2019-09-05 15:36:11 +12:00
<div className="debug-info-section">
<h5>Load queue</h5>
{this.renderload_queue()}
2019-09-05 15:36:11 +12:00
</div>
2019-09-05 15:36:11 +12:00
</div>
);
}
2017-01-29 12:54:06 +13:00
}
const mapStateToProps = (state) => ({
2019-09-05 15:36:11 +12:00
core: state.core,
ui: state.ui,
mopidy: state.mopidy,
});
2017-01-29 12:54:06 +13:00
2019-09-05 15:36:11 +12:00
const mapDispatchToProps = (dispatch) => ({
uiActions: bindActionCreators(uiActions, dispatch),
});
2017-01-29 12:54:06 +13:00
export default connect(mapStateToProps, mapDispatchToProps)(DebugInfo);