From 46f22ead847ee4af61d2d970a6e7370598bac48c Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Sun, 28 Nov 2021 20:37:20 +1300 Subject: [PATCH] Tracklist 'source' to contain all the meta we need for queue (avoids unnecessary remote lookups) --- src/js/components/AddedFrom.js | 29 ++++++------------------ src/js/components/ContextMenu.js | 8 +++---- src/js/components/SearchResults.js | 12 +++++++++- src/js/components/Track.js | 2 +- src/js/components/TrackList.js | 16 ++++++------- src/js/services/mopidy/actions.js | 14 ++++++++---- src/js/services/mopidy/middleware.js | 8 +++---- src/js/services/ui/actions.js | 4 ++-- src/js/views/Album.js | 8 +++++-- src/js/views/Artist/Overview.js | 13 ++++++++++- src/js/views/Discover/Recommendations.js | 10 +++++++- src/js/views/Library/BrowseDirectory.js | 6 ++++- src/js/views/Library/Tracks.js | 7 +++++- src/js/views/Playlist.js | 8 +++++-- src/js/views/Queue.js | 8 +++++-- src/js/views/QueueHistory.js | 7 ++++-- 16 files changed, 102 insertions(+), 58 deletions(-) diff --git a/src/js/components/AddedFrom.js b/src/js/components/AddedFrom.js index 14500d35..db12102b 100644 --- a/src/js/components/AddedFrom.js +++ b/src/js/components/AddedFrom.js @@ -7,31 +7,16 @@ import { titleCase, uriType, } from '../util/helpers'; -import { - makeItemSelector, - makeLoadingSelector, -} from '../util/selectors'; -import { loadUri } from '../services/core/actions'; export default ({ by, - uri, + from, className = '', inline, }) => { - if (!uri) return null; - - const dispatch = useDispatch(); - const from = useSelector(makeItemSelector(uri)); - const loading = useSelector(makeLoadingSelector([`(.*)${uri}(.*)`])); - - useEffect(() => { - if (uri && !from && !loading) { - dispatch(loadUri(uri)); - } - }, []); - - const type = from?.type || uriType(uri); + if (!from) return null; + const { uri, name } = from; + const type = uriType(uri); let link = null; switch (type) { case 'discover': @@ -44,7 +29,7 @@ export default ({ case 'browse': link = ( - + ); @@ -52,7 +37,7 @@ export default ({ case 'search': link = ( - + ); @@ -67,7 +52,7 @@ export default ({ break; default: - link = {from?.name || titleCase(type)}; + link = {name || titleCase(type)}; } if (inline) { diff --git a/src/js/components/ContextMenu.js b/src/js/components/ContextMenu.js index 9573adf1..4c3be9cc 100755 --- a/src/js/components/ContextMenu.js +++ b/src/js/components/ContextMenu.js @@ -334,12 +334,12 @@ class ContextMenu extends React.Component { }, menu: { uris, - tracklist_uri, + source, } = {}, } = this.props; hideContextMenu(); - playURIs(uris, tracklist_uri); + playURIs(uris, source); } playPlaylist = () => { @@ -420,12 +420,12 @@ class ContextMenu extends React.Component { }, menu: { uris, - tracklist_uri, + source, } = {}, } = this.props; hideContextMenu(); - enqueueURIs(uris, tracklist_uri, play_next); + enqueueURIs(uris, source, play_next); } addTracksToPlaylist = (e, playlist_uri) => { diff --git a/src/js/components/SearchResults.js b/src/js/components/SearchResults.js index a7330263..663bcd5b 100755 --- a/src/js/components/SearchResults.js +++ b/src/js/components/SearchResults.js @@ -76,7 +76,17 @@ const SearchResults = ({ {type === 'artists' && } {type === 'albums' && } {type === 'playlists' && } - {type === 'tracks' && } + {type === 'tracks' && ( + + )} {/* */} {resultsCount > results.length && ( diff --git a/src/js/components/Track.js b/src/js/components/Track.js index f55c6aad..499ca9f3 100755 --- a/src/js/components/Track.js +++ b/src/js/components/Track.js @@ -35,7 +35,7 @@ const MiddleColumn = ({ case 'queue': { content = ( diff --git a/src/js/components/TrackList.js b/src/js/components/TrackList.js index 9831ee6d..eb06b42e 100755 --- a/src/js/components/TrackList.js +++ b/src/js/components/TrackList.js @@ -11,7 +11,7 @@ import { SmartList } from './SmartList'; const TrackList = ({ uri, - track_context, + source, className = '', show_source_icon, play_state, @@ -113,7 +113,7 @@ const TrackList = ({ dragStart( e, - track_context, + source.context, uri, nextSelectedTracks, nextSelectedTracks_indexes, @@ -223,8 +223,8 @@ const TrackList = ({ showContextMenu({ e, - context: (track_context ? `${track_context}-track` : 'track'), - tracklist_uri: uri, + context: (source.context ? `${source.context}-track` : 'track'), + source, items: selected_tracks_digested, uris: selected_tracks_uris, indexes: selected_tracks_indexes, @@ -318,7 +318,7 @@ const TrackList = ({ key += `@@${track.tlid || 'none'}`; key += `@@${track.uri}`; key += `@@${uri || 'none'}`; - key += `@@${track_context || 'none'}`; + key += `@@${source.context || 'none'}`; return key; } @@ -373,7 +373,7 @@ const TrackList = ({ return ( { const tlids = response.map((track) => track.tlid); - store.dispatch(pusherActions.addQueueMetadata(tlids, action.from_uri)); + store.dispatch(pusherActions.addQueueMetadata(tlids, action.from)); // Re-run the batch checker in 100ms. This allows a small window for other server // requests before our next batch. A little crude but it means the server isn't @@ -1030,7 +1030,7 @@ const MopidyMiddleware = (function () { } case 'MOPIDY_PLAY_URIS': - const { from_uri } = action; + const { from } = action; let urisToPlay = Object.assign([], action.uris); if (!urisToPlay || !urisToPlay.length) { @@ -1072,7 +1072,7 @@ const MopidyMiddleware = (function () { for (let i = 0; i < response.length; i++) { tlids.push(response[i].tlid); } - store.dispatch(pusherActions.addQueueMetadata(tlids, from_uri)); + store.dispatch(pusherActions.addQueueMetadata(tlids, from)); } else { store.dispatch(coreActions.handleException( 'Mopidy: Failed to add some tracks', @@ -1089,7 +1089,7 @@ const MopidyMiddleware = (function () { // this means our UI feels snappier as the first track shows up quickly setTimeout( () => { - store.dispatch(mopidyActions.enqueueURIs(urisToPlay, from_uri, null, 1)); + store.dispatch(mopidyActions.enqueueURIs(urisToPlay, from, null, 1)); }, 100, ); diff --git a/src/js/services/ui/actions.js b/src/js/services/ui/actions.js index eeee205a..d464ddfb 100755 --- a/src/js/services/ui/actions.js +++ b/src/js/services/ui/actions.js @@ -164,11 +164,11 @@ export function toggleSidebar(new_state = 'toggle') { return action; } -export function dragStart(e, context, from_uri = null, victims, victims_indexes = null) { +export function dragStart(e, context, source = null, victims, victims_indexes = null) { return { type: 'DRAG_START', context, - from_uri, + source, victims, victims_indexes, start_x: e.clientX, diff --git a/src/js/views/Album.js b/src/js/views/Album.js index c0bc100c..3975f060 100755 --- a/src/js/views/Album.js +++ b/src/js/views/Album.js @@ -217,10 +217,14 @@ const Album = () => { diff --git a/src/js/views/Artist/Overview.js b/src/js/views/Artist/Overview.js index 3e1f2497..19ccd016 100644 --- a/src/js/views/Artist/Overview.js +++ b/src/js/views/Artist/Overview.js @@ -29,6 +29,7 @@ export default ({ const [sortField, sortReverse] = useSelector(sortSelector); const { uri, + name, tracks, related_artists, } = artist; @@ -100,7 +101,17 @@ export default ({
0 ? '70' : '100'}`}> {tracks &&

}
- +
diff --git a/src/js/views/Discover/Recommendations.js b/src/js/views/Discover/Recommendations.js index 7691cdb6..736fb72f 100755 --- a/src/js/views/Discover/Recommendations.js +++ b/src/js/views/Discover/Recommendations.js @@ -469,7 +469,15 @@ class Recommendations extends React.Component { - +
diff --git a/src/js/views/Library/BrowseDirectory.js b/src/js/views/Library/BrowseDirectory.js index 009671be..9aa270f2 100755 --- a/src/js/views/Library/BrowseDirectory.js +++ b/src/js/views/Library/BrowseDirectory.js @@ -226,8 +226,12 @@ class BrowseDirectory extends React.Component { diff --git a/src/js/views/Library/Tracks.js b/src/js/views/Library/Tracks.js index 4a042a81..c8574fda 100755 --- a/src/js/views/Library/Tracks.js +++ b/src/js/views/Library/Tracks.js @@ -176,7 +176,12 @@ class Tracks extends React.Component { return (
- +
); } diff --git a/src/js/views/Playlist.js b/src/js/views/Playlist.js index 07c4cbe4..5b0fccc5 100755 --- a/src/js/views/Playlist.js +++ b/src/js/views/Playlist.js @@ -332,9 +332,13 @@ const Playlist = ({
0 && (