diff --git a/Mimante/Models/AuctionInfo.cs b/Mimante/Models/AuctionInfo.cs index a355e3f..512ea44 100644 --- a/Mimante/Models/AuctionInfo.cs +++ b/Mimante/Models/AuctionInfo.cs @@ -40,10 +40,10 @@ namespace AutoBidder.Models public int MaxResets { get; set; } = 0; // Numero massimo reset (0 = illimitati) /// - /// [OBSOLETO] Numero massimo di puntate consentite - Non piω utilizzato nell'UI - /// Mantenuto per retrocompatibilitΰ con salvataggi JSON esistenti + /// Numero massimo di puntate consentite per questa asta (0 = illimitato). + /// Impostato dall'utente nella griglia statistiche o dai limiti prodotto. + /// Controllato in ShouldBid contro BidsUsedOnThisAuction. /// - [Obsolete("MaxClicks non θ piω utilizzato. Usa invece la logica di limiti per prodotto.")] [JsonPropertyName("MaxClicks")] public int MaxClicks { get; set; } = 0; @@ -107,6 +107,13 @@ namespace AutoBidder.Models [JsonIgnore] public double LastScheduledTimerMs { get; set; } + /// + /// Stato di fine asta ricevuto dal poll ma non ancora processato. + /// Il ticker ha un'ultima occasione di puntare prima che venga gestito. + /// + [JsonIgnore] + public AuctionState? PendingEndState { get; set; } + // Storico public List BidHistory { get; set; } = new List(); public Dictionary BidderStats { get; set; } = new(StringComparer.OrdinalIgnoreCase); @@ -505,6 +512,7 @@ namespace AutoBidder.Models // Pulisci oggetti complessi LastState = null; + PendingEndState = null; CalculatedValue = null; DuelOpponent = null; WinLimitDescription = null; diff --git a/Mimante/Pages/Index.razor.cs b/Mimante/Pages/Index.razor.cs index 6d9037c..2e1ab6b 100644 --- a/Mimante/Pages/Index.razor.cs +++ b/Mimante/Pages/Index.razor.cs @@ -102,7 +102,6 @@ namespace AutoBidder.Pages private string? sessionUsername; private int sessionRemainingBids; private double sessionShopCredit; - private int sessionAuctionsWon; // Recommended limits private bool isLoadingRecommendations = false; @@ -530,6 +529,7 @@ namespace AutoBidder.Pages // Carica limiti dal database prodotti se disponibili double minPrice = settings.DefaultMinPrice; double maxPrice = settings.DefaultMaxPrice; + int maxClicks = settings.DefaultMaxClicks; int bidDeadlineMs = settings.DefaultBidBeforeDeadlineMs; // Se abilitato, cerca limiti salvati per questo prodotto @@ -551,10 +551,12 @@ namespace AutoBidder.Pages minPrice = productStats.UserDefaultMinPrice.Value; if (productStats.UserDefaultMaxPrice.HasValue) maxPrice = productStats.UserDefaultMaxPrice.Value; + if (productStats.UserDefaultMaxBids.HasValue) + maxClicks = productStats.UserDefaultMaxBids.Value; if (productStats.UserDefaultBidBeforeDeadlineMs.HasValue) bidDeadlineMs = productStats.UserDefaultBidBeforeDeadlineMs.Value; - AddLog($"[STATS] Limiti prodotto (da URL): €{minPrice:F2}-€{maxPrice:F2}"); + AddLog($"[STATS] Limiti prodotto (da URL): €{minPrice:F2}-€{maxPrice:F2}, MaxClicks={maxClicks}"); } } catch (Exception ex) @@ -573,6 +575,7 @@ namespace AutoBidder.Pages CheckAuctionOpenBeforeBid = settings.DefaultCheckAuctionOpenBeforeBid, MinPrice = minPrice, MaxPrice = maxPrice, + MaxClicks = maxClicks, IsActive = isActive, IsPaused = isPaused }; @@ -675,7 +678,7 @@ namespace AutoBidder.Pages } // 3. Cerca limiti prodotto dal database con il nome REALE - if (updated && !string.IsNullOrWhiteSpace(auction.Name)) + if (!string.IsNullOrWhiteSpace(auction.Name)) { var settings = AutoBidder.Utilities.SettingsManager.Load(); if (settings.NewAuctionLimitsPriority == "ProductStats" && StatsService.IsAvailable) @@ -1543,7 +1546,6 @@ namespace AutoBidder.Pages sessionUsername = savedSession.Username; sessionRemainingBids = savedSession.RemainingBids; sessionShopCredit = savedSession.ShopCredit; - sessionAuctionsWon = 0; // TODO: add to BidooSession model // Inizializza AuctionMonitor con la sessione salvata if (!string.IsNullOrEmpty(savedSession.CookieString)) @@ -1557,7 +1559,6 @@ namespace AutoBidder.Pages sessionUsername = session?.Username; sessionRemainingBids = session?.RemainingBids ?? 0; sessionShopCredit = session?.ShopCredit ?? 0; - sessionAuctionsWon = 0; } } @@ -1574,7 +1575,6 @@ namespace AutoBidder.Pages sessionUsername = session.Username; sessionRemainingBids = session.RemainingBids; sessionShopCredit = session.ShopCredit; - sessionAuctionsWon = 0; // TODO: add to BidooSession model // Salva sessione aggiornata AutoBidder.Services.SessionManager.SaveSession(session); diff --git a/Mimante/Pages/Statistics.razor b/Mimante/Pages/Statistics.razor index 3e3632a..6add965 100644 --- a/Mimante/Pages/Statistics.razor +++ b/Mimante/Pages/Statistics.razor @@ -1,4 +1,4 @@ -@page "/statistics" +ο»Ώ@page "/statistics" @attribute [Microsoft.AspNetCore.Authorization.Authorize] @using AutoBidder.Models @using AutoBidder.Services @@ -39,7 +39,7 @@
Statistiche non disponibili - Il database non θ stato configurato o non θ accessibile. + Il database non Γ¨ stato configurato o non Γ¨ accessibile.
} @@ -68,6 +68,34 @@ +
+ Azioni su @(filteredProducts?.Count ?? 0) prodotti visibili: + + + + + +
@if (filteredProducts == null || !filteredProducts.Any()) { @@ -94,20 +122,20 @@ Win% @GetProductSortIndicator("winrate") - € Min @GetProductSortIndicator("minprice") + € Min @GetProductSortIndicator("minprice") - € Med @GetProductSortIndicator("avgprice") + € Med @GetProductSortIndicator("avgprice") - € Mdn @GetProductSortIndicator("medianprice") + € Mdn @GetProductSortIndicator("medianprice") - € Max @GetProductSortIndicator("maxprice") + € Max @GetProductSortIndicator("maxprice") On - Min € - Max € + Min € + Max € Max Punt. Azioni @@ -129,16 +157,16 @@ @winRate.ToString("F0")% - €@(product.MinFinalPrice?.ToString("F2") ?? "-") + €@(product.MinFinalPrice?.ToString("F2") ?? "-") - €@product.AvgFinalPrice.ToString("F2") + €@product.AvgFinalPrice.ToString("F2") - €@(product.MedianFinalPrice?.ToString("F2") ?? "-") + €@(product.MedianFinalPrice?.ToString("F2") ?? "-") - €@(product.MaxFinalPrice?.ToString("F2") ?? "-") + €@(product.MaxFinalPrice?.ToString("F2") ?? "-")