Migliorie UI, log aste, strategie e statistiche puntatori
- Ordinamento colonne griglia aste e indicatori visivi - Nuovo pulsante per rimozione rapida aste terminate - Log aste con deduplicazione e contatore - Statistiche puntatori cumulative e più affidabili - Cronologia puntate senza duplicati consecutivi - Strategie di puntata semplificate: entry point, anti-bot, user exhaustion - UI più compatta, hover moderni, evidenziazione puntate utente - Correzioni internazionalizzazione e pulizia codice
This commit is contained in:
@@ -128,20 +128,56 @@ namespace AutoBidder.Models
|
||||
[JsonIgnore]
|
||||
public AuctionState? LastState { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Aggiunge una voce al log dell'asta con limite automatico di righe
|
||||
/// Aggiunge una voce al log dell'asta con deduplicazione e limite automatico di righe.
|
||||
/// Se il messaggio è identico all'ultimo, incrementa un contatore invece di duplicare.
|
||||
/// </summary>
|
||||
/// <param name="message">Messaggio da aggiungere al log</param>
|
||||
/// <param name="maxLines">Numero massimo di righe da mantenere (default: 500)</param>
|
||||
public void AddLog(string message, int maxLines = 500)
|
||||
{
|
||||
var entry = $"{DateTime.Now:HH:mm:ss.fff} - {message}";
|
||||
var timestamp = DateTime.Now.ToString("HH:mm:ss.fff");
|
||||
|
||||
// ?? DEDUPLICAZIONE: Se l'ultimo messaggio è uguale, incrementa contatore
|
||||
if (AuctionLog.Count > 0)
|
||||
{
|
||||
var lastEntry = AuctionLog[^1]; // Ultimo elemento
|
||||
|
||||
// Estrai il messaggio senza timestamp e contatore
|
||||
var lastMessageStart = lastEntry.IndexOf(" - ");
|
||||
if (lastMessageStart > 0)
|
||||
{
|
||||
var lastMessage = lastEntry.Substring(lastMessageStart + 3);
|
||||
|
||||
// Rimuovi eventuale contatore esistente (es: " (x5)")
|
||||
var counterMatch = System.Text.RegularExpressions.Regex.Match(lastMessage, @" \(x(\d+)\)$");
|
||||
if (counterMatch.Success)
|
||||
{
|
||||
lastMessage = lastMessage.Substring(0, lastMessage.Length - counterMatch.Length);
|
||||
}
|
||||
|
||||
// Se il messaggio è identico, aggiorna contatore
|
||||
if (lastMessage == message)
|
||||
{
|
||||
int newCount = counterMatch.Success
|
||||
? int.Parse(counterMatch.Groups[1].Value) + 1
|
||||
: 2;
|
||||
|
||||
// Aggiorna l'ultimo entry con il nuovo contatore
|
||||
AuctionLog[^1] = $"{timestamp} - {message} (x{newCount})";
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Nuovo messaggio diverso dall'ultimo
|
||||
var entry = $"{timestamp} - {message}";
|
||||
AuctionLog.Add(entry);
|
||||
|
||||
// Mantieni solo gli ultimi maxLines log
|
||||
if (AuctionLog.Count > maxLines)
|
||||
{
|
||||
// Rimuovi i log più vecchi per mantenere la dimensione sotto controllo
|
||||
int excessCount = AuctionLog.Count - maxLines;
|
||||
AuctionLog.RemoveRange(0, excessCount);
|
||||
}
|
||||
|
||||
@@ -3,12 +3,25 @@ using System;
|
||||
namespace AutoBidder.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// Informazioni su un utente che ha piazzato puntate
|
||||
/// Informazioni su un utente che ha piazzato puntate.
|
||||
/// Il conteggio è CUMULATIVO dall'inizio del monitoraggio (non limitato come RecentBids).
|
||||
/// </summary>
|
||||
public class BidderInfo
|
||||
{
|
||||
public string Username { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Conteggio CUMULATIVO delle puntate dall'inizio del monitoraggio.
|
||||
/// Questo valore non viene mai decrementato anche se RecentBids viene troncato.
|
||||
/// </summary>
|
||||
public int BidCount { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Conteggio puntate visibili nell'attuale finestra RecentBids (per UI).
|
||||
/// Può essere inferiore a BidCount se RecentBids è stato troncato.
|
||||
/// </summary>
|
||||
public int RecentBidCount { get; set; } = 0;
|
||||
|
||||
public DateTime LastBidTime { get; set; } = DateTime.MinValue;
|
||||
|
||||
public string LastBidTimeDisplay => LastBidTime == DateTime.MinValue
|
||||
|
||||
Reference in New Issue
Block a user