Adding 'Play All' back to library tracks, fixes #634

This commit is contained in:
James Barnsley
2020-11-12 20:52:08 +13:00
parent 148c1fb602
commit f2513ff81d
5 changed files with 234 additions and 82 deletions

View File

@ -122627,10 +122627,20 @@ var MopidyMiddleware = function () {
request(store, 'library.lookup', {
uris: [uri]
}).then(function (response) {
if (!response[uri] || !response[uri].length) return;
var _response$uri = response[uri],
results = _response$uri === void 0 ? [] : _response$uri;
if (!results.length) return;
var result = results[0];
if (result.album) {
result = _objectSpread(_objectSpread({}, result), {}, {
name: result.album.name
});
}
store.dispatch({
type: 'MOPIDY_DIRECTORY_LOADED',
directory: Object(_util_format__WEBPACK_IMPORTED_MODULE_6__["formatSimpleObject"])(response[uri][0])
directory: _objectSpread({}, Object(_util_format__WEBPACK_IMPORTED_MODULE_6__["formatSimpleObject"])(result))
});
});
}
@ -134271,54 +134281,56 @@ var Artist = /*#__PURE__*/function (_React$Component) {
if (prevUri !== uri && artist) _this.setWindowTitle(artist);
});
_defineProperty(_assertThisInitialized(_this), "onResetFilters", function () {
_this.onChangeFilter(null);
_this.onChangeSort(null);
Object(_components_Trackable__WEBPACK_IMPORTED_MODULE_26__["trackEvent"])({
category: 'Artist',
action: 'FilterAlbums',
label: 'Reset'
});
_defineProperty(_assertThisInitialized(_this), "onChangeTracksFilter", function (value) {
_this.onChangeFilter('tracks', value);
});
_defineProperty(_assertThisInitialized(_this), "onChangeFilter", function (value) {
_defineProperty(_assertThisInitialized(_this), "onChangeAlbumsFilter", function (value) {
_this.onChangeFilter('albums', value);
});
_defineProperty(_assertThisInitialized(_this), "onChangeFilter", function (type, value) {
var _this$props$uiActions = _this.props.uiActions,
set = _this$props$uiActions.set,
hideContextMenu = _this$props$uiActions.hideContextMenu;
set({
artist_albums_filter: value
});
set(_defineProperty({}, "artist_".concat(type, "_filter"), value));
hideContextMenu();
Object(_components_Trackable__WEBPACK_IMPORTED_MODULE_26__["trackEvent"])({
category: 'Artist',
action: 'FilterAlbums',
action: "Filter".concat(type),
label: value
});
});
_defineProperty(_assertThisInitialized(_this), "onChangeSort", function (value) {
_defineProperty(_assertThisInitialized(_this), "onChangeTracksSort", function (value) {
_this.onChangeSort('tracks', value);
});
_defineProperty(_assertThisInitialized(_this), "onChangeAlbumsSort", function (value) {
_this.onChangeSort('albums', value);
});
_defineProperty(_assertThisInitialized(_this), "onChangeSort", function (type, value) {
var _set2;
var _this$props2 = _this.props,
sort = _this$props2.sort,
sort_reverse = _this$props2.sort_reverse,
sort = _this$props2["".concat(type, "_sort")],
sort_reverse = _this$props2["".concat(type, "_sort_reverse")],
_this$props2$uiAction = _this$props2.uiActions,
set = _this$props2$uiAction.set,
hideContextMenu = _this$props2$uiAction.hideContextMenu;
var reverse = false;
if (value !== null && sort === value) {
reverse = !sort_reverse;
}
set({
artist_albums_sort_reverse: reverse,
artist_albums_sort: value
});
set((_set2 = {}, _defineProperty(_set2, "artist_".concat(type, "_sort_reverse"), reverse), _defineProperty(_set2, "artist_".concat(type, "_sort"), value), _set2));
hideContextMenu();
Object(_components_Trackable__WEBPACK_IMPORTED_MODULE_26__["trackEvent"])({
category: 'Artist',
action: 'SortAlbums',
action: "Sort".concat(type),
label: "".concat(value, " ").concat(reverse ? 'DESC' : 'ASC')
});
});
@ -134371,10 +134383,10 @@ var Artist = /*#__PURE__*/function (_React$Component) {
uri = _this$props5.uri,
uiActions = _this$props5.uiActions,
artist = _this$props5.artist,
sort = _this$props5.sort,
sort_reverse = _this$props5.sort_reverse,
sort = _this$props5.albums_sort,
sort_reverse = _this$props5.albums_sort_reverse,
filterType = _this$props5.filterType;
var filter = _this.state.filter;
var filter = _this.state.albumsFilter;
var tracks = artist.tracks,
related_artists = artist.related_artists;
var albums = _this.props.albums;
@ -134495,7 +134507,7 @@ var Artist = /*#__PURE__*/function (_React$Component) {
initialValue: filter,
handleChange: function handleChange(value) {
return _this.setState({
filter: value
albumsFilter: value
});
},
onSubmit: function onSubmit() {
@ -134510,7 +134522,7 @@ var Artist = /*#__PURE__*/function (_React$Component) {
valueAsLabel: true,
options: sort_options,
selected_icon: sort ? sort_reverse ? 'keyboard_arrow_up' : 'keyboard_arrow_down' : null,
handleChange: _this.onChangeSort,
handleChange: _this.onChangeAlbumsSort,
"data-qa-node": "DropdownField",
"data-qa-file": "Artist"
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Fields_DropdownField__WEBPACK_IMPORTED_MODULE_14__["default"], {
@ -134519,7 +134531,7 @@ var Artist = /*#__PURE__*/function (_React$Component) {
value: filterType,
valueAsLabel: true,
options: filter_type_options,
handleChange: _this.onChangeFilter,
handleChange: _this.onChangeAlbumsFilter,
"data-qa-node": "DropdownField",
"data-qa-file": "Artist"
}))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("section", {
@ -134534,9 +134546,28 @@ var Artist = /*#__PURE__*/function (_React$Component) {
});
_defineProperty(_assertThisInitialized(_this), "renderTracks", function () {
var _this$props$artist = _this.props.artist,
uri = _this$props$artist.uri,
tracks = _this$props$artist.tracks;
var _this$props6 = _this.props,
uri = _this$props6.artist.uri,
sort = _this$props6.tracks_sort,
sort_reverse = _this$props6.tracks_sort_reverse;
var filter = _this.state.tracksFilter;
var tracks = _this.props.artist.tracks;
if (sort && tracks) {
tracks = Object(_util_arrays__WEBPACK_IMPORTED_MODULE_23__["sortItems"])(tracks, sort, sort_reverse);
}
if (filter && filter !== '') {
tracks = Object(_util_arrays__WEBPACK_IMPORTED_MODULE_23__["applyFilter"])('name', filter, tracks);
}
var sort_options = [{
value: 'disc_track',
label: Object(_locale__WEBPACK_IMPORTED_MODULE_24__["i18n"])('album.tracks.sort.disc_track')
}, {
value: 'name',
label: Object(_locale__WEBPACK_IMPORTED_MODULE_24__["i18n"])('album.tracks.sort.name')
}];
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "body related-artists",
"data-qa-node": "div",
@ -134545,7 +134576,41 @@ var Artist = /*#__PURE__*/function (_React$Component) {
className: "list-wrapper no-top-padding",
"data-qa-node": "section",
"data-qa-file": "Artist"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_TrackList__WEBPACK_IMPORTED_MODULE_6__["default"], {
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h4", {
className: "no-bottom-margin",
"data-qa-node": "h4",
"data-qa-file": "Artist"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_locale__WEBPACK_IMPORTED_MODULE_24__["I18n"], {
path: "artist.tracks.title",
"data-qa-node": "I18n",
"data-qa-file": "Artist"
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "actions-wrapper",
"data-qa-node": "div",
"data-qa-file": "Artist"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Fields_FilterField__WEBPACK_IMPORTED_MODULE_15__["default"], {
initialValue: filter,
handleChange: function handleChange(value) {
return _this.setState({
tracksFilter: value
});
},
onSubmit: function onSubmit() {
return _services_ui_actions__WEBPACK_IMPORTED_MODULE_19__["hideContextMenu"]();
},
"data-qa-node": "FilterField",
"data-qa-file": "Artist"
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Fields_DropdownField__WEBPACK_IMPORTED_MODULE_14__["default"], {
icon: "swap_vert",
name: "Sort",
value: sort,
valueAsLabel: true,
options: sort_options,
selected_icon: sort ? sort_reverse ? 'keyboard_arrow_up' : 'keyboard_arrow_down' : null,
handleChange: _this.onChangeTracksSort,
"data-qa-node": "DropdownField",
"data-qa-file": "Artist"
}))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_TrackList__WEBPACK_IMPORTED_MODULE_6__["default"], {
className: "artist-track-list",
uri: uri,
tracks: tracks,
@ -134572,9 +134637,9 @@ var Artist = /*#__PURE__*/function (_React$Component) {
});
_defineProperty(_assertThisInitialized(_this), "renderAbout", function () {
var _this$props6 = _this.props,
artistProp = _this$props6.artist,
artists = _this$props6.artists;
var _this$props7 = _this.props,
artistProp = _this$props7.artist,
artists = _this$props7.artists;
var artist = Object(_util_format__WEBPACK_IMPORTED_MODULE_22__["collate"])(artistProp, {
artists: artists
});
@ -134721,11 +134786,11 @@ var Artist = /*#__PURE__*/function (_React$Component) {
});
_defineProperty(_assertThisInitialized(_this), "render", function () {
var _this$props7 = _this.props,
uri = _this$props7.uri,
loading = _this$props7.loading,
artist = _this$props7.artist,
history = _this$props7.history;
var _this$props8 = _this.props,
uri = _this$props8.uri,
loading = _this$props8.loading,
artist = _this$props8.artist,
history = _this$props8.history;
if (loading) {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Loader__WEBPACK_IMPORTED_MODULE_17__["default"], {
@ -134920,7 +134985,8 @@ var Artist = /*#__PURE__*/function (_React$Component) {
});
_this.state = {
filter: ''
albumsFilter: '',
tracksFilter: ''
};
return _this;
}
@ -134928,9 +134994,9 @@ var Artist = /*#__PURE__*/function (_React$Component) {
_createClass(Artist, [{
key: "componentDidMount",
value: function componentDidMount() {
var _this$props8 = this.props,
uri = _this$props8.uri,
loadItem = _this$props8.coreActions.loadItem;
var _this$props9 = this.props,
uri = _this$props9.uri,
loadItem = _this$props9.coreActions.loadItem;
this.setWindowTitle();
loadItem(uri, {
full: true
@ -134960,9 +135026,11 @@ var mapStateToProps = function mapStateToProps(state, ownProps) {
loading: loadingSelector(state),
theme: state.ui.theme,
slim_mode: state.ui.slim_mode,
filterType: state.ui.artist_albums_filter ? state.ui.artist_albums_filter : null,
sort: state.ui.artist_albums_sort ? state.ui.artist_albums_sort : null,
sort_reverse: !!state.ui.artist_albums_sort_reverse,
filterType: state.ui.artist_albums_filter,
albums_sort: state.ui.artist_albums_sort,
albums_sort_reverse: !!state.ui.artist_albums_sort_reverse,
tracks_sort: state.ui.artist_tracks_sort,
tracks_sort_reverse: !!state.ui.artist_tracks_sort_reverse,
spotify_authorized: state.spotify.authorization
};
};
@ -142811,12 +142879,16 @@ var LibraryBrowseDirectory = /*#__PURE__*/function (_React$Component) {
}));
});
_defineProperty(_assertThisInitialized(_this), "playAll", function (tracks) {
_defineProperty(_assertThisInitialized(_this), "playAll", function () {
var _this$props3 = _this.props,
uri = _this$props3.uri,
playURIs = _this$props3.mopidyActions.playURIs,
hideContextMenu = _this$props3.uiActions.hideContextMenu;
playURIs(Object(_util_arrays__WEBPACK_IMPORTED_MODULE_17__["arrayOf"])('uri', tracks), "iris:browse:".concat(uri));
hideContextMenu = _this$props3.uiActions.hideContextMenu,
_this$props3$director = _this$props3.directory;
_this$props3$director = _this$props3$director === void 0 ? {} : _this$props3$director;
var tracks = _this$props3$director.tracks;
if (!tracks || !tracks.length) return;
playURIs(Object(_util_arrays__WEBPACK_IMPORTED_MODULE_17__["arrayOf"])('uri', Object(_util_arrays__WEBPACK_IMPORTED_MODULE_17__["sortItems"])(tracks, 'name')), "iris:browse:".concat(uri));
hideContextMenu();
});
@ -142932,8 +143004,8 @@ var LibraryBrowseDirectory = /*#__PURE__*/function (_React$Component) {
var tracks = null;
var limit_remaining = limit - subdirectories.length;
if (limit_remaining > 0) {
all_tracks = directory.tracks && directory.tracks.length > 0 ? directory.tracks : null;
if (limit_remaining > 0 && directory.tracks && directory.tracks.length) {
all_tracks = directory.tracks;
all_tracks = Object(_util_arrays__WEBPACK_IMPORTED_MODULE_17__["sortItems"])(all_tracks, 'name');
tracks = all_tracks.slice(0, limit_remaining);
}
@ -142960,11 +143032,7 @@ var LibraryBrowseDirectory = /*#__PURE__*/function (_React$Component) {
"data-qa-node": "DropdownField",
"data-qa-file": "LibraryBrowseDirectory"
}), tracks && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Button__WEBPACK_IMPORTED_MODULE_19__["default"], {
onClick: function onClick() {
uiActions.hideContextMenu();
_this.playAll(all_tracks);
},
onClick: _this.playAll,
noHover: true,
discrete: true,
tracking: {
@ -143809,11 +143877,33 @@ var LibraryTracks = /*#__PURE__*/function (_React$Component) {
});
});
_defineProperty(_assertThisInitialized(_this), "renderView", function () {
_defineProperty(_assertThisInitialized(_this), "playAll", function () {
var _this$props5 = _this.props,
sort = _this$props5.sort,
sort_reverse = _this$props5.sort_reverse,
loading_progress = _this$props5.loading_progress;
playURIs = _this$props5.mopidyActions.playURIs,
hideContextMenu = _this$props5.uiActions.hideContextMenu;
var tracks = _this.props.tracks;
var filter = _this.state.filter;
if (!tracks || !tracks.length) return;
if (sort) {
tracks = Object(_util_arrays__WEBPACK_IMPORTED_MODULE_13__["sortItems"])(tracks, sort, sort_reverse);
}
if (filter && filter !== '') {
tracks = Object(_util_arrays__WEBPACK_IMPORTED_MODULE_13__["applyFilter"])('name', filter, tracks);
}
playURIs(Object(_util_arrays__WEBPACK_IMPORTED_MODULE_13__["arrayOf"])('uri', tracks));
hideContextMenu();
});
_defineProperty(_assertThisInitialized(_this), "renderView", function () {
var _this$props6 = _this.props,
sort = _this$props6.sort,
sort_reverse = _this$props6.sort_reverse,
loading_progress = _this$props6.loading_progress;
var _this$state2 = _this.state,
limit = _this$state2.limit,
filter = _this$state2.filter;
@ -143858,13 +143948,13 @@ var LibraryTracks = /*#__PURE__*/function (_React$Component) {
});
_defineProperty(_assertThisInitialized(_this), "render", function () {
var _this$props6 = _this.props,
spotify_available = _this$props6.spotify_available,
sort = _this$props6.sort,
source = _this$props6.source,
sort_reverse = _this$props6.sort_reverse,
uiActions = _this$props6.uiActions,
loading_progress = _this$props6.loading_progress;
var _this$props7 = _this.props,
spotify_available = _this$props7.spotify_available,
sort = _this$props7.sort,
source = _this$props7.source,
sort_reverse = _this$props7.sort_reverse,
uiActions = _this$props7.uiActions,
loading_progress = _this$props7.loading_progress;
var _this$state3 = _this.state,
filter = _this$state3.filter,
per_page = _this$state3.per_page;
@ -143939,6 +144029,24 @@ var LibraryTracks = /*#__PURE__*/function (_React$Component) {
"data-qa-node": "DropdownField",
"data-qa-file": "LibraryTracks"
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Button__WEBPACK_IMPORTED_MODULE_14__["default"], {
onClick: _this.playAll,
noHover: true,
discrete: true,
tracking: {
category: 'LibraryTracks',
action: 'Play'
},
"data-qa-node": "Button",
"data-qa-file": "LibraryTracks"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Icon__WEBPACK_IMPORTED_MODULE_8__["default"], {
name: "play_circle_filled",
"data-qa-node": "Icon",
"data-qa-file": "LibraryTracks"
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_locale__WEBPACK_IMPORTED_MODULE_15__["I18n"], {
path: "actions.play_all",
"data-qa-node": "I18n",
"data-qa-file": "LibraryTracks"
})), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Button__WEBPACK_IMPORTED_MODULE_14__["default"], {
noHover: true,
discrete: true,
onClick: loading ? _this.cancelRefresh : _this.refresh,
@ -143997,10 +144105,10 @@ var LibraryTracks = /*#__PURE__*/function (_React$Component) {
_createClass(LibraryTracks, [{
key: "componentDidMount",
value: function componentDidMount() {
var _this$props7 = this.props,
_this$props7$location = _this$props7.location.state,
state = _this$props7$location === void 0 ? {} : _this$props7$location,
setWindowTitle = _this$props7.uiActions.setWindowTitle; // Restore any limit defined in our location state
var _this$props8 = this.props,
_this$props8$location = _this$props8.location.state,
state = _this$props8$location === void 0 ? {} : _this$props8$location,
setWindowTitle = _this$props8.uiActions.setWindowTitle; // Restore any limit defined in our location state
if (state.limit) {
this.setState({

File diff suppressed because one or more lines are too long

View File

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