From 3e8794f70b2720566d38d532d2de7250becdb048 Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Wed, 22 Mar 2017 07:45:17 +1300 Subject: [PATCH] Re-instating lost playlist merging on load, fixes #67 --- src/js/components/TrackList.js | 10 ++++-- src/js/services/ui/reducer.js | 59 +++++++++++++++++++++++++++++----- 2 files changed, 58 insertions(+), 11 deletions(-) diff --git a/src/js/components/TrackList.js b/src/js/components/TrackList.js index d96696f8..6f7828a6 100755 --- a/src/js/components/TrackList.js +++ b/src/js/components/TrackList.js @@ -220,10 +220,14 @@ class TrackList extends React.Component{ } selectedTracks(){ - function isSelected( track ){ - return ( typeof(track.selected) !== 'undefined' && track.selected ); + if (!this.state.tracks || this.state.tracks.length <= 0){ + return [] + } else { + function isSelected( track ){ + return ( typeof(track.selected) !== 'undefined' && track.selected ); + } + return this.state.tracks.filter(isSelected) } - return this.state.tracks.filter(isSelected) } tracksIndexes(tracks){ diff --git a/src/js/services/ui/reducer.js b/src/js/services/ui/reducer.js index 110f79db..1a6a379a 100755 --- a/src/js/services/ui/reducer.js +++ b/src/js/services/ui/reducer.js @@ -446,24 +446,67 @@ export default function reducer(ui = {}, action){ case 'PLAYLIST_UPDATED': var playlists = Object.assign([], ui.playlists) - if (playlists[action.key]){ - var playlist = Object.assign({}, playlists[action.key], action.playlist) + if (typeof(playlists[action.key]) !== 'undefined'){ + var existing_playlist = Object.assign({}, playlists[action.key]) + + if (existing_playlist.tracks && action.playlist.tracks){ + var tracks = [...existing_playlist.tracks, ...action.playlist.tracks] + } else if (existing_playlist.tracks){ + var tracks = existing_playlist.tracks + } else if (action.playlist.tracks){ + var tracks = action.playlist.tracks + } else { + var tracks = [] + } + + var merged_playlist = Object.assign( + {}, + existing_playlist, + action.playlist, + { + tracks: tracks + } + ) }else{ - var playlist = Object.assign({}, action.playlist) + var merged_playlist = Object.assign({}, action.playlist) } - playlists[action.key] = playlist + playlists[action.key] = merged_playlist return Object.assign({}, ui, { playlists: playlists }); case 'PLAYLISTS_LOADED': var playlists = Object.assign([], ui.playlists) for (var i = 0; i < action.playlists.length; i++){ - var playlist = action.playlists[i] - if (typeof(playlists[playlist.uri]) !== 'undefined'){ - playlist = Object.assign({}, playlists[playlist.uri], playlist) + var loaded_playlist = action.playlists[i] + + if (typeof(playlists[loaded_playlist.uri]) !== 'undefined'){ + var existing_playlist = Object.assign({}, playlists[loaded_playlist.uri]) + + if (existing_playlist.tracks && loaded_playlist.tracks){ + var tracks = [...existing_playlist.tracks, ...loaded_playlist.tracks] + } else if (existing_playlist.tracks){ + var tracks = existing_playlist.tracks + } else if (loaded_playlist.tracks){ + var tracks = loaded_playlist.tracks + } else { + var tracks = [] + } + + var merged_playlist = Object.assign( + {}, + existing_playlist, + loaded_playlist, + { + tracks: tracks + } + ) + + } else { + var merged_playlist = loaded_playlist } - playlists[playlist.uri] = playlist + + playlists[merged_playlist.uri] = merged_playlist } return Object.assign({}, ui, { playlists: playlists });