loadUris to handle type-agnostic URIs

This commit is contained in:
James Barnsley
2021-01-17 20:55:15 +13:00
parent b0d14561fd
commit 499a4800b0
12 changed files with 253 additions and 33 deletions

View File

@ -114741,7 +114741,7 @@ module.exports = JSON.parse("{\"name\":\"Svenska\",\"errors\":{\"uri_not_found\"
/*!*****************************************!*\ /*!*****************************************!*\
!*** ./src/js/services/core/actions.js ***! !*** ./src/js/services/core/actions.js ***!
\*****************************************/ \*****************************************/
/*! exports provided: handleException, debugResponse, set, resetState, clearCurrentTrack, clearStorage, restoreItemsFromColdStore, restoreLibraryFromColdStore, updateColdStore, startSearch, searchResultsLoaded, loadItems, loadItem, loadTrack, loadAlbum, loadArtist, loadPlaylist, loadUser, loadUserPlaylists, loadLibrary, addToLibrary, removeFromLibrary, libraryLoaded, unloadLibrary, itemsLoaded, itemLoaded, tracksLoaded, trackLoaded, artistsLoaded, albumsLoaded, albumLoaded, playlistsLoaded, playlistLoaded, usersLoaded, userLoaded, userPlaylistsLoaded, loadedMore, removeItem, streamTitleLoaded, streamTitleChanged, viewDataLoaded, reorderPlaylistTracks, savePlaylist, createPlaylist, deletePlaylist, removeTracksFromPlaylist, addTracksToPlaylist, getLibraryPlaylists, getLibraryAlbums, getLibraryArtists, addPinned, removePinned, updatePinned, updatePinnedUri */ /*! exports provided: handleException, debugResponse, set, resetState, clearCurrentTrack, clearStorage, restoreItemsFromColdStore, restoreLibraryFromColdStore, updateColdStore, startSearch, searchResultsLoaded, loadUris, loadUri, loadItems, loadItem, loadTrack, loadAlbum, loadArtist, loadPlaylist, loadUser, loadUserPlaylists, loadLibrary, addToLibrary, removeFromLibrary, libraryLoaded, unloadLibrary, itemsLoaded, itemLoaded, tracksLoaded, trackLoaded, artistsLoaded, albumsLoaded, albumLoaded, playlistsLoaded, playlistLoaded, usersLoaded, userLoaded, userPlaylistsLoaded, loadedMore, removeItem, streamTitleLoaded, streamTitleChanged, viewDataLoaded, reorderPlaylistTracks, savePlaylist, createPlaylist, deletePlaylist, removeTracksFromPlaylist, addTracksToPlaylist, getLibraryPlaylists, getLibraryAlbums, getLibraryArtists, addPinned, removePinned, updatePinned, updatePinnedUri */
/***/ (function(module, __webpack_exports__, __webpack_require__) { /***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict"; "use strict";
@ -114757,6 +114757,8 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateColdStore", function() { return updateColdStore; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateColdStore", function() { return updateColdStore; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startSearch", function() { return startSearch; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startSearch", function() { return startSearch; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "searchResultsLoaded", function() { return searchResultsLoaded; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "searchResultsLoaded", function() { return searchResultsLoaded; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUris", function() { return loadUris; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadUri", function() { return loadUri; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadItems", function() { return loadItems; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadItems", function() { return loadItems; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadItem", function() { return loadItem; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadItem", function() { return loadItem; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadTrack", function() { return loadTrack; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadTrack", function() { return loadTrack; });
@ -114915,6 +114917,19 @@ function searchResultsLoaded(query, resultType, results) {
* relevant service to load the record - all from one neat package. * relevant service to load the record - all from one neat package.
* */ * */
function loadUris() {
var uris = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return {
type: 'LOAD_URIS',
uris: uris,
options: options
};
}
function loadUri(uri) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return loadUris([uri], options);
}
function loadItems(itemType) { function loadItems(itemType) {
var uris = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var uris = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
@ -115740,8 +115755,6 @@ var CoreMiddleware = function () {
case 'LOAD_ITEMS': case 'LOAD_ITEMS':
{ {
console.log(action);
var _action$uris = action.uris, var _action$uris = action.uris,
_uris = _action$uris === void 0 ? [] : _action$uris, _uris = _action$uris === void 0 ? [] : _action$uris,
options = action.options, options = action.options,
@ -133916,13 +133929,11 @@ var Queue = /*#__PURE__*/function (_React$Component) {
_defineProperty(_assertThisInitialized(_this), "componentDidUpdate", function (_ref2) { _defineProperty(_assertThisInitialized(_this), "componentDidUpdate", function (_ref2) {
var prev_added_from_uri = _ref2.added_from_uri; var prev_added_from_uri = _ref2.added_from_uri;
var _this$props = _this.props, var _this$props = _this.props,
loadItem = _this$props.coreActions.loadItem, loadUri = _this$props.coreActions.loadUri,
added_from_uri = _this$props.added_from_uri; added_from_uri = _this$props.added_from_uri;
if (added_from_uri && added_from_uri !== prev_added_from_uri) { if (added_from_uri && added_from_uri !== prev_added_from_uri) {
loadItem(added_from_uri, { loadUri(added_from_uri);
full: false
});
} }
}); });
@ -136656,10 +136667,10 @@ var UriRedirect = /*#__PURE__*/function (_React$Component) {
var _this$props = _this.props, var _this$props = _this.props,
uri = _this$props.uri, uri = _this$props.uri,
item = _this$props.item, item = _this$props.item,
loadItem = _this$props.coreActions.loadItem; loadUri = _this$props.coreActions.loadUri;
if (prevUri !== uri) { if (prevUri !== uri) {
loadItem(uri); loadUri(uri);
_this.setWindowTitle(); _this.setWindowTitle();
} }
@ -136702,12 +136713,12 @@ var UriRedirect = /*#__PURE__*/function (_React$Component) {
var _this$props4 = this.props, var _this$props4 = this.props,
uri = _this$props4.uri, uri = _this$props4.uri,
item = _this$props4.item, item = _this$props4.item,
loadItem = _this$props4.coreActions.loadItem; loadUri = _this$props4.coreActions.loadUri;
if (item) { if (item) {
this.redirect(); this.redirect();
} else { } else {
loadItem(uri); loadUri(uri);
} }
this.setWindowTitle(); this.setWindowTitle();
@ -138115,13 +138126,13 @@ var Discover = /*#__PURE__*/function (_React$Component) {
_defineProperty(_assertThisInitialized(_this), "handleURLSeeds", function () { _defineProperty(_assertThisInitialized(_this), "handleURLSeeds", function () {
var _this$props2 = _this.props, var _this$props2 = _this.props,
loadItems = _this$props2.coreActions.loadItems, loadUris = _this$props2.coreActions.loadUris,
seedsProp = _this$props2.match.params.seeds; // Rejoin if we've had to uri-encode these as strings seedsProp = _this$props2.match.params.seeds; // Rejoin if we've had to uri-encode these as strings
// We'd need to do this if our URL has been encoded so the whole URL can become // We'd need to do this if our URL has been encoded so the whole URL can become
// it's own URI (eg iris:discover:spotify_artist_1234) where we can't use ":" // it's own URI (eg iris:discover:spotify_artist_1234) where we can't use ":"
var seeds = seedsProp.split('_').join(':').split(','); var seeds = seedsProp.split('_').join(':').split(',');
loadItems(seeds); loadUris(seeds);
_this.setState({ _this.setState({
seeds: seeds seeds: seeds
@ -141893,14 +141904,15 @@ var AddToQueue = /*#__PURE__*/function (_React$Component) {
_this$props2$view$uri = _this$props2.view.uris, _this$props2$view$uri = _this$props2.view.uris,
prevUris = _this$props2$view$uri === void 0 ? [] : _this$props2$view$uri, prevUris = _this$props2$view$uri === void 0 ? [] : _this$props2$view$uri,
_this$props2$coreActi = _this$props2.coreActions, _this$props2$coreActi = _this$props2.coreActions,
loadItem = _this$props2$coreActi.loadItem, loadUri = _this$props2$coreActi.loadUri,
viewDataLoaded = _this$props2$coreActi.viewDataLoaded; viewDataLoaded = _this$props2$coreActi.viewDataLoaded;
var uris = text.split(','); var uris = text.split(','); // TODO: Remove validation
var validatedUris = uris.filter(function (uri) { var validatedUris = uris.filter(function (uri) {
return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_9__["uriType"])(uri); return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_9__["uriType"])(uri);
}); });
validatedUris.forEach(function (uri) { validatedUris.forEach(function (uri) {
loadItem(uri); loadUri(uri);
}); });
_this.setState({ _this.setState({
@ -143579,7 +143591,7 @@ var EditRadio = /*#__PURE__*/function (_React$Component) {
var _this$state = _this.state, var _this$state = _this.state,
uri = _this$state.uri, uri = _this$state.uri,
seeds = _this$state.seeds; seeds = _this$state.seeds;
var loadItem = _this.props.coreActions.loadItem; var loadUri = _this.props.coreActions.loadUri;
e.preventDefault(); e.preventDefault();
if (uri === '') { if (uri === '') {
@ -143620,7 +143632,7 @@ var EditRadio = /*#__PURE__*/function (_React$Component) {
}); });
} else { } else {
validatedSeeds.push(uris[i]); validatedSeeds.push(uris[i]);
loadItem(uris[i]); loadUri(uris[i]);
} }
} }

File diff suppressed because one or more lines are too long

85
mopidy_iris/static/app.min.css vendored Normal file

File diff suppressed because one or more lines are too long

111
mopidy_iris/static/app.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -106,7 +106,7 @@
// Release details // Release details
// These are automatically injected to built HTML // These are automatically injected to built HTML
var build = "1610478481"; var build = "1610772376";
var version = "3.55.5"; var version = "3.55.5";
// Construct the script tag // Construct the script tag

View File

@ -119,6 +119,18 @@ export function searchResultsLoaded(query, resultType, results) {
* relevant service to load the record - all from one neat package. * relevant service to load the record - all from one neat package.
* */ * */
export function loadUris(uris = [], options = {}) {
return {
type: 'LOAD_URIS',
uris,
options,
};
}
export function loadUri(uri, options = {}) {
return loadUris([uri], options);
}
export function loadItems(itemType, uris = [], options = {}) { export function loadItems(itemType, uris = [], options = {}) {
return { return {
type: 'LOAD_ITEMS', type: 'LOAD_ITEMS',

View File

@ -351,7 +351,6 @@ const CoreMiddleware = (function () {
* we need to LOAD_URI to ascertain this first. * we need to LOAD_URI to ascertain this first.
* */ * */
case 'LOAD_ITEMS': { case 'LOAD_ITEMS': {
console.log(action);
const { uris = [], options, itemType = 'uri' } = action; const { uris = [], options, itemType = 'uri' } = action;
uris.forEach((uri) => { uris.forEach((uri) => {

View File

@ -83,13 +83,13 @@ class Queue extends React.Component {
}) => { }) => {
const { const {
coreActions: { coreActions: {
loadItem, loadUri,
}, },
added_from_uri, added_from_uri,
} = this.props; } = this.props;
if (added_from_uri && added_from_uri !== prev_added_from_uri) { if (added_from_uri && added_from_uri !== prev_added_from_uri) {
loadItem(added_from_uri, { full: false }); loadUri(added_from_uri);
} }
} }

View File

@ -14,14 +14,14 @@ class UriRedirect extends React.Component {
uri, uri,
item, item,
coreActions: { coreActions: {
loadItem, loadUri,
}, },
} = this.props; } = this.props;
if (item) { if (item) {
this.redirect(); this.redirect();
} else { } else {
loadItem(uri); loadUri(uri);
} }
this.setWindowTitle(); this.setWindowTitle();
@ -34,12 +34,12 @@ class UriRedirect extends React.Component {
uri, uri,
item, item,
coreActions: { coreActions: {
loadItem, loadUri,
}, },
} = this.props; } = this.props;
if (prevUri !== uri) { if (prevUri !== uri) {
loadItem(uri); loadUri(uri);
this.setWindowTitle(); this.setWindowTitle();
} }

View File

@ -213,7 +213,7 @@ class Discover extends React.Component {
handleURLSeeds = () => { handleURLSeeds = () => {
const { const {
coreActions: { coreActions: {
loadItems, loadUris,
}, },
match: { match: {
params: { params: {
@ -226,7 +226,7 @@ class Discover extends React.Component {
// We'd need to do this if our URL has been encoded so the whole URL can become // We'd need to do this if our URL has been encoded so the whole URL can become
// it's own URI (eg iris:discover:spotify_artist_1234) where we can't use ":" // it's own URI (eg iris:discover:spotify_artist_1234) where we can't use ":"
const seeds = seedsProp.split('_').join(':').split(','); const seeds = seedsProp.split('_').join(':').split(',');
loadItems(seeds); loadUris(seeds);
this.setState( this.setState(
{ seeds }, { seeds },

View File

@ -121,15 +121,16 @@ class AddToQueue extends React.Component {
uris: prevUris = [], uris: prevUris = [],
}, },
coreActions: { coreActions: {
loadItem, loadUri,
viewDataLoaded, viewDataLoaded,
}, },
} = this.props; } = this.props;
const uris = text.split(','); const uris = text.split(',');
// TODO: Remove validation
const validatedUris = uris.filter((uri) => uriType(uri)); const validatedUris = uris.filter((uri) => uriType(uri));
validatedUris.forEach((uri) => { validatedUris.forEach((uri) => {
loadItem(uri); loadUri(uri);
}); });
this.setState({ text: '' }); this.setState({ text: '' });

View File

@ -136,7 +136,7 @@ class EditRadio extends React.Component {
} = this.state; } = this.state;
const { const {
coreActions: { coreActions: {
loadItem, loadUri,
}, },
} = this.props; } = this.props;
@ -165,7 +165,7 @@ class EditRadio extends React.Component {
this.setState({ error_message: i18n('modal.edit_radio.too_many_seeds') }); this.setState({ error_message: i18n('modal.edit_radio.too_many_seeds') });
} else { } else {
validatedSeeds.push(uris[i]); validatedSeeds.push(uris[i]);
loadItem(uris[i]); loadUri(uris[i]);
} }
} }