87 lines
2.5 KiB
C#
Raw Normal View History

2024-11-26 15:14:31 +01:00
using AutoClient.Modes.FolderStore;
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;
}
2025-01-16 15:13:16 +01:00
public void Start(CodexWrapper instance, int index)
{
2025-01-16 15:13:16 +01:00
checkTask = Task.Run(() =>
2024-10-30 11:09:13 +01:00
{
try
{
2025-01-16 15:13:16 +01:00
RunChecker(instance);
2024-10-30 11:09:13 +01:00
}
catch (Exception ex)
{
app.Log.Error("Exception in FolderStoreMode worker: " + ex);
Environment.Exit(1);
}
});
}
2025-01-16 15:13:16 +01:00
private void RunChecker(CodexWrapper instance)
2024-10-30 11:09:13 +01:00
{
var i = 0;
while (!cts.IsCancellationRequested)
{
2024-11-26 15:57:34 +01:00
Thread.Sleep(2000);
2025-01-16 15:13:16 +01:00
var worker = ProcessWorkItem(instance);
2024-11-11 13:41:02 +01:00
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);
2025-01-16 15:13:16 +01:00
overview.Update(instance);
2024-10-30 11:09:13 +01:00
}
}
}
2025-01-16 15:13:16 +01:00
private FileWorker ProcessWorkItem(CodexWrapper instance)
2024-10-30 11:09:13 +01:00
{
var file = app.FolderWorkDispatcher.GetFileToCheck();
var worker = new FileWorker(app, instance, purchaseInfo, folder, file, OnFileUploaded, OnNewPurchase);
2025-01-16 15:13:16 +01:00
worker.Update();
if (worker.IsBusy()) app.FolderWorkDispatcher.WorkerIsBusy();
2024-11-11 13:41:02 +01:00
return worker;
}
private void OnFileUploaded()
{
}
2024-11-26 15:57:34 +01:00
private void OnNewPurchase()
{
app.FolderWorkDispatcher.ResetIndex();
var overview = new FolderWorkOverview(app, purchaseInfo, folder);
overview.MarkUncommitedChange();
2024-11-26 15:57:34 +01:00
}
public void Stop()
{
2024-10-30 11:09:13 +01:00
cts.Cancel();
checkTask.Wait();
}
}
}