From d6235fd272b74422fb0b44511abf33f10811cd3b Mon Sep 17 00:00:00 2001 From: MerlinScheurer Date: Fri, 27 Dec 2024 17:00:24 +0100 Subject: [PATCH] Refac split download input by line break and send ids in bulk --- .../src/api/actions/updateDownloadQueue.ts | 81 +++++++++++-------- 1 file changed, 47 insertions(+), 34 deletions(-) diff --git a/frontend/src/api/actions/updateDownloadQueue.ts b/frontend/src/api/actions/updateDownloadQueue.ts index 5992dd8e..90a77835 100644 --- a/frontend/src/api/actions/updateDownloadQueue.ts +++ b/frontend/src/api/actions/updateDownloadQueue.ts @@ -1,34 +1,47 @@ -import defaultHeaders from '../../configuration/defaultHeaders'; -import getApiUrl from '../../configuration/getApiUrl'; -import getFetchCredentials from '../../configuration/getFetchCredentials'; -import getCookie from '../../functions/getCookie'; - -const updateDownloadQueue = async (download: string, autostart: boolean) => { - const apiUrl = getApiUrl(); - const csrfCookie = getCookie('csrftoken'); - - let params = ''; - if (autostart) { - params = '?autostart=true'; - } - - const response = await fetch(`${apiUrl}/api/download/${params}`, { - method: 'POST', - headers: { - ...defaultHeaders, - 'X-CSRFToken': csrfCookie || '', - }, - credentials: getFetchCredentials(), - - body: JSON.stringify({ - data: [{ youtube_id: download, status: 'pending' }], - }), - }); - - const downloadState = await response.json(); - console.log('updateDownloadQueue', downloadState); - - return downloadState; -}; - -export default updateDownloadQueue; +import defaultHeaders from '../../configuration/defaultHeaders'; +import getApiUrl from '../../configuration/getApiUrl'; +import getFetchCredentials from '../../configuration/getFetchCredentials'; +import getCookie from '../../functions/getCookie'; + +const updateDownloadQueue = async (youtubeIdStrings: string, autostart: boolean) => { + const apiUrl = getApiUrl(); + const csrfCookie = getCookie('csrftoken'); + + const urls = []; + const containsMultiple = youtubeIdStrings.includes('\n'); + + if (containsMultiple) { + const youtubeIds = youtubeIdStrings.split('\n'); + + youtubeIds.forEach(youtubeId => { + urls.push({ youtube_id: youtubeId, status: 'pending' }); + }); + } else { + urls.push({ youtube_id: youtubeIdStrings, status: 'pending' }); + } + + let params = ''; + if (autostart) { + params = '?autostart=true'; + } + + const response = await fetch(`${apiUrl}/api/download/${params}`, { + method: 'POST', + headers: { + ...defaultHeaders, + 'X-CSRFToken': csrfCookie || '', + }, + credentials: getFetchCredentials(), + + body: JSON.stringify({ + data: [...urls], + }), + }); + + const downloadState = await response.json(); + console.log('updateDownloadQueue', downloadState); + + return downloadState; +}; + +export default updateDownloadQueue;