From dbad993c7a307af8a3088bcfe41e120bb3c6fbe1 Mon Sep 17 00:00:00 2001 From: glax Date: Fri, 18 Oct 2024 19:45:04 +0200 Subject: [PATCH] Add Job-Interface (and ProgressToken) --- Website/modules/Job.tsx | 103 ++++++++++++++++++ Website/modules/interfaces/IJob.tsx | 16 +++ Website/modules/interfaces/IProgressToken.tsx | 10 ++ 3 files changed, 129 insertions(+) create mode 100644 Website/modules/Job.tsx create mode 100644 Website/modules/interfaces/IJob.tsx create mode 100644 Website/modules/interfaces/IProgressToken.tsx diff --git a/Website/modules/Job.tsx b/Website/modules/Job.tsx new file mode 100644 index 0000000..ff9e16d --- /dev/null +++ b/Website/modules/Job.tsx @@ -0,0 +1,103 @@ +import {deleteData, getData, postData} from '../App'; +import IJob from "./interfaces/IJob"; +import IProgressToken from "./interfaces/IProgressToken"; + +export class Job +{ + static async GetAllJobs(): Promise { + console.debug("Getting all Jobs"); + return getData("http://127.0.0.1:6531/v2/Jobs") + .then((json) => { + console.debug("Got all Jobs"); + return (json as string[]); + }); + } + + static async GetRunningJobs(): Promise { + console.debug("Getting all running Jobs"); + return getData("http://127.0.0.1:6531/v2/Jobs/Running") + .then((json) => { + console.debug("Got all running Jobs"); + return (json as string[]); + }); + } + + static async GetWaitingJobs(): Promise { + console.debug("Getting all waiting Jobs"); + return getData("http://127.0.0.1:6531/v2/Jobs/Waiting") + .then((json) => { + console.debug("Got all waiting Jobs"); + return (json as string[]); + }); + } + + static async GetMonitoringJobs(): Promise { + console.debug("Getting all monitoring Jobs"); + return getData("http://127.0.0.1:6531/v2/Jobs/Monitoring") + .then((json) => { + console.debug("Got all monitoring Jobs"); + return (json as string[]); + }); + } + + static async GetJob(jobId: string): Promise{ + if(jobId === undefined || jobId === null || jobId.length < 1) { + console.error(`JobId was not provided`); + return Promise.reject(); + } + console.debug(`Getting Job ${jobId}`); + return getData(`http://127.0.0.1:6531/v2/Job/${jobId}`) + .then((json) => { + console.debug(`Got Job ${jobId}`); + return (json as IJob); + }); + } + + static async GetJobs(jobIds: string[]): Promise { + if(jobIds === undefined || jobIds === null || jobIds.length < 1) { + console.error(`JobIds was not provided`); + return Promise.reject(); + } + let reqStr = jobIds.join(","); + console.debug(`Getting Jobs ${reqStr}`); + return getData(`http://127.0.0.1:6531/v2/Job?jobIds=${reqStr}`) + .then((json) => { + console.debug(`Got Jobs ${reqStr}`); + return (json as IJob[]); + }); + } + + static async GetJobProgress(jobId: string): Promise { + console.debug(`Getting Job ${jobId} Progress`); + return getData(`http://127.0.0.1:6531/v2/Job/${jobId}/Progress`) + .then((json) => { + console.debug(`Got Job ${jobId} Progress`); + return (json as IProgressToken); + }); + } + + static async CreateJob(internalId: string, jobType: string, interval: string): Promise { + console.debug(`Creating Job for Manga ${internalId} at ${interval} interval`); + let data = { + internalId: internalId, + interval: interval + }; + return postData(`http://127.0.0.1:6531/v2/Job/Create/${jobType}`, data) + .then((json) => { + console.debug(`Created Job for Manga ${internalId} at ${interval} interval`); + return (json as IJob); + }); + } + + static DeleteJob(jobId: string) { + deleteData(`http://127.0.0.1:6531/v2/Job/${jobId}`); + } + + static StartJob(jobId: string) { + postData(`http://127.0.0.1:6531/v2/Job/${jobId}/StartNow`, {}); + } + + static CancelJob(jobId: string) { + postData(`http://127.0.0.1:6531/v2/Job/${jobId}/Cancel`, {}); + } +} \ No newline at end of file diff --git a/Website/modules/interfaces/IJob.tsx b/Website/modules/interfaces/IJob.tsx new file mode 100644 index 0000000..30b9fb9 --- /dev/null +++ b/Website/modules/interfaces/IJob.tsx @@ -0,0 +1,16 @@ +import IMangaConnector from "./IMangaConnector"; +import IProgressToken from "./IProgressToken"; + +export default interface IJob{ + jobType: number; + mangaInternalId: string; + translatedLanguage: string; + progressToken: IProgressToken; + recurring: boolean; + recurrenceTime: string; + lastExecution: Date; + nextExecution: Date; + id: string; + parentJobId: string | null; + mangaConnector: IMangaConnector; +} \ No newline at end of file diff --git a/Website/modules/interfaces/IProgressToken.tsx b/Website/modules/interfaces/IProgressToken.tsx new file mode 100644 index 0000000..a639248 --- /dev/null +++ b/Website/modules/interfaces/IProgressToken.tsx @@ -0,0 +1,10 @@ +export default interface IProgressToken{ + cancellationRequested: boolean; + increments: number; + incrementsCompleted: number; + progress: number; + lastUpdate: Date; + executionStarted: Date; + timeRemaining: Date; + state: number; +} \ No newline at end of file