mirror of
https://github.com/ajnart/homarr.git
synced 2026-02-03 13:19:17 +01:00
🥅 Add error handling for download queue API
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { Deluge } from '@ctrl/deluge';
|
||||
import { AllClientData } from '@ctrl/shared-torrent';
|
||||
import Consola from 'consola';
|
||||
import { getCookie } from 'cookies-next';
|
||||
import dayjs from 'dayjs';
|
||||
import { NextApiRequest, NextApiResponse } from 'next';
|
||||
@@ -18,16 +19,36 @@ const Get = async (request: NextApiRequest, response: NextApiResponse) => {
|
||||
const configName = getCookie('config-name', { req: request });
|
||||
const config = getConfig(configName?.toString() ?? 'default');
|
||||
|
||||
const clientData: Promise<NormalizedDownloadAppStat | undefined>[] = config.apps.map((app) =>
|
||||
GetDataFromClient(app)
|
||||
);
|
||||
const failedClients: string[] = [];
|
||||
|
||||
const clientData: Promise<NormalizedDownloadAppStat>[] = config.apps.map(async (app) => {
|
||||
try {
|
||||
const response = await GetDataFromClient(app);
|
||||
|
||||
if (!response) {
|
||||
return {
|
||||
success: false,
|
||||
} as NormalizedDownloadAppStat;
|
||||
}
|
||||
|
||||
return response;
|
||||
} catch (err) {
|
||||
Consola.error(
|
||||
`Error communicating with your download client '${app.name}' (${app.id}): ${err}`
|
||||
);
|
||||
failedClients.push(app.id);
|
||||
return {
|
||||
success: false,
|
||||
} as NormalizedDownloadAppStat;
|
||||
}
|
||||
});
|
||||
|
||||
const settledPromises = await Promise.allSettled(clientData);
|
||||
|
||||
const data: NormalizedDownloadAppStat[] = settledPromises
|
||||
.filter((x) => x.status === 'fulfilled')
|
||||
.map((promise) => (promise as PromiseFulfilledResult<NormalizedDownloadAppStat>).value)
|
||||
.filter((x) => x !== undefined);
|
||||
.filter((x) => x !== undefined && x.type !== undefined);
|
||||
|
||||
const responseBody = { apps: data } as NormalizedDownloadQueueResponse;
|
||||
|
||||
|
||||
@@ -8,16 +8,17 @@ export type NormalizedDownloadQueueResponse = {
|
||||
export type NormalizedDownloadAppStat = {
|
||||
success: boolean;
|
||||
appId: string;
|
||||
totalDownload: number;
|
||||
} & (TorrentTotalDownload | UsenetTotalDownloas);
|
||||
|
||||
export type TorrentTotalDownload = {
|
||||
type: 'torrent';
|
||||
torrents: NormalizedTorrent[];
|
||||
totalDownload: number;
|
||||
totalUpload: number;
|
||||
};
|
||||
|
||||
export type UsenetTotalDownloas = {
|
||||
type: 'usenet';
|
||||
totalDownload: number;
|
||||
nzbs: UsenetQueueItem[];
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user