#27 Starting job scans in order

This commit is contained in:
Serraniel 2019-02-25 18:42:28 +01:00
parent c5ab4a73a6
commit d3aa91f826
Signed by untrusted user who does not match committer: Serraniel
GPG key ID: 3690B4E7364525D3
3 changed files with 38 additions and 33 deletions

View file

@ -92,6 +92,7 @@ namespace DML.AppCore.Classes
Debug($"Starting scan of guild {GuildId} channel {ChannelId}..."); Debug($"Starting scan of guild {GuildId} channel {ChannelId}...");
var result = new List<IMessage>(); var result = new List<IMessage>();
const ushort limit = 100; const ushort limit = 100;
State = JobState.Scanning;
var finished = false; var finished = false;
var scanStartTimeStamp = DateTime.UtcNow; var scanStartTimeStamp = DateTime.UtcNow;

View file

@ -16,7 +16,6 @@
using Discord; using Discord;
using DML.AppCore.Classes; using DML.AppCore.Classes;
using SweetLib.Utils.Logger; using SweetLib.Utils.Logger;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -30,8 +29,10 @@ namespace DML.Application.Classes
private bool Run { get; set; } = false; private bool Run { get; set; } = false;
public List<Job> JobList { get; set; } = new List<Job>(); public List<Job> JobList { get; set; } = new List<Job>();
public Dictionary<int, Queue<IMessage>> RunningJobs = new Dictionary<int, Queue<IMessage>>(); public Dictionary<int, Queue<IMessage>> RunningJobs { get; } = new Dictionary<int, Queue<IMessage>>();
internal int RunningThreads { get; set; } = 0; internal int RunningThreads { get; set; } = 0;
internal Task SchedulerTask { get; private set; }
internal Task DownloadTask { get; private set; }
internal ulong MessagesScanned internal ulong MessagesScanned
{ {
@ -87,44 +88,46 @@ namespace DML.Application.Classes
} }
} }
public void StartScheduler()
{
Logger.Info("Starting scheduler jobs");
SchedulerTask = Task.Run(() =>
{
PerformSchedulerTask();
});
DownloadTask = Task.Run(() =>
{
PerformDownloads();
});
}
public void Stop() public void Stop()
{ {
Run = false; Run = false;
} }
public void ScanAll() private async void PerformSchedulerTask()
{ {
Logger.Info("Started JobScheduler..."); Logger.Trace("SchedulerTask started");
foreach (var job in JobList)
Logger.Debug("Entering job list handler loop...");
//foreach (var job in JobList)
for (var i = JobList.Count - 1; i >= 0; i--)
{ {
if (JobList[i].State == JobState.Idle) if (job.State == JobState.Idle)
{ {
try // scan all old messages first
{ Logger.Debug($"Starting scan for job {job.Id}");
var job = JobList[i]; await job.Scan();
Logger.Debug($"Checking job {job.Id}"); job.State = JobState.Listening; // set to listening now
Logger.Debug($"Scan for job {job.Id} finished");
Task.Run(async () =>
{
var scanFinished = await job.Scan();
Logger.Trace($"Scan result of {job.Id}: {scanFinished}");
while (!scanFinished)
{
scanFinished = await job.Scan();
Logger.Trace($"Scan result of {job.Id}: {scanFinished}");
}
});
}
catch (Exception ex)
{
Logger.Error(ex.Message);
}
} }
} }
Logger.Trace("All jobs have been scanned");
}
private async void PerformDownloads()
{
Logger.Trace("SchedulerTask started");
// TODO
} }
} }
} }

View file

@ -280,8 +280,9 @@ namespace DML.Application.Core
} }
} }
Settings.RescanRequired = false; // TODO
Settings.Store(); // Settings.RescanRequired = false;
// Settings.Store();
if (Settings.UseRPC) if (Settings.UseRPC)
{ {
@ -309,7 +310,7 @@ namespace DML.Application.Core
splash.Close(); splash.Close();
Logger.Info("Starting scheduler..."); Logger.Info("Starting scheduler...");
Scheduler.ScanAll(); Scheduler.StartScheduler();
System.Windows.Forms.Application.Run(new MainForm()); System.Windows.Forms.Application.Run(new MainForm());