Routing all fetchers to type-specific call; Mopidy getUris to handle unknown ones
This commit is contained in:
@ -43,7 +43,7 @@ class Album extends React.Component {
|
||||
uri,
|
||||
album,
|
||||
coreActions: {
|
||||
loadItem,
|
||||
loadAlbum,
|
||||
},
|
||||
lastfmActions: {
|
||||
getAlbum,
|
||||
@ -51,7 +51,7 @@ class Album extends React.Component {
|
||||
} = this.props;
|
||||
|
||||
this.setWindowTitle();
|
||||
loadItem(uri, { full: true });
|
||||
loadAlbum(uri, { full: true });
|
||||
|
||||
if (album) {
|
||||
if (album.artists && album.wiki === undefined) {
|
||||
@ -81,7 +81,7 @@ class Album extends React.Component {
|
||||
uri,
|
||||
album,
|
||||
coreActions: {
|
||||
loadItem,
|
||||
loadAlbum,
|
||||
},
|
||||
lastfmActions: {
|
||||
getAlbum,
|
||||
@ -89,7 +89,7 @@ class Album extends React.Component {
|
||||
} = this.props;
|
||||
|
||||
if (uri !== prevUri) {
|
||||
loadItem(uri, { full: true });
|
||||
loadAlbum(uri, { full: true });
|
||||
}
|
||||
|
||||
// We have just received our full album or our album artists
|
||||
|
||||
@ -50,12 +50,12 @@ class Artist extends React.Component {
|
||||
const {
|
||||
uri,
|
||||
coreActions: {
|
||||
loadItem,
|
||||
loadArtist,
|
||||
},
|
||||
} = this.props;
|
||||
|
||||
this.setWindowTitle();
|
||||
loadItem(uri, { full: true });
|
||||
loadArtist(uri, { full: true });
|
||||
}
|
||||
|
||||
componentDidUpdate = ({
|
||||
@ -66,12 +66,12 @@ class Artist extends React.Component {
|
||||
uri,
|
||||
artist,
|
||||
coreActions: {
|
||||
loadItem,
|
||||
loadArtist,
|
||||
},
|
||||
} = this.props;
|
||||
|
||||
if (uri !== prevUri) {
|
||||
loadItem(uri, { full: true });
|
||||
loadArtist(uri, { full: true });
|
||||
}
|
||||
|
||||
if (!prevArtist && artist) this.setWindowTitle(artist);
|
||||
|
||||
@ -50,9 +50,14 @@ class Playlist extends React.Component {
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { coreActions: { loadItem }, uri } = this.props;
|
||||
const {
|
||||
coreActions: {
|
||||
loadPlaylist,
|
||||
},
|
||||
uri,
|
||||
} = this.props;
|
||||
this.setWindowTitle();
|
||||
setTimeout(() => loadItem(uri, { full: true }), 1);
|
||||
setTimeout(() => loadPlaylist(uri, { full: true }), 1);
|
||||
}
|
||||
|
||||
componentDidUpdate = ({
|
||||
@ -63,7 +68,7 @@ class Playlist extends React.Component {
|
||||
uri,
|
||||
playlist,
|
||||
coreActions: {
|
||||
loadItem,
|
||||
loadPlaylist,
|
||||
},
|
||||
history: {
|
||||
push,
|
||||
@ -75,7 +80,7 @@ class Playlist extends React.Component {
|
||||
}
|
||||
|
||||
if (uri !== prevUri) {
|
||||
loadItem(uri, { full: true });
|
||||
loadPlaylist(uri, { full: true });
|
||||
}
|
||||
|
||||
if (!prevPlaylist && playlist) this.setWindowTitle(playlist);
|
||||
|
||||
@ -33,11 +33,11 @@ class Track extends React.Component {
|
||||
uri,
|
||||
track,
|
||||
coreActions: {
|
||||
loadItem,
|
||||
loadTrack,
|
||||
},
|
||||
} = this.props;
|
||||
|
||||
loadItem(decodeUri(uri));
|
||||
loadTrack(decodeUri(uri));
|
||||
|
||||
if (track) {
|
||||
this.setWindowTitle(track);
|
||||
@ -54,7 +54,7 @@ class Track extends React.Component {
|
||||
genius_authorized,
|
||||
lastfm_authorized,
|
||||
coreActions: {
|
||||
loadItem,
|
||||
loadTrack,
|
||||
},
|
||||
geniusActions: {
|
||||
findTrackLyrics,
|
||||
@ -65,7 +65,7 @@ class Track extends React.Component {
|
||||
} = this.props;
|
||||
|
||||
if (prevUri !== uri) {
|
||||
loadItem(decodeUri(uri));
|
||||
loadTrack(decodeUri(uri));
|
||||
}
|
||||
|
||||
// We have just received our full track or our track artists
|
||||
|
||||
93
src/js/views/UriRedirect.js
Normal file
93
src/js/views/UriRedirect.js
Normal file
@ -0,0 +1,93 @@
|
||||
import React from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { bindActionCreators } from 'redux';
|
||||
import Loader from '../components/Loader';
|
||||
import * as coreActions from '../services/core/actions';
|
||||
import * as uiActions from '../services/ui/actions';
|
||||
import { makeLoadingSelector, makeItemSelector } from '../util/selectors';
|
||||
import { decodeUri } from '../util/format';
|
||||
import { uriType } from '../util/helpers';
|
||||
|
||||
class UriRedirect extends React.Component {
|
||||
componentDidMount() {
|
||||
const {
|
||||
uri,
|
||||
item,
|
||||
coreActions: {
|
||||
loadItem,
|
||||
},
|
||||
} = this.props;
|
||||
|
||||
if (item) {
|
||||
this.redirect();
|
||||
} else {
|
||||
loadItem(uri);
|
||||
}
|
||||
|
||||
this.setWindowTitle();
|
||||
}
|
||||
|
||||
componentDidUpdate = ({
|
||||
uri: prevUri,
|
||||
}) => {
|
||||
const {
|
||||
uri,
|
||||
item,
|
||||
coreActions: {
|
||||
loadItem,
|
||||
},
|
||||
} = this.props;
|
||||
|
||||
if (prevUri !== uri) {
|
||||
loadItem(uri);
|
||||
this.setWindowTitle();
|
||||
}
|
||||
|
||||
if (item) {
|
||||
this.redirect();
|
||||
}
|
||||
}
|
||||
|
||||
setWindowTitle = () => {
|
||||
const {
|
||||
uri,
|
||||
uiActions: {
|
||||
setWindowTitle,
|
||||
},
|
||||
} = this.props;
|
||||
|
||||
setWindowTitle(uri);
|
||||
}
|
||||
|
||||
redirect = () => {
|
||||
const {
|
||||
uri,
|
||||
item,
|
||||
history,
|
||||
} = this.props;
|
||||
|
||||
history.replace(`/${item.type || uriType(uri)}/${uri}`);
|
||||
}
|
||||
|
||||
render = () => <Loader body loading />;
|
||||
}
|
||||
|
||||
const mapStateToProps = (state, ownProps) => {
|
||||
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);
|
||||
@ -52,12 +52,12 @@ class DiscoverCategory extends React.Component {
|
||||
uri,
|
||||
category,
|
||||
coreActions: {
|
||||
loadItem,
|
||||
loadCategory,
|
||||
},
|
||||
} = this.props;
|
||||
|
||||
if (!category) {
|
||||
loadItem(uri);
|
||||
loadCategory(uri);
|
||||
}
|
||||
}
|
||||
|
||||
@ -68,12 +68,12 @@ class DiscoverCategory extends React.Component {
|
||||
hideContextMenu,
|
||||
},
|
||||
coreActions: {
|
||||
loadItem,
|
||||
loadCategory,
|
||||
},
|
||||
} = this.props;
|
||||
|
||||
hideContextMenu();
|
||||
loadItem(uri, { forceRefetch: true });
|
||||
loadCategory(uri, { forceRefetch: true });
|
||||
}
|
||||
|
||||
render = () => {
|
||||
|
||||
@ -30,13 +30,13 @@ class EditPlaylist extends React.Component {
|
||||
uri,
|
||||
playlist,
|
||||
coreActions: {
|
||||
loadItem,
|
||||
loadPlaylist,
|
||||
},
|
||||
uiActions: {
|
||||
setWindowTitle,
|
||||
},
|
||||
} = this.props;
|
||||
|
||||
|
||||
setWindowTitle(i18n('modal.edit_playlist.title'));
|
||||
|
||||
if (playlist) {
|
||||
@ -48,7 +48,7 @@ class EditPlaylist extends React.Component {
|
||||
collaborative: (playlist.collaborative === true),
|
||||
});
|
||||
} else {
|
||||
loadItem(uri);
|
||||
loadPlaylist(uri);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user