Removing iris:browse: URI prefix, fixes #829
This commit is contained in:
@ -1,5 +1,4 @@
|
|||||||
import React, { useEffect } from 'react';
|
import React from 'react';
|
||||||
import { useSelector, useDispatch } from 'react-redux';
|
|
||||||
import URILink from './URILink';
|
import URILink from './URILink';
|
||||||
import { I18n, i18n } from '../locale';
|
import { I18n, i18n } from '../locale';
|
||||||
import {
|
import {
|
||||||
@ -16,7 +15,7 @@ export default ({
|
|||||||
}) => {
|
}) => {
|
||||||
if (!from) return null;
|
if (!from) return null;
|
||||||
const { uri, name } = from;
|
const { uri, name } = from;
|
||||||
const type = uriType(uri);
|
const type = from?.type || uriType(uri);
|
||||||
let link = null;
|
let link = null;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'discover':
|
case 'discover':
|
||||||
@ -29,8 +28,8 @@ export default ({
|
|||||||
|
|
||||||
case 'browse':
|
case 'browse':
|
||||||
let directory = '';
|
let directory = '';
|
||||||
if (uri.indexOf('file://')) {
|
if (uri.indexOf('file://') > -1) {
|
||||||
directory = uri.substr(uri.lastIndexOf('/'), uri.length);
|
directory = decodeURIComponent(uri.substr(uri.lastIndexOf('/'), uri.length));
|
||||||
}
|
}
|
||||||
link = (
|
link = (
|
||||||
<URILink type={type} uri={uri} suffix={directory}>
|
<URILink type={type} uri={uri} suffix={directory}>
|
||||||
|
|||||||
@ -122,8 +122,9 @@ class BrowseDirectory extends React.Component {
|
|||||||
playURIs({
|
playURIs({
|
||||||
uris: arrayOf('uri', sortItems(tracks, 'name')),
|
uris: arrayOf('uri', sortItems(tracks, 'name')),
|
||||||
from: {
|
from: {
|
||||||
name: 'Directory',
|
name: 'Browse',
|
||||||
uri: `iris:browse:${uri}`,
|
type: 'browse',
|
||||||
|
uri,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
hideContextMenu();
|
hideContextMenu();
|
||||||
@ -233,7 +234,7 @@ class BrowseDirectory extends React.Component {
|
|||||||
|
|
||||||
<TrackList
|
<TrackList
|
||||||
context={{
|
context={{
|
||||||
uri: `iris:browse:${uri}`,
|
uri,
|
||||||
name: 'Browse',
|
name: 'Browse',
|
||||||
type: 'browse',
|
type: 'browse',
|
||||||
}}
|
}}
|
||||||
@ -250,6 +251,7 @@ class BrowseDirectory extends React.Component {
|
|||||||
|
|
||||||
const loadingSelector = makeLoadingSelector(['mopidy_library.(browse|lookup)']);
|
const loadingSelector = makeLoadingSelector(['mopidy_library.(browse|lookup)']);
|
||||||
const mapStateToProps = (state, ownProps) => {
|
const mapStateToProps = (state, ownProps) => {
|
||||||
|
console.debug('browser directory', ownProps)
|
||||||
const {
|
const {
|
||||||
mopidy: {
|
mopidy: {
|
||||||
directory: _directory = {},
|
directory: _directory = {},
|
||||||
|
|||||||
@ -1,93 +1,43 @@
|
|||||||
import React from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import { connect } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { bindActionCreators } from 'redux';
|
import { useParams, useNavigate } from 'react-router-dom';
|
||||||
import Loader from '../components/Loader';
|
import Loader from '../components/Loader';
|
||||||
import * as coreActions from '../services/core/actions';
|
import { loadUri } from '../services/core/actions';
|
||||||
import * as uiActions from '../services/ui/actions';
|
import { setWindowTitle } from '../services/ui/actions';
|
||||||
import { makeLoadingSelector, makeItemSelector } from '../util/selectors';
|
import { makeLoadingSelector, makeItemSelector } from '../util/selectors';
|
||||||
import { decodeUri } from '../util/format';
|
import { decodeUri } from '../util/format';
|
||||||
import { uriType } from '../util/helpers';
|
import { uriType } from '../util/helpers';
|
||||||
|
|
||||||
class UriRedirect extends React.Component {
|
const UriRedirect = () => {
|
||||||
componentDidMount() {
|
const navigate = useNavigate();
|
||||||
const {
|
const dispatch = useDispatch();
|
||||||
uri,
|
const { uri: rawUri } = useParams();
|
||||||
item,
|
const uri = decodeUri(rawUri);
|
||||||
coreActions: {
|
const loading = useSelector(makeLoadingSelector([`(.*)${uri}(.*)`]));
|
||||||
loadUri,
|
const item = useSelector(makeItemSelector(uri));
|
||||||
},
|
const redirect = () => navigate(`/${item.type || uriType(uri)}/${rawUri}`);
|
||||||
} = this.props;
|
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
if (item) {
|
if (item) {
|
||||||
this.redirect();
|
redirect();
|
||||||
} else {
|
} else {
|
||||||
loadUri(uri);
|
dispatch(loadUri(uri));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setWindowTitle();
|
dispatch(setWindowTitle(uri));
|
||||||
}
|
}, []);
|
||||||
|
|
||||||
componentDidUpdate = ({
|
|
||||||
uri: prevUri,
|
|
||||||
}) => {
|
|
||||||
const {
|
|
||||||
uri,
|
|
||||||
item,
|
|
||||||
coreActions: {
|
|
||||||
loadUri,
|
|
||||||
},
|
|
||||||
} = this.props;
|
|
||||||
|
|
||||||
if (prevUri !== uri) {
|
|
||||||
loadUri(uri);
|
|
||||||
this.setWindowTitle();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
if (item) {
|
if (item) {
|
||||||
this.redirect();
|
redirect();
|
||||||
|
} else if (!loading) {
|
||||||
|
dispatch(loadUri(uri));
|
||||||
|
dispatch(setWindowTitle(uri));
|
||||||
}
|
}
|
||||||
}
|
}, [rawUri, loading]);
|
||||||
|
|
||||||
setWindowTitle = () => {
|
|
||||||
const {
|
|
||||||
uri,
|
|
||||||
uiActions: {
|
|
||||||
setWindowTitle,
|
|
||||||
},
|
|
||||||
} = this.props;
|
|
||||||
|
|
||||||
setWindowTitle(uri);
|
return <Loader loading={loading} body />;
|
||||||
}
|
|
||||||
|
|
||||||
redirect = () => {
|
|
||||||
const {
|
|
||||||
uri,
|
|
||||||
item,
|
|
||||||
history,
|
|
||||||
} = this.props;
|
|
||||||
|
|
||||||
history.replace(`/${item.type || uriType(uri)}/${uri}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
render = () => <Loader body loading />;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const mapStateToProps = (state, ownProps) => {
|
export default UriRedirect;
|
||||||
const { match: { params: { uri: rawUri } } } = ownProps;
|
|
||||||
const uri = decodeUri(rawUri);
|
|
||||||
const loadingSelector = makeLoadingSelector([`(.*)${uri}(.*)`]);
|
|
||||||
const itemSelector = makeItemSelector(uri);
|
|
||||||
|
|
||||||
return {
|
|
||||||
uri,
|
|
||||||
loading: loadingSelector(state),
|
|
||||||
item: itemSelector(state),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
|
||||||
uiActions: bindActionCreators(uiActions, dispatch),
|
|
||||||
coreActions: bindActionCreators(coreActions, dispatch),
|
|
||||||
});
|
|
||||||
|
|
||||||
export default connect(mapStateToProps, mapDispatchToProps)(UriRedirect);
|
|
||||||
|
|||||||
Reference in New Issue
Block a user