Aggiornamento alla versione 4.0.0

- Aggiunta proprietà `MaxClicks` per limitare le puntate per asta.
- Migliorata gestione dei log con livelli di severità e colori.
- Sostituzione di `TextBox` con `RichTextBox` per log avanzati.
- Aggiunto pulsante per cancellare il log globale.
- Migliorata gestione dei pulsanti globali (Avvia, Pausa, Ferma).
- Ottimizzato il monitoraggio per aste in pausa e polling ridotto.
- Aggiunto controllo per mettere in pausa aste al raggiungimento di `MaxClicks`.
- Aggiunti nuovi stili per pulsanti e miglioramenti visivi in UI.
- Aggiunto convertitore `StartButtonOpacityConverter`.
- Aggiunta icona dell'applicazione (`app.ico`) come risorsa WPF.
This commit is contained in:
Alberto Balbo
2025-10-24 16:29:08 +02:00
parent 4e16f50aeb
commit 139a9d62b7
8 changed files with 579 additions and 449 deletions
+18 -6
View File
@@ -150,10 +150,10 @@ namespace AutoBidder.Services
lock (_auctions)
{
// Filtra aste che devono ancora essere monitorate
// Esclude: pausa manuale, chiuse definitivamente, vinte, perse
// Include aste attive anche se messe in pausa: vogliamo continuare a monitorarle
// ma non inviare puntate per quelle in pausa.
activeAuctions = _auctions.Where(a =>
a.IsActive &&
!a.IsPaused &&
!IsAuctionTerminated(a)
).ToList();
}
@@ -168,13 +168,13 @@ namespace AutoBidder.Services
var pollTasks = activeAuctions.Select(a => PollAndProcessAuction(a, token));
await Task.WhenAll(pollTasks);
// Ottimizzazione polling aste in pausa
// Ottimizzazione polling per aste in pausa
bool anyPaused = false;
DateTime now = DateTime.Now;
int pauseDelayMs = 1000; // default
foreach (var a in activeAuctions)
{
if (a.BidHistory.LastOrDefault()?.Notes?.Contains("PAUSA") == true)
if (a.IsPaused)
{
anyPaused = true;
// Se tra le 00:00 e le 09:55 polling ogni 60s
@@ -306,8 +306,8 @@ namespace AutoBidder.Services
UpdateAuctionHistory(auction, state);
// Verifica se puntare (solo se asta Running, NON se in pausa)
if (state.Status == AuctionStatus.Running && ShouldBid(auction, state))
{
if (state.Status == AuctionStatus.Running && ShouldBid(auction, state) && !auction.IsPaused)
{
auction.AddLog($"[TRIGGER] CONDIZIONI OK - Timer {state.Timer:F2}s <= {auction.TimerClick}s");
auction.AddLog($"[BID] Invio puntata...");
OnLog?.Invoke($"[BID] [{auction.AuctionId}] PUNTATA a {state.Timer:F2}s!");
@@ -355,6 +355,14 @@ namespace AutoBidder.Services
Success = result.Success,
Notes = result.Success ? $"EUR{result.NewPrice:F2}" : result.Error
});
// Se abbiamo raggiunto il numero massimo di click per l'asta, metti in pausa le puntate (ma continua il monitor)
if (auction.MaxClicks > 0 && auction.MyClicks >= auction.MaxClicks)
{
auction.IsPaused = true;
auction.AddLog($"[PAUSA] Massimo click ({auction.MaxClicks}) raggiunto - Puntate disabilitate");
OnLog?.Invoke($"[PAUSA] [{auction.AuctionId}] MaxClicks raggiunti");
}
}
}
catch (Exception ex)
@@ -385,6 +393,10 @@ namespace AutoBidder.Services
return false;
}
// Max clicks per auction
if (auction.MaxClicks > 0 && auction.MyClicks >= auction.MaxClicks)
return false;
return true;
}