diff --git a/src/store/editor/actions.js b/src/store/editor/actions.js index 610382c1..65b666dc 100644 --- a/src/store/editor/actions.js +++ b/src/store/editor/actions.js @@ -91,7 +91,7 @@ export default { async replaceTracks({ dispatch, state }, uris) { try { - await Spotify.replaceTracksInPlaylist(state.playlist.id, uris); + await Spotify.replaceTracks(state.playlist.id, uris); await dispatch('fetchPlaylist', state.playlist.id); } catch (err) { Spotify.handleApiError(dispatch, err); diff --git a/src/store/playlist-statistics/actions.js b/src/store/playlist-statistics/actions.js index 4006f279..a003afc4 100644 --- a/src/store/playlist-statistics/actions.js +++ b/src/store/playlist-statistics/actions.js @@ -1,4 +1,4 @@ -import Spotify, { api } from '../../utils/Spotify'; +import Spotify from '../../utils/Spotify'; export default { async fetchPlaylistAudioFeatures({ @@ -7,8 +7,8 @@ export default { commit('setFetching', true); try { const { 'editor/playlistIds': playlistIds } = rootGetters; - const result = await api.getAudioFeaturesForTracks(playlistIds); - commit('setPlaylistAudioFeatures', result.audio_features); + const audioFeatures = await Spotify.getAudioFeaturesForTracks(playlistIds); + commit('setPlaylistAudioFeatures', audioFeatures); } catch (err) { Spotify.handleApiError(dispatch, err); } finally { diff --git a/src/utils/Spotify.js b/src/utils/Spotify.js index 85a71a74..26ce2a36 100644 --- a/src/utils/Spotify.js +++ b/src/utils/Spotify.js @@ -103,6 +103,23 @@ export default class Spotify { return playlist; } + /** + * Fetches audio features for a playlist. Supports playlists with more than 100 songs. + * @param {Array.} trackIds + * @returns {Array} + */ + static async getAudioFeaturesForTracks(trackIds) { + const chunks = chunk(trackIds, 100); + const audioFeatures = []; + + for (const trackIdChunk of chunks) { // eslint-disable-line no-restricted-syntax + const response = await api.getAudioFeaturesForTracks(trackIdChunk); // eslint-disable-line + audioFeatures.push(...response.audio_features); + } + + return audioFeatures; + } + /** * This function returns an array of tracks that match the search query * @param query