2025-05-02 08:21:56 +02:00
|
|
|
|
namespace AutoClient.Modes.FolderStore
|
|
|
|
|
|
{
|
|
|
|
|
|
public class SlowModeHandler : IFileSaverResultHandler
|
|
|
|
|
|
{
|
|
|
|
|
|
private readonly App app;
|
|
|
|
|
|
private int failureCount = 0;
|
2025-06-20 10:39:01 +02:00
|
|
|
|
private bool slowMode = true;
|
2025-05-02 08:21:56 +02:00
|
|
|
|
private int recoveryCount = 0;
|
2025-06-09 09:56:38 +02:00
|
|
|
|
private readonly object _lock = new object();
|
2025-05-02 08:21:56 +02:00
|
|
|
|
|
|
|
|
|
|
public SlowModeHandler(App app)
|
|
|
|
|
|
{
|
|
|
|
|
|
this.app = app;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void OnSuccess()
|
|
|
|
|
|
{
|
|
|
|
|
|
failureCount = 0;
|
|
|
|
|
|
if (slowMode)
|
|
|
|
|
|
{
|
|
|
|
|
|
recoveryCount++;
|
2025-06-09 09:56:38 +02:00
|
|
|
|
Log("Recovering from slow mode: " + recoveryCount);
|
|
|
|
|
|
if (recoveryCount > 3)
|
2025-05-02 08:21:56 +02:00
|
|
|
|
{
|
|
|
|
|
|
Log("Recovery limit reached. Exiting slow mode.");
|
|
|
|
|
|
slowMode = false;
|
|
|
|
|
|
failureCount = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-06-06 07:48:59 +02:00
|
|
|
|
|
|
|
|
|
|
Check();
|
2025-05-02 08:21:56 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void OnFailure()
|
|
|
|
|
|
{
|
|
|
|
|
|
failureCount++;
|
2025-06-09 09:56:38 +02:00
|
|
|
|
Log("Failing towards slow mode: " + failureCount);
|
|
|
|
|
|
if (failureCount > 3 && !slowMode)
|
2025-05-02 08:21:56 +02:00
|
|
|
|
{
|
|
|
|
|
|
Log("Failure limit reached. Entering slow mode.");
|
|
|
|
|
|
slowMode = true;
|
|
|
|
|
|
recoveryCount = 0;
|
|
|
|
|
|
}
|
2025-06-06 07:48:59 +02:00
|
|
|
|
|
|
|
|
|
|
Check();
|
2025-05-02 08:21:56 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-06-06 07:48:59 +02:00
|
|
|
|
private void Check()
|
2025-05-02 08:21:56 +02:00
|
|
|
|
{
|
|
|
|
|
|
if (slowMode)
|
|
|
|
|
|
{
|
2025-06-09 09:56:38 +02:00
|
|
|
|
lock (_lock)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!slowMode) return;
|
|
|
|
|
|
Thread.Sleep(TimeSpan.FromMinutes(app.Config.SlowModeDelayMinutes));
|
|
|
|
|
|
}
|
2025-05-02 08:21:56 +02:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void Log(string msg)
|
|
|
|
|
|
{
|
|
|
|
|
|
app.Log.Log(msg);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|