From 405ef191091c29f12bf80acf9183ff1f1cc0099d Mon Sep 17 00:00:00 2001 From: James Barnsley Date: Thu, 30 Aug 2018 17:49:08 +1200 Subject: [PATCH] Formatting not working... somehow pre-populated --- src/js/helpers.js | 228 +++++++++++++++++------------ src/js/services/core/middleware.js | 33 ++--- src/js/services/spotify/actions.js | 17 +-- 3 files changed, 153 insertions(+), 125 deletions(-) diff --git a/src/js/helpers.js b/src/js/helpers.js index 5941f406..421df2c0 100755 --- a/src/js/helpers.js +++ b/src/js/helpers.js @@ -307,34 +307,153 @@ export let getTrackIcon = function(current_track = false, core = false){ /** * Format our album objects into a universal format * - * @param album obj + * @param data obj * @return album obj **/ export let formatAlbum = function(data){ - var album = { - uri: null, - name: null, - type: null, - artists_uris: null, - tracks_uris: null, - release_date: null, - popularity: null, - images: null - }; + var album = {}; + console.log("VANILLA",album); + var fields = [ + 'uri', + 'name', + 'type', + 'provider', + 'artists_uris', + 'tracks_uris', + 'release_date', + 'popularity', + 'images' + ]; // Loop fields and import from data - for (var key in album){ - if (album.hasOwnProperty(key) && data.hasOwnProperty(key)){ - album[key] = data[key]; + for (var field of fields){ + if (data.hasOwnProperty(field)){ + album[field] = data[field]; + console.log(field, data[field]); } } - if (data.date) album.release_date = data.date; + console.log("FORMATTED",album); + + if (data.date && !album.date) album.release_date = data.date; return album; } +/** + * Format our artist objects into a universal format + * + * @param data obj + * @return artist obj + **/ +export let formatArtist = function(data){ + var artist = {} + var fields = [ + 'uri', + 'name', + 'type', + 'provider', + 'popularity', + 'images', + 'biography', + 'biography_link', + 'followers', + 'related_artists_uris', + 'albums_uris', + 'tracks_uris' + ]; + + // Loop fields and import from data + for (var field of fields){ + if (data.hasOwnProperty(field)){ + artist[field] = data[field]; + } + } + + return artist; +} + + +/** + * Format tracks into our universal format + * + * @param tracks = object or array of objects + * @return array + **/ +export let formatTracks = function(tracks){ + + if (!tracks || tracks === undefined){ + return null; + } + + // Handle single records + var singular = false; + if (tracks.constructor !== Array){ + tracks = [tracks]; + singular = true; + } + + var formatted = []; + for (var i = 0; i < tracks.length; i++){ + + // Nested track object (eg in spotify playlist) + if (tracks[i].track && isObject(tracks[i].track)){ + var track = Object.assign({}, tracks[i].track); + + // Copy supporting values + if (tracks[i].added_by){ + track.added_by = tracks[i].added_by; + } + if (tracks[i].added_at){ + track.added_at = tracks[i].added_at; + } + if (tracks[i].tlid){ + track.tlid = tracks[i].tlid; + } + + } else { + var track = Object.assign({}, tracks[i]); + } + + if (track.duration_ms){ + track.duration = track.duration_ms; + } else if (track.length){ + track.duration = track.length; + } + + if (track.track_no){ + track.track_number = track.track_no; + } else if (track.track_number){ + track.track_number = track.track_number; + } + + if (track.disc_no){ + track.disc_number = track.disc_no; + } + + if (track.release_date){ + track.date = track.release_date; + } + + // Copy images from albums (if applicable) + if (track.album && track.album.images){ + if (!track.images || track.images.length > 0){ + track.images = track.album.images; + } + } + + formatted.push(track); + } + + if (singular){ + return formatted[0]; + } else { + return formatted; + } +} + + /** * Collate an object with external references into a fully self-contained object * We merge *_uris references (ie tracks_uris) into the main object @@ -422,85 +541,6 @@ export let collateObject = function(object, indexes = {}){ } -/** - * Format tracks into our universal format - * - * @param tracks = object or array of objects - * @return array - **/ -export let formatTracks = function(tracks){ - - if (!tracks || tracks === undefined){ - return null; - } - - // Handle single records - var singular = false; - if (tracks.constructor !== Array){ - tracks = [tracks]; - singular = true; - } - - var formatted = []; - for (var i = 0; i < tracks.length; i++){ - - // Nested track object (eg in spotify playlist) - if (tracks[i].track && isObject(tracks[i].track)){ - var track = Object.assign({}, tracks[i].track); - - // Copy supporting values - if (tracks[i].added_by){ - track.added_by = tracks[i].added_by; - } - if (tracks[i].added_at){ - track.added_at = tracks[i].added_at; - } - if (tracks[i].tlid){ - track.tlid = tracks[i].tlid; - } - - } else { - var track = Object.assign({}, tracks[i]); - } - - if (track.duration_ms){ - track.duration = track.duration_ms; - } else if (track.length){ - track.duration = track.length; - } - - if (track.track_no){ - track.track_number = track.track_no; - } else if (track.track_number){ - track.track_number = track.track_number; - } - - if (track.disc_no){ - track.disc_number = track.disc_no; - } - - if (track.release_date){ - track.date = track.release_date; - } - - // Copy images from albums (if applicable) - if (track.album && track.album.images){ - if (!track.images || track.images.length > 0){ - track.images = track.album.images; - } - } - - formatted.push(track); - } - - if (singular){ - return formatted[0]; - } else { - return formatted; - } -} - - /** diff --git a/src/js/services/core/middleware.js b/src/js/services/core/middleware.js index dffb2953..e485812b 100755 --- a/src/js/services/core/middleware.js +++ b/src/js/services/core/middleware.js @@ -460,8 +460,9 @@ const CoreMiddleware = (function(){ var artists_loaded = []; var tracks_loaded = []; - action.albums.forEach(raw_album => { + for (var raw_album of action.albums){ var album = helpers.formatAlbum(raw_album); + console.log(album) if (albums_index[album.uri]){ album = Object.assign({}, albums_index[album.uri], album); @@ -482,19 +483,12 @@ const CoreMiddleware = (function(){ } albums_loaded.push(album); - }); + }; action.albums = albums_loaded; - store.dispatch({ - type: 'ARTISTS_LOADED', - artists: artists_loaded - }); - - store.dispatch({ - type: 'TRACKS_LOADED', - tracks: tracks_loaded - }); + store.dispatch(coreActions.artistsLoaded(artists_loaded)); + store.dispatch(coreActions.tracksLoaded(tracks_loaded)); next(action); break @@ -504,31 +498,34 @@ const CoreMiddleware = (function(){ var artists_loaded = []; var tracks_loaded = []; - action.artists.forEach(artist => { + action.artists.forEach(raw_artist => { + var artist = helpers.formatArtist(raw_artist); + + // Already have an artist in the index if (artists_index[artist.uri]){ - // if we've already got images, remove and add as additional_images + // Don't replace existing images, instead add them as supplementary // this is to prevent LastFM overwriting Spotify images if (artists_index[artist.uri].images){ - artist.images_additional = artist.images - delete artist.images + artist.images_additional = artist.images; + delete artist.images; } artist = Object.assign({}, artists_index[artist.uri], artist); } // Migrate nested tracks objects into references to our tracks index - if (artist.tracks){ - var tracks = helpers.formatTracks(artist.tracks); + if (raw_artist.tracks){ + var tracks = helpers.formatTracks(raw_artist.tracks); var tracks_uris = helpers.arrayOf('uri', tracks); artist.tracks_uris = tracks_uris; - delete artist.tracks; tracks_loaded = [...tracks_loaded, ...tracks]; } artists_loaded.push(artist); }); + action.artists = artists_loaded; store.dispatch(coreActions.tracksLoaded(tracks_loaded)); diff --git a/src/js/services/spotify/actions.js b/src/js/services/spotify/actions.js index 5ae52007..ebf4d563 100755 --- a/src/js/services/spotify/actions.js +++ b/src/js/services/spotify/actions.js @@ -1000,17 +1000,11 @@ export function getRecommendations(uris = [], limit = 20, tunabilities = null){ } if (albums.length > 0){ - dispatch({ - type: 'ALBUMS_LOADED', - albums: albums - }); + dispatch(coreActions.albumsLoaded(albums)); } if (tracks.length > 0){ - dispatch({ - type: 'TRACKS_LOADED', - tracks: tracks - }); + dispatch(coreActions.tracksLoaded(tracks)); } dispatch({ @@ -1184,12 +1178,9 @@ export function getArtists(uris){ album: artist.albums[i] }); } - artist.albums = helpers.arrayOf('uri',artist.albums) + artist.albums_uris = helpers.arrayOf('uri',artist.albums) artist.albums_more = artist.albums.next - dispatch({ - type: 'ARTIST_LOADED', - artist: artist - }); + dispatch(coreActions.artistLoaded(artist)); } }, error => {