Compare commits
6 Commits
f08b9e85ec
...
4156365b18
Author | SHA1 | Date | |
---|---|---|---|
4156365b18 | |||
d3ccddd8db | |||
13075a8704 | |||
e7d9f53a93 | |||
dc6dfd4aa1 | |||
0fba09b1e8 |
@ -27,7 +27,7 @@ public class JobBoss : GlobalBase
|
|||||||
{
|
{
|
||||||
Log($"Added {job}");
|
Log($"Added {job}");
|
||||||
this.jobs.Add(job);
|
this.jobs.Add(job);
|
||||||
ExportJob(job);
|
UpdateJobFile(job);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,6 +37,10 @@ public class JobBoss : GlobalBase
|
|||||||
AddJob(job);
|
AddJob(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Compares contents of the provided job and all current jobs
|
||||||
|
/// Does not check if objects are the same
|
||||||
|
/// </summary>
|
||||||
public bool ContainsJobLike(Job job)
|
public bool ContainsJobLike(Job job)
|
||||||
{
|
{
|
||||||
if (job is DownloadChapter dcJob)
|
if (job is DownloadChapter dcJob)
|
||||||
@ -57,13 +61,14 @@ public class JobBoss : GlobalBase
|
|||||||
this.jobs.Remove(job);
|
this.jobs.Remove(job);
|
||||||
if(job.subJobs is not null && job.subJobs.Any())
|
if(job.subJobs is not null && job.subJobs.Any())
|
||||||
RemoveJobs(job.subJobs);
|
RemoveJobs(job.subJobs);
|
||||||
ExportJob(job);
|
UpdateJobFile(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveJobs(IEnumerable<Job?> jobsToRemove)
|
public void RemoveJobs(IEnumerable<Job?> jobsToRemove)
|
||||||
{
|
{
|
||||||
Log($"Removing {jobsToRemove.Count()} jobs.");
|
List<Job?> toRemove = jobsToRemove.ToList(); //Prevent multiple enumeration
|
||||||
foreach (Job? job in jobsToRemove)
|
Log($"Removing {toRemove.Count()} jobs.");
|
||||||
|
foreach (Job? job in toRemove)
|
||||||
if(job is not null)
|
if(job is not null)
|
||||||
RemoveJob(job);
|
RemoveJob(job);
|
||||||
}
|
}
|
||||||
@ -122,47 +127,52 @@ public class JobBoss : GlobalBase
|
|||||||
|
|
||||||
private bool QueueContainsJob(Job job)
|
private bool QueueContainsJob(Job job)
|
||||||
{
|
{
|
||||||
mangaConnectorJobQueue.TryAdd(job.mangaConnector, new Queue<Job>());
|
if (mangaConnectorJobQueue.TryAdd(job.mangaConnector, new Queue<Job>()))//If we can add the queue, there is certainly no job in it
|
||||||
|
return true;
|
||||||
return mangaConnectorJobQueue[job.mangaConnector].Contains(job);
|
return mangaConnectorJobQueue[job.mangaConnector].Contains(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddJobToQueue(Job job)
|
public void AddJobToQueue(Job job)
|
||||||
{
|
{
|
||||||
Log($"Adding Job to Queue. {job}");
|
Log($"Adding Job to Queue. {job}");
|
||||||
mangaConnectorJobQueue.TryAdd(job.mangaConnector, new Queue<Job>());
|
if(!QueueContainsJob(job))
|
||||||
Queue<Job> connectorJobQueue = mangaConnectorJobQueue[job.mangaConnector];
|
mangaConnectorJobQueue[job.mangaConnector].Enqueue(job);
|
||||||
if(!connectorJobQueue.Contains(job))
|
|
||||||
connectorJobQueue.Enqueue(job);
|
|
||||||
job.ExecutionEnqueue();
|
job.ExecutionEnqueue();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddJobsToQueue(IEnumerable<Job> jobs)
|
private void AddJobsToQueue(IEnumerable<Job> newJobs)
|
||||||
{
|
{
|
||||||
foreach(Job job in jobs)
|
foreach(Job job in newJobs)
|
||||||
AddJobToQueue(job);
|
AddJobToQueue(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadJobsList(HashSet<MangaConnector> connectors)
|
private void LoadJobsList(HashSet<MangaConnector> connectors)
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(settings.jobsFolderPath);
|
if (!Directory.Exists(settings.jobsFolderPath)) //No jobs to load
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(settings.jobsFolderPath);
|
||||||
|
return;
|
||||||
|
}
|
||||||
Regex idRex = new (@"(.*)\.json");
|
Regex idRex = new (@"(.*)\.json");
|
||||||
|
|
||||||
foreach (FileInfo file in new DirectoryInfo(settings.jobsFolderPath).EnumerateFiles())
|
//Load json-job-files
|
||||||
if (idRex.IsMatch(file.Name))
|
foreach (FileInfo file in new DirectoryInfo(settings.jobsFolderPath).EnumerateFiles().Where(fileInfo => idRex.IsMatch(fileInfo.Name)))
|
||||||
{
|
{
|
||||||
Job job = JsonConvert.DeserializeObject<Job>(File.ReadAllText(file.FullName),
|
Job job = JsonConvert.DeserializeObject<Job>(File.ReadAllText(file.FullName),
|
||||||
new JobJsonConverter(this, new MangaConnectorJsonConverter(this, connectors)))!;
|
new JobJsonConverter(this, new MangaConnectorJsonConverter(this, connectors)))!;
|
||||||
this.jobs.Add(job);
|
this.jobs.Add(job);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (Job job in this.jobs)
|
|
||||||
this.jobs.FirstOrDefault(jjob => jjob.id == job.parentJobId)?.AddSubJob(job);
|
|
||||||
|
|
||||||
foreach (DownloadNewChapters ncJob in this.jobs.Where(job => job is DownloadNewChapters))
|
//Connect jobs to parent-jobs and add Publications to cache
|
||||||
cachedPublications.Add(ncJob.manga);
|
foreach (Job job in this.jobs)
|
||||||
|
{
|
||||||
|
this.jobs.FirstOrDefault(jjob => jjob.id == job.parentJobId)?.AddSubJob(job);
|
||||||
|
if(job is DownloadNewChapters dncJob)
|
||||||
|
cachedPublications.Add(dncJob.manga);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ExportJob(Job job)
|
private void UpdateJobFile(Job job)
|
||||||
{
|
{
|
||||||
string jobFilePath = Path.Join(settings.jobsFolderPath, $"{job.id}.json");
|
string jobFilePath = Path.Join(settings.jobsFolderPath, $"{job.id}.json");
|
||||||
|
|
||||||
@ -190,11 +200,11 @@ public class JobBoss : GlobalBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ExportJobsList()
|
private void UpdateAllJobFiles()
|
||||||
{
|
{
|
||||||
Log("Exporting Jobs");
|
Log("Exporting Jobs");
|
||||||
foreach (Job job in this.jobs)
|
foreach (Job job in this.jobs)
|
||||||
ExportJob(job);
|
UpdateJobFile(job);
|
||||||
|
|
||||||
//Remove files with jobs not in this.jobs-list
|
//Remove files with jobs not in this.jobs-list
|
||||||
Regex idRex = new (@"(.*)\.json");
|
Regex idRex = new (@"(.*)\.json");
|
||||||
@ -228,9 +238,10 @@ public class JobBoss : GlobalBase
|
|||||||
Job queueHead = jobQueue.Peek();
|
Job queueHead = jobQueue.Peek();
|
||||||
if (queueHead.progressToken.state is ProgressToken.State.Complete or ProgressToken.State.Cancelled)
|
if (queueHead.progressToken.state is ProgressToken.State.Complete or ProgressToken.State.Cancelled)
|
||||||
{
|
{
|
||||||
queueHead.ResetProgress();
|
|
||||||
if(!queueHead.recurring)
|
if(!queueHead.recurring)
|
||||||
RemoveJob(queueHead);
|
RemoveJob(queueHead);
|
||||||
|
else
|
||||||
|
queueHead.ResetProgress();
|
||||||
jobQueue.Dequeue();
|
jobQueue.Dequeue();
|
||||||
Log($"Next job in {jobs.MinBy(job => job.nextExecution)?.nextExecution.Subtract(DateTime.Now)} {jobs.MinBy(job => job.nextExecution)?.id}");
|
Log($"Next job in {jobs.MinBy(job => job.nextExecution)?.nextExecution.Subtract(DateTime.Now)} {jobs.MinBy(job => job.nextExecution)?.id}");
|
||||||
}else if (queueHead.progressToken.state is ProgressToken.State.Standby)
|
}else if (queueHead.progressToken.state is ProgressToken.State.Standby)
|
||||||
|
Loading…
Reference in New Issue
Block a user