Routing all fetchers to type-specific call; Mopidy getUris to handle unknown ones

This commit is contained in:
James Barnsley
2021-01-14 19:35:30 +13:00
parent 4151f4fc18
commit 5778706df7
22 changed files with 644 additions and 399 deletions

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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

View 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);

View File

@ -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 = () => {

View File

@ -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);
}
}