diff --git a/server/clients/PollingRadarrRetriever.js b/server/clients/PollingRadarrRetriever.js index 5cace49..31653c6 100644 --- a/server/clients/PollingRadarrRetriever.js +++ b/server/clients/PollingRadarrRetriever.js @@ -37,17 +37,35 @@ class PollingRadarrRetriever extends ArrRetriever { * @returns {Promise} Queue object with records array */ async getQueue() { - try { - // Fetch with large page size to get all items (Radarr has pagination) - const response = await axios.get(`${this.url}/api/v3/queue`, { - headers: { 'X-Api-Key': this.apiKey }, - params: { includeMovie: true, pageSize: 1000 } - }); - return response.data; - } catch (error) { - logToFile(`[PollingRadarrRetriever] ${this.id} queue error: ${error.message}`); - return { records: [] }; - } + const instanceName = this.name; + let page = 1; + let allRecords = []; + let responseData = null; + + do { + try { + const response = await axios.get(`${this.url}/api/v3/queue`, { + headers: { 'X-Api-Key': this.apiKey }, + params: { includeMovie: true, page, pageSize: 1000 } + }); + responseData = response.data; + } catch (error) { + console.error(`Radarr queue fetch failed for instance ${instanceName}:`, error.response?.data || error.message); + throw error; + } + + const records = responseData.records || (Array.isArray(responseData) ? responseData : []); + allRecords = allRecords.concat(records); + page++; + } while ( + (responseData.records || (Array.isArray(responseData) ? responseData : [])).length === 1000 && + page <= 50 + ); + + return { + ...responseData, + records: allRecords + }; } /** @@ -69,8 +87,14 @@ class PollingRadarrRetriever extends ArrRetriever { startDate } = options; - try { + const instanceName = this.name; + let page = 1; + let allRecords = []; + let responseData = null; + + do { const params = { + page, pageSize, includeMovie }; @@ -79,15 +103,29 @@ class PollingRadarrRetriever extends ArrRetriever { if (sortDir) params.sortDir = sortDir; if (startDate) params.startDate = startDate; - const response = await axios.get(`${this.url}/api/v3/history`, { - headers: { 'X-Api-Key': this.apiKey }, - params - }); - return response.data; - } catch (error) { - logToFile(`[PollingRadarrRetriever] ${this.id} history error: ${error.message}`); - return { records: [] }; - } + try { + const response = await axios.get(`${this.url}/api/v3/history`, { + headers: { 'X-Api-Key': this.apiKey }, + params + }); + responseData = response.data; + } catch (error) { + console.error(`Radarr history fetch failed for instance ${instanceName}:`, error.response?.data || error.message); + throw error; + } + + const records = responseData.records || (Array.isArray(responseData) ? responseData : []); + allRecords = allRecords.concat(records); + page++; + } while ( + (responseData.records || (Array.isArray(responseData) ? responseData : [])).length === pageSize && + page <= 50 + ); + + return { + ...responseData, + records: allRecords + }; } }