Assets accept name in URL so we can load simple playlists (eg Tidal) that don't respond to playlists.lookup
This commit is contained in:
@ -147809,12 +147809,6 @@ var App = /*#__PURE__*/function (_React$Component) {
|
||||
component: _views_Search__WEBPACK_IMPORTED_MODULE_25__["default"],
|
||||
"data-qa-node": "Route",
|
||||
"data-qa-file": "App"
|
||||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Route"], {
|
||||
exact: true,
|
||||
path: "/album/:uri",
|
||||
component: _views_Album__WEBPACK_IMPORTED_MODULE_16__["default"],
|
||||
"data-qa-node": "Route",
|
||||
"data-qa-file": "App"
|
||||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Route"], {
|
||||
exact: true,
|
||||
path: "/artist/:uri/:sub_view?",
|
||||
@ -147823,25 +147817,31 @@ var App = /*#__PURE__*/function (_React$Component) {
|
||||
"data-qa-file": "App"
|
||||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Route"], {
|
||||
exact: true,
|
||||
path: "/playlist/:uri",
|
||||
path: "/album/:uri/:name?",
|
||||
component: _views_Album__WEBPACK_IMPORTED_MODULE_16__["default"],
|
||||
"data-qa-node": "Route",
|
||||
"data-qa-file": "App"
|
||||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Route"], {
|
||||
exact: true,
|
||||
path: "/playlist/:uri/:name?",
|
||||
component: _views_Playlist__WEBPACK_IMPORTED_MODULE_18__["default"],
|
||||
"data-qa-node": "Route",
|
||||
"data-qa-file": "App"
|
||||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Route"], {
|
||||
exact: true,
|
||||
path: "/user/:uri",
|
||||
path: "/user/:uri/:name?",
|
||||
component: _views_User__WEBPACK_IMPORTED_MODULE_19__["default"],
|
||||
"data-qa-node": "Route",
|
||||
"data-qa-file": "App"
|
||||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Route"], {
|
||||
exact: true,
|
||||
path: "/track/:uri",
|
||||
path: "/track/:uri/:name?",
|
||||
component: _views_Track__WEBPACK_IMPORTED_MODULE_20__["default"],
|
||||
"data-qa-node": "Route",
|
||||
"data-qa-file": "App"
|
||||
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Route"], {
|
||||
exact: true,
|
||||
path: "/uri/:uri",
|
||||
path: "/uri/:uri/:name?",
|
||||
component: _views_UriRedirect__WEBPACK_IMPORTED_MODULE_21__["default"],
|
||||
"data-qa-node": "Route",
|
||||
"data-qa-file": "App"
|
||||
@ -154739,7 +154739,7 @@ var GridItem = function GridItem(_ref2) {
|
||||
} else if (item.link) {
|
||||
to = item.link;
|
||||
} else {
|
||||
to = "/".concat(item.type, "/").concat(Object(_util_format__WEBPACK_IMPORTED_MODULE_7__["encodeUri"])(item.uri));
|
||||
to = "/".concat(item.type, "/").concat(Object(_util_format__WEBPACK_IMPORTED_MODULE_7__["encodeUri"])(item.uri)).concat(item.name ? "/".concat(item.name) : '');
|
||||
}
|
||||
|
||||
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Link__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
||||
@ -155925,7 +155925,7 @@ var ListItem = function ListItem(_ref) {
|
||||
} else if (item.link) {
|
||||
to = item.link;
|
||||
} else {
|
||||
to = "/".concat(item.type, "/").concat(Object(_util_format__WEBPACK_IMPORTED_MODULE_12__["encodeUri"])(item.uri));
|
||||
to = "/".concat(item.type, "/").concat(Object(_util_format__WEBPACK_IMPORTED_MODULE_12__["encodeUri"])(item.uri)).concat(item.name ? "/".concat(item.name) : '');
|
||||
}
|
||||
|
||||
if (e.target.tagName.toLowerCase() !== 'a') {
|
||||
@ -168637,38 +168637,67 @@ var MopidyMiddleware = function () {
|
||||
}
|
||||
|
||||
case 'MOPIDY_GET_PLAYLIST':
|
||||
request(store, 'playlists.lookup', {
|
||||
uri: action.uri
|
||||
}).then(function (response) {
|
||||
if (!response) return;
|
||||
var playlist = Object(_util_format__WEBPACK_IMPORTED_MODULE_6__["formatPlaylist"])(_objectSpread(_objectSpread({}, response), {}, {
|
||||
uri: action.uri,
|
||||
// Patch in the requested URI
|
||||
type: 'playlist',
|
||||
provider: 'mopidy',
|
||||
can_edit: true
|
||||
}));
|
||||
{
|
||||
var processResponse = function processResponse(response) {
|
||||
var fetchTracks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
||||
var playlist = Object(_util_format__WEBPACK_IMPORTED_MODULE_6__["formatPlaylist"])(_objectSpread(_objectSpread({
|
||||
can_edit: true,
|
||||
provider: 'mopidy'
|
||||
}, response), {}, {
|
||||
uri: action.uri,
|
||||
// Patch in the requested URI
|
||||
type: 'playlist'
|
||||
}));
|
||||
|
||||
if (response.tracks) {
|
||||
request(store, 'library.lookup', {
|
||||
uris: Object(_util_arrays__WEBPACK_IMPORTED_MODULE_7__["arrayOf"])('uri', response.tracks)
|
||||
}).then(function (tracksResponse) {
|
||||
var tracks = response.tracks.map(function (simpleTrack) {
|
||||
var fullTracks = tracksResponse[simpleTrack.uri];
|
||||
return _objectSpread(_objectSpread({}, simpleTrack), fullTracks.length ? fullTracks[0] : {});
|
||||
if (response.tracks && fetchTracks) {
|
||||
request(store, 'library.lookup', {
|
||||
uris: Object(_util_arrays__WEBPACK_IMPORTED_MODULE_7__["arrayOf"])('uri', response.tracks)
|
||||
}).then(function (tracksResponse) {
|
||||
var tracks = response.tracks.map(function (simpleTrack) {
|
||||
var fullTracks = tracksResponse[simpleTrack.uri];
|
||||
return _objectSpread(_objectSpread({}, simpleTrack), fullTracks.length ? fullTracks[0] : {});
|
||||
});
|
||||
playlist.tracks = Object(_util_format__WEBPACK_IMPORTED_MODULE_6__["injectSortId"])(Object(_util_format__WEBPACK_IMPORTED_MODULE_6__["formatTracks"])(tracks));
|
||||
store.dispatch(coreActions.itemLoaded(playlist));
|
||||
});
|
||||
playlist.tracks = Object(_util_format__WEBPACK_IMPORTED_MODULE_6__["injectSortId"])(Object(_util_format__WEBPACK_IMPORTED_MODULE_6__["formatTracks"])(tracks));
|
||||
} else {
|
||||
store.dispatch(coreActions.itemLoaded(playlist));
|
||||
});
|
||||
} else {
|
||||
store.dispatch(coreActions.itemLoaded(playlist));
|
||||
}
|
||||
}
|
||||
|
||||
if (!playlist.images) {
|
||||
store.dispatch(mopidyActions.getImages([playlist.uri]));
|
||||
}
|
||||
});
|
||||
break;
|
||||
if (!playlist.images) {
|
||||
store.dispatch(mopidyActions.getImages([playlist.uri]));
|
||||
}
|
||||
};
|
||||
|
||||
request(store, 'playlists.lookup', {
|
||||
uri: action.uri
|
||||
}).then(function (playlistResponse) {
|
||||
if (playlistResponse) {
|
||||
// Got a playlist from our playlists core, this is typically because it's a local
|
||||
// playlist, or one that our backend user owns.
|
||||
processResponse(playlistResponse);
|
||||
} else {
|
||||
console.info('Playlist not in playlists, fetching using library', action.uri); // No match, so let's try fetching from foreign provider. This needs to happen when we
|
||||
// don't have a HTTP API (eg Spotify) but the playlist is not ours (eg Tidal browse)
|
||||
|
||||
request(store, 'library.lookup', {
|
||||
uris: [action.uri]
|
||||
}).then(function () {
|
||||
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
||||
libraryResponse = _ref[action.uri];
|
||||
|
||||
if (!libraryResponse) return;
|
||||
processResponse(_objectSpread({
|
||||
tracks: libraryResponse,
|
||||
can_edit: false
|
||||
}, action.options.name ? {
|
||||
name: action.options.name
|
||||
} : {}), false);
|
||||
});
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
case 'MOPIDY_ADD_PLAYLIST_TRACKS':
|
||||
request(store, 'playlists.lookup', {
|
||||
@ -169185,6 +169214,7 @@ var MopidyMiddleware = function () {
|
||||
}
|
||||
|
||||
if (subdirectoryImagesToLoad.length) {
|
||||
console.info("Loading ".concat(subdirectoryImagesToLoad.length, " subdirectory URIs"));
|
||||
request(store, 'library.getImages', {
|
||||
uris: subdirectoryImagesToLoad
|
||||
}).then(function (response) {
|
||||
@ -180477,6 +180507,10 @@ __webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var _util_format__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../util/format */ "./src/js/util/format.js");
|
||||
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
||||
|
||||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
||||
|
||||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
||||
@ -180544,6 +180578,7 @@ var Playlist = /*#__PURE__*/function (_React$Component) {
|
||||
prevPlaylist = _ref.playlist;
|
||||
var _this$props = _this.props,
|
||||
uri = _this$props.uri,
|
||||
name = _this$props.name,
|
||||
playlist = _this$props.playlist,
|
||||
loadPlaylist = _this$props.coreActions.loadPlaylist,
|
||||
push = _this$props.history.push;
|
||||
@ -180554,7 +180589,8 @@ var Playlist = /*#__PURE__*/function (_React$Component) {
|
||||
|
||||
if (uri !== prevUri) {
|
||||
loadPlaylist(uri, {
|
||||
full: true
|
||||
full: true,
|
||||
name: name
|
||||
});
|
||||
}
|
||||
|
||||
@ -180574,11 +180610,14 @@ var Playlist = /*#__PURE__*/function (_React$Component) {
|
||||
var _this$props2 = _this.props,
|
||||
showContextMenu = _this$props2.uiActions.showContextMenu,
|
||||
playlist = _this$props2.playlist,
|
||||
uri = _this$props2.uri;
|
||||
uri = _this$props2.uri,
|
||||
name = _this$props2.name;
|
||||
showContextMenu({
|
||||
e: e,
|
||||
context: 'playlist',
|
||||
items: [playlist],
|
||||
items: [_objectSpread({
|
||||
name: name
|
||||
}, playlist)],
|
||||
uris: [uri]
|
||||
});
|
||||
});
|
||||
@ -181071,11 +181110,13 @@ var Playlist = /*#__PURE__*/function (_React$Component) {
|
||||
value: function componentDidMount() {
|
||||
var _this$props11 = this.props,
|
||||
loadPlaylist = _this$props11.coreActions.loadPlaylist,
|
||||
uri = _this$props11.uri;
|
||||
uri = _this$props11.uri,
|
||||
name = _this$props11.name;
|
||||
this.setWindowTitle();
|
||||
setTimeout(function () {
|
||||
return loadPlaylist(uri, {
|
||||
full: true
|
||||
full: true,
|
||||
name: name
|
||||
});
|
||||
}, 1);
|
||||
}
|
||||
@ -181106,6 +181147,7 @@ var mapStateToProps = function mapStateToProps(state, ownProps) {
|
||||
return {
|
||||
uri: uri,
|
||||
encodedUri: ownProps.match.params.uri,
|
||||
name: ownProps.match.params.name,
|
||||
allow_reporting: allow_reporting,
|
||||
slim_mode: slim_mode,
|
||||
theme: theme,
|
||||
|
||||
File diff suppressed because one or more lines are too long
2
mopidy_iris/static/app.min.css
vendored
2
mopidy_iris/static/app.min.css
vendored
File diff suppressed because one or more lines are too long
4
mopidy_iris/static/app.min.js
vendored
4
mopidy_iris/static/app.min.js
vendored
File diff suppressed because one or more lines are too long
@ -115,7 +115,7 @@
|
||||
|
||||
// Release details
|
||||
// These are automatically injected to built HTML
|
||||
var build = "1621658938";
|
||||
var build = "1622246428";
|
||||
var version = "3.58.0";
|
||||
|
||||
// Construct the script tag
|
||||
|
||||
Reference in New Issue
Block a user