2024-11-26 15:14:31 +01:00
|
|
|
|
using AutoClient.Modes.FolderStore;
|
2024-10-30 08:56:31 +01:00
|
|
|
|
|
|
|
|
|
|
namespace AutoClient.Modes
|
|
|
|
|
|
{
|
|
|
|
|
|
public class FolderStoreMode : IMode
|
|
|
|
|
|
{
|
2024-10-30 11:09:13 +01:00
|
|
|
|
private readonly App app;
|
|
|
|
|
|
private readonly string folder;
|
|
|
|
|
|
private readonly PurchaseInfo purchaseInfo;
|
|
|
|
|
|
private readonly CancellationTokenSource cts = new CancellationTokenSource();
|
|
|
|
|
|
private Task checkTask = Task.CompletedTask;
|
|
|
|
|
|
|
|
|
|
|
|
public FolderStoreMode(App app, string folder, PurchaseInfo purchaseInfo)
|
|
|
|
|
|
{
|
|
|
|
|
|
this.app = app;
|
|
|
|
|
|
this.folder = folder;
|
|
|
|
|
|
this.purchaseInfo = purchaseInfo;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-10-30 08:56:31 +01:00
|
|
|
|
public void Start(ICodexInstance instance, int index)
|
|
|
|
|
|
{
|
2024-10-30 11:09:13 +01:00
|
|
|
|
checkTask = Task.Run(async () =>
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
await RunChecker(instance);
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
app.Log.Error("Exception in FolderStoreMode worker: " + ex);
|
|
|
|
|
|
Environment.Exit(1);
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private async Task RunChecker(ICodexInstance instance)
|
|
|
|
|
|
{
|
|
|
|
|
|
var i = 0;
|
|
|
|
|
|
while (!cts.IsCancellationRequested)
|
|
|
|
|
|
{
|
2024-11-11 13:41:02 +01:00
|
|
|
|
if (app.FolderWorkDispatcher.Revisiting) Thread.Sleep(2000);
|
|
|
|
|
|
else Thread.Sleep(5000);
|
2024-11-01 11:14:07 +01:00
|
|
|
|
|
2024-11-11 13:41:02 +01:00
|
|
|
|
var worker = await ProcessWorkItem(instance);
|
|
|
|
|
|
if (worker.FailureCounter > 5)
|
|
|
|
|
|
{
|
2024-11-26 15:14:31 +01:00
|
|
|
|
throw new Exception("Worker has failure count > 5. Stopping AutoClient...");
|
2024-11-11 13:41:02 +01:00
|
|
|
|
}
|
2024-10-30 11:09:13 +01:00
|
|
|
|
i++;
|
|
|
|
|
|
|
|
|
|
|
|
if (i > 5)
|
|
|
|
|
|
{
|
|
|
|
|
|
i = 0;
|
|
|
|
|
|
var overview = new FolderWorkOverview(app, purchaseInfo, folder);
|
|
|
|
|
|
overview.Update();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-11 13:41:02 +01:00
|
|
|
|
private async Task<FileWorker> ProcessWorkItem(ICodexInstance instance)
|
2024-10-30 11:09:13 +01:00
|
|
|
|
{
|
|
|
|
|
|
var file = app.FolderWorkDispatcher.GetFileToCheck();
|
|
|
|
|
|
var worker = new FileWorker(app, purchaseInfo, folder, file);
|
2024-10-30 14:32:49 +01:00
|
|
|
|
await worker.Update(instance, () =>
|
|
|
|
|
|
{
|
|
|
|
|
|
app.FolderWorkDispatcher.RevisitSoon(file);
|
|
|
|
|
|
});
|
2024-11-11 13:41:02 +01:00
|
|
|
|
|
|
|
|
|
|
return worker;
|
2024-10-30 08:56:31 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void Stop()
|
|
|
|
|
|
{
|
2024-10-30 11:09:13 +01:00
|
|
|
|
cts.Cancel();
|
|
|
|
|
|
checkTask.Wait();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-10-30 08:56:31 +01:00
|
|
|
|
}
|