Add GetStandbyJobs call and display to footer.

Fix IJob to represent possible return values.
This commit is contained in:
glax 2024-10-20 02:08:22 +02:00
parent 96b5163486
commit c1d333e002
5 changed files with 43 additions and 12 deletions

View File

@ -2,17 +2,19 @@ import React, {useEffect} from 'react';
import '../styles/footer.css';
import {Job} from './Job';
import Icon from '@mdi/react';
import { mdiRun, mdiCounter, mdiEyeCheck } from '@mdi/js';
import { mdiRun, mdiCounter, mdiEyeCheck, mdiTrayFull } from '@mdi/js';
export default function Footer(){
export default function Footer({showQueue} : {showQueue(): void}){
const [MonitoringJobsCount, setMonitoringJobsCount] = React.useState(0);
const [AllJobsCount, setAllJobsCount] = React.useState(0);
const [RunningJobsCount, setRunningJobsCount] = React.useState(0);
const [StandbyJobsCount, setStandbyJobsCount] = React.useState(0);
function UpdateBackendState(){
Job.GetMonitoringJobs().then((jobs) => setMonitoringJobsCount(jobs.length));
Job.GetAllJobs().then((jobs) => setAllJobsCount(jobs.length));
Job.GetRunningJobs().then((jobs) => setRunningJobsCount(jobs.length));
Job.GetStandbyJobs().then((jobs) => setStandbyJobsCount(jobs.length));
}
useEffect(() => {
@ -20,10 +22,11 @@ export default function Footer(){
}, []);
return (
<footer>
<div><Icon path={mdiEyeCheck} size={1} /> <span>{MonitoringJobsCount}</span></div>
<div><Icon path={mdiRun} size={1} /> <span>{RunningJobsCount}</span></div>
<div><Icon path={mdiCounter} size={1} /> <span>{AllJobsCount}</span></div>
<p id="madeWith">Made with Blåhaj 🦈</p>
</footer>)
<footer>
<div><Icon path={mdiEyeCheck} size={1}/> <span>{MonitoringJobsCount}</span></div>
<div onClick={showQueue} className="hoverHand"><Icon path={mdiTrayFull} size={1}/> <span>{StandbyJobsCount}</span></div>
<div onClick={showQueue} className="hoverHand"><Icon path={mdiRun} size={1}/> <span>{RunningJobsCount}</span></div>
<div><Icon path={mdiCounter} size={1}/> <span>{AllJobsCount}</span></div>
<p id="madeWith">Made with Blåhaj 🦈</p>
</footer>)
}

View File

@ -37,6 +37,17 @@ export class Job
});
}
static async GetStandbyJobs(): Promise<string[]> {
console.info("Getting all standby Jobs");
return getData("http://127.0.0.1:6531/v2/Jobs/Standby")
.then((json) => {
console.info("Got all standby Jobs");
const ret = json as string[];
console.debug(ret);
return (ret);
});
}
static async GetMonitoringJobs(): Promise<string[]> {
console.info("Getting all monitoring Jobs");
return getData("http://127.0.0.1:6531/v2/Jobs/Monitoring")

View File

@ -22,7 +22,8 @@ export default function MonitorJobsList({onStartSearch, onJobsChanged} : {onStar
MonitoringJobs.forEach(job => {
if(AllManga.find(manga => manga.internalId == job.mangaInternalId))
return;
Manga.GetMangaById(job.mangaInternalId).then((manga: IManga) => setAllManga([...AllManga, manga]));
Manga.GetMangaById(job.mangaInternalId != undefined ? job.mangaInternalId : job.chapter != undefined ? job.chapter.parentManga.internalId : "").
then((manga: IManga) => setAllManga([...AllManga, manga]));
});
}, [MonitoringJobs]);

View File

@ -1,16 +1,28 @@
import IMangaConnector from "./IMangaConnector";
import IProgressToken from "./IProgressToken";
import IChapter from "./IChapter";
export default interface IJob{
jobType: number;
mangaInternalId: string;
translatedLanguage: string;
progressToken: IProgressToken;
recurring: boolean;
recurrenceTime: string;
lastExecution: Date;
nextExecution: Date;
id: string;
jobType: number;
parentJobId: string | null;
mangaConnector: IMangaConnector;
mangaInternalId: string | undefined; //only on DownloadNewChapters
translatedLanguage: string | undefined; //only on DownloadNewChapters
chapter: IChapter | undefined; //only on DownloadChapter
}
export function JobTypeFromNumber(n: number): string {
switch(n) {
case 0: return "Download Chapter";
case 1: return "Download New Chapters";
case 2: return "Update Metadata";
case 3: return "Monitor";
}
return "";
}

View File

@ -33,4 +33,8 @@ footer div {
footer div > * {
margin: 0 2px;
padding: 3px 0;
}
footer .hoverHand {
cursor: pointer;
}