mirror of
https://github.com/gethomepage/homepage.git
synced 2026-09-29 07:21:16 -07:00
70 lines
2.1 KiB
JavaScript
70 lines
2.1 KiB
JavaScript
import { asJson } from "utils/proxy/api-helpers";
|
|
import genericProxyHandler from "utils/proxy/handlers/generic";
|
|
|
|
const widget = {
|
|
api: "{url}/api/v3/{endpoint}?apikey={key}",
|
|
proxyHandler: genericProxyHandler,
|
|
|
|
mappings: {
|
|
movie: {
|
|
endpoint: "movie",
|
|
map: (data) => {
|
|
const movieData = asJson(data) ?? [];
|
|
return {
|
|
wanted: movieData.filter((item) => item.monitored && !item.hasFile && item.isAvailable).length,
|
|
have: movieData.filter((item) => item.hasFile).length,
|
|
missing: movieData.filter((item) => item.monitored && !item.hasFile).length,
|
|
all: movieData.map((entry) => ({
|
|
title: entry.title,
|
|
id: entry.id,
|
|
})),
|
|
};
|
|
},
|
|
},
|
|
"queue/status": {
|
|
endpoint: "queue/status",
|
|
validate: ["totalCount"],
|
|
},
|
|
"queue/details": {
|
|
endpoint: "queue/details",
|
|
map: (data) =>
|
|
asJson(data)
|
|
.map((entry) => ({
|
|
trackedDownloadState: entry.trackedDownloadState,
|
|
trackedDownloadStatus: entry.trackedDownloadStatus,
|
|
timeLeft: entry.timeleft,
|
|
size: entry.size,
|
|
sizeLeft: entry.sizeleft,
|
|
movieId: entry.movieId ?? entry.id,
|
|
status: entry.status,
|
|
}))
|
|
.sort((a, b) => {
|
|
const downloadingA = (a.status ?? a.trackedDownloadState) === "downloading";
|
|
const downloadingB = (b.status ?? b.trackedDownloadState) === "downloading";
|
|
if (downloadingA && !downloadingB) {
|
|
return -1;
|
|
}
|
|
if (downloadingB && !downloadingA) {
|
|
return 1;
|
|
}
|
|
|
|
const percentA = a.size > 0 ? a.sizeLeft / a.size : 1;
|
|
const percentB = b.size > 0 ? b.sizeLeft / b.size : 1;
|
|
if (percentA < percentB) {
|
|
return -1;
|
|
}
|
|
if (percentA > percentB) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}),
|
|
},
|
|
calendar: {
|
|
endpoint: "calendar",
|
|
params: ["start", "end", "unmonitored"],
|
|
},
|
|
},
|
|
};
|
|
|
|
export default widget;
|