From 721cc91e47abca5116814f5d8fb4e82565422569 Mon Sep 17 00:00:00 2001 From: Sjoerd Bolten Date: Sat, 7 Sep 2024 04:51:31 +0200 Subject: [PATCH 1/4] feat(me): add batches to library (un)saving --- src/lib/me/MeManager.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/lib/me/MeManager.ts b/src/lib/me/MeManager.ts index e5970a7..d8631b4 100644 --- a/src/lib/me/MeManager.ts +++ b/src/lib/me/MeManager.ts @@ -142,9 +142,12 @@ export class MeManager extends Manager { * @param {string} ids Array of IDs. */ async saveTracks(ids: string[]): Promise { - await this.http.put(`/v1/me/tracks`, { - ids - }); + // Use an async loop to preserve the order of saves + for (let i = 0; i < ids.length; i += 50) { + await this.http.put(`/v1/me/tracks`, { + ids: ids.slice(i, i + 50) + }); + } } /** @@ -152,9 +155,12 @@ export class MeManager extends Manager { * @param {string} ids Array of IDs. */ async unsaveTracks(ids: string[]): Promise { - await this.http.delete(`/v1/me/tracks`, { - query: { ids: ids.join(',') } - }); + // Use an async loop to preserve the order of unsaves + for (let i = 0; i < ids.length; i += 50) { + await this.http.delete(`/v1/me/tracks`, { + query: { ids: ids.slice(i, i + 50).join(',') } + }); + } } async playlists(options?: { From 07e7249e2c177aeb0843fa50ed56a22bbb365506 Mon Sep 17 00:00:00 2001 From: Sjoerd Bolten Date: Sat, 7 Sep 2024 04:53:10 +0200 Subject: [PATCH 2/4] feat(me): prefer body instead of query --- src/lib/me/MeManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/me/MeManager.ts b/src/lib/me/MeManager.ts index d8631b4..1c54e76 100644 --- a/src/lib/me/MeManager.ts +++ b/src/lib/me/MeManager.ts @@ -158,7 +158,7 @@ export class MeManager extends Manager { // Use an async loop to preserve the order of unsaves for (let i = 0; i < ids.length; i += 50) { await this.http.delete(`/v1/me/tracks`, { - query: { ids: ids.slice(i, i + 50).join(',') } + ids: ids.slice(i, i + 50) }); } } From 49d13edac084e4d46cf7c090f7d062e22a32bff6 Mon Sep 17 00:00:00 2001 From: Sjoerd Bolten Date: Wed, 18 Sep 2024 18:55:04 +0200 Subject: [PATCH 3/4] style(me): use chunks for batch requests --- src/lib/me/MeManager.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/me/MeManager.ts b/src/lib/me/MeManager.ts index 1c54e76..6017a98 100644 --- a/src/lib/me/MeManager.ts +++ b/src/lib/me/MeManager.ts @@ -143,9 +143,9 @@ export class MeManager extends Manager { */ async saveTracks(ids: string[]): Promise { // Use an async loop to preserve the order of saves - for (let i = 0; i < ids.length; i += 50) { + for (const chunkIds of chunk(ids, 50)) { await this.http.put(`/v1/me/tracks`, { - ids: ids.slice(i, i + 50) + ids: chunkIds }); } } @@ -156,9 +156,9 @@ export class MeManager extends Manager { */ async unsaveTracks(ids: string[]): Promise { // Use an async loop to preserve the order of unsaves - for (let i = 0; i < ids.length; i += 50) { + for (const chunkIds of chunk(ids, 50)) { await this.http.delete(`/v1/me/tracks`, { - ids: ids.slice(i, i + 50) + ids: chunkIds }); } } From bcb7a036e1ef343dc7f47c7e82c49921c2025d41 Mon Sep 17 00:00:00 2001 From: Sjoerd Bolten Date: Sun, 6 Oct 2024 20:29:46 +0200 Subject: [PATCH 4/4] fix(me): import chunk --- src/lib/me/MeManager.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/me/MeManager.ts b/src/lib/me/MeManager.ts index 6017a98..6a9b381 100644 --- a/src/lib/me/MeManager.ts +++ b/src/lib/me/MeManager.ts @@ -11,6 +11,7 @@ import { Markets, LibraryTrack } from '../../interfaces/Spotify'; +import { chunk } from '../../util/chunk'; import { Manager } from '../Manager';