From f9bb9427f31a18d44ff50da2845f7fe091a19781 Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Fri, 11 Aug 2017 08:08:03 +1200 Subject: [PATCH] Moving playlists library into own space - loaded on demand rather than init --- src/js/App.js | 18 ------------------ src/js/components/Thumbnail.js | 14 ++++++++------ src/js/services/mopidy/middleware.js | 12 +++++++----- src/js/views/library/LibraryBrowse.js | 8 +++++++- src/js/views/library/LibraryPlaylists.js | 23 +++++++++++++++++++++++ 5 files changed, 45 insertions(+), 30 deletions(-) diff --git a/src/js/App.js b/src/js/App.js index f29c27d0..9901bb0d 100755 --- a/src/js/App.js +++ b/src/js/App.js @@ -64,24 +64,6 @@ class App extends React.Component{ this.handleWindowResize(null) } - componentWillReceiveProps(nextProps){ - - // mopidy comes online - if( !this.props.mopidy_connected && nextProps.mopidy_connected ){ - this.props.mopidyActions.getLibraryPlaylists(); - } - - // spotify authorized - if( !this.props.spotify_authorized && nextProps.spotify_authorized ){ - this.props.spotifyActions.getAllLibraryPlaylists(); - } - - // spotify un-authorized - if( this.props.spotify_authorized && !nextProps.spotify_authorized ){ - // TODO: flush out playlists and then re-fetch mopidy - } - } - shouldTriggerShortcut(e){ // When we're focussed on certian elements, don't fire any shortcuts diff --git a/src/js/components/Thumbnail.js b/src/js/components/Thumbnail.js index 0d8c9f71..a87207aa 100755 --- a/src/js/components/Thumbnail.js +++ b/src/js/components/Thumbnail.js @@ -77,15 +77,17 @@ class Thumbnail extends React.Component{ zoom_icon = this.zoom(e,image)}> } + /* + // It's a great idea, but interferes with huge lists (like Albums library) + }> +
+
+ */ + return (
- -
}> -
- - +
{zoom_icon} - ); } diff --git a/src/js/services/mopidy/middleware.js b/src/js/services/mopidy/middleware.js index cc5f7bb8..8022ec98 100755 --- a/src/js/services/mopidy/middleware.js +++ b/src/js/services/mopidy/middleware.js @@ -844,6 +844,7 @@ const MopidyMiddleware = (function(){ }); // Start our process to load the full album objects + store.dispatch(uiActions.startProcess('MOPIDY_LIBRARY_ALBUMS', 'Loading album library')) store.dispatch(uiActions.runProcess('MOPIDY_LIBRARY_ALBUMS_PROCESSOR')); }) break; @@ -858,20 +859,21 @@ const MopidyMiddleware = (function(){ return false } } - - store.dispatch(uiActions.startProcess('MOPIDY_LIBRARY_ALBUMS', 'Loading album library')) // Figure out the remaining items var library_uris = store.getState().core.library_albums - var to_load = [] - for (var i = 0; i < library_uris.length && to_load.length < 50; i++){ + var uris_not_loaded = [] + for (var i = 0; i < library_uris.length; i++){ var uri = library_uris[i] if (helpers.uriSource(uri) == 'local' && store.getState().core.albums[uri] === undefined){ - to_load.push(uri) + uris_not_loaded.push(uri) } } + var to_load = uris_not_loaded.slice(0,50) + if (to_load.length > 0){ + store.dispatch(uiActions.updateProcess('MOPIDY_LIBRARY_ALBUMS', 'Loading '+uris_not_loaded.length+' library albums')) store.dispatch(mopidyActions.getAlbums(to_load, 'MOPIDY_LIBRARY_ALBUMS_PROCESSOR')) } else { store.dispatch(uiActions.processFinished('MOPIDY_LIBRARY_ALBUMS')) diff --git a/src/js/views/library/LibraryBrowse.js b/src/js/views/library/LibraryBrowse.js index 3252b33a..383a7c2f 100755 --- a/src/js/views/library/LibraryBrowse.js +++ b/src/js/views/library/LibraryBrowse.js @@ -199,7 +199,13 @@ class LibraryBrowse extends React.Component{ { grid_items.map( (item, index) => { - return + return ( + hashHistory.push(item.link)} + /> + ) } ) } diff --git a/src/js/views/library/LibraryPlaylists.js b/src/js/views/library/LibraryPlaylists.js index 21fcae19..884f32fb 100755 --- a/src/js/views/library/LibraryPlaylists.js +++ b/src/js/views/library/LibraryPlaylists.js @@ -21,6 +21,27 @@ class LibraryPlaylists extends React.Component{ super(props); } + componentDidMount(){ + if (!this.props.local_albums){ + if (this.props.spotify_connected){ + this.props.spotifyActions.getAllLibraryPlaylists() + } + if (this.props.mopidy_connected){ + this.props.mopidyActions.getLibraryPlaylists() + } + } + } + + componentWillReceiveProps(newProps){ + if (!this.props.spotify_connected && newProps.spotify_connected){ + this.props.spotifyActions.getAllLibraryPlaylists() + } + + if (!this.props.mopidy_connected && newProps.mopidy_connected){ + this.props.mopidyActions.getLibraryPlaylists() + } + } + handleContextMenu(e,item){ var data = { e: e, @@ -226,6 +247,8 @@ class LibraryPlaylists extends React.Component{ const mapStateToProps = (state, ownProps) => { return { + mopidy_connected: state.mopidy.connected, + spotify_connected: state.spotify.connected, slim_mode: state.ui.slim_mode, load_queue: state.ui.load_queue, me_id: (state.spotify.me ? state.spotify.me.id : (state.ui.config && state.ui.config.spotify_username ? state.ui.config.spotify_username : false)),