From df9b63dd41b5c904d4ba61435c4f0959c290baca Mon Sep 17 00:00:00 2001 From: Alberto Balbo Date: Wed, 26 Nov 2025 20:52:48 +0100 Subject: [PATCH] Aggiunta opzione "Ricorda Stato" per le aste salvate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit È stata introdotta l'opzione "Ricorda Stato" che consente di ripristinare lo stato esatto (attiva, in pausa, ferma) di ogni asta salvata al caricamento. - Aggiunto il `RadioButton` "Ricorda Stato" in `SettingsControl.xaml`. - Gestita la nuova opzione in `MainWindow.EventHandlers.Settings.cs`. - Aggiornata la logica di caricamento in `AuctionManagement.cs` per supportare "Ricorda Stato". - Introdotto il salvataggio automatico dello stato delle aste in `ButtonHandlers.cs` e `Commands.cs`. - Migliorati i log per riflettere il comportamento del sistema. - Aggiunta la proprietà `RememberAuctionStates` in `SettingsManager` con valore predefinito `false`. - Migliorata la leggibilità e manutenibilità del codice. Queste modifiche migliorano la flessibilità e l'esperienza utente, garantendo coerenza dei dati e maggiore chiarezza nei log. --- Mimante/Controls/SettingsControl.xaml | 8 +- .../MainWindow.EventHandlers.Settings.cs | 51 ++++++++---- Mimante/Core/MainWindow.AuctionManagement.cs | 77 ++++++++++++------- Mimante/Core/MainWindow.ButtonHandlers.cs | 7 ++ Mimante/Core/MainWindow.Commands.cs | 7 ++ Mimante/Utilities/SettingsManager.cs | 7 ++ 6 files changed, 116 insertions(+), 41 deletions(-) diff --git a/Mimante/Controls/SettingsControl.xaml b/Mimante/Controls/SettingsControl.xaml index b2c8f90..92bd06b 100644 --- a/Mimante/Controls/SettingsControl.xaml +++ b/Mimante/Controls/SettingsControl.xaml @@ -244,6 +244,10 @@ Content="Attive" GroupName="LoadState" ToolTip="Le aste salvate verranno avviate automaticamente all'apertura"/> + @@ -280,8 +284,10 @@ • Fermata: L'asta non viene monitorata fino all'avvio manuale. • In Pausa: L'asta è pronta ma non punta automaticamente (utile per preparare le aste). • Attiva: L'asta viene monitorata e punta automaticamente quando necessario. + • Ricorda Stato: Ogni asta ripristina lo stato esatto che aveva alla chiusura (SOVRASCRIVE le altre opzioni). - Consiglio: Usa "Fermata" per caricare le aste senza avviarle, poi avvia manualmente quelle desiderate. + Consiglio: Usa "Fermata" per caricare le aste senza avviarle, poi avvia manualmente quelle desiderate. + Usa "Ricorda Stato" per riprendere esattamente da dove avevi lasciato. diff --git a/Mimante/Core/EventHandlers/MainWindow.EventHandlers.Settings.cs b/Mimante/Core/EventHandlers/MainWindow.EventHandlers.Settings.cs index 02c772f..ee84b9b 100644 --- a/Mimante/Core/EventHandlers/MainWindow.EventHandlers.Settings.cs +++ b/Mimante/Core/EventHandlers/MainWindow.EventHandlers.Settings.cs @@ -40,18 +40,27 @@ namespace AutoBidder UpdateMinBidsIndicator(settings.MinimumRemainingBids); // Carica stato iniziale aste - switch (settings.DefaultStartAuctionsOnLoad) + // ? NUOVO: Se RememberAuctionStates è attivo, seleziona "Ricorda Stato" + if (settings.RememberAuctionStates) { - case "Active": - Settings.LoadAuctionsActive.IsChecked = true; - break; - case "Paused": - Settings.LoadAuctionsPaused.IsChecked = true; - break; - case "Stopped": - default: - Settings.LoadAuctionsStopped.IsChecked = true; - break; + Settings.LoadAuctionsRemember.IsChecked = true; + } + else + { + // Altrimenti usa DefaultStartAuctionsOnLoad + switch (settings.DefaultStartAuctionsOnLoad) + { + case "Active": + Settings.LoadAuctionsActive.IsChecked = true; + break; + case "Paused": + Settings.LoadAuctionsPaused.IsChecked = true; + break; + case "Stopped": + default: + Settings.LoadAuctionsStopped.IsChecked = true; + break; + } } switch (settings.DefaultNewAuctionState) @@ -231,12 +240,26 @@ namespace AutoBidder } // === SEZIONE DEFAULTS: Stati Iniziali Aste === + var loadAuctionsRemember = Settings.FindName("LoadAuctionsRemember") as System.Windows.Controls.RadioButton; var loadAuctionsActive = Settings.FindName("LoadAuctionsActive") as System.Windows.Controls.RadioButton; var loadAuctionsPaused = Settings.FindName("LoadAuctionsPaused") as System.Windows.Controls.RadioButton; - settings.DefaultStartAuctionsOnLoad = loadAuctionsActive?.IsChecked == true ? "Active" : - loadAuctionsPaused?.IsChecked == true ? "Paused" : - "Stopped"; + // ? NUOVO: Gestione "Ricorda Stato" + if (loadAuctionsRemember?.IsChecked == true) + { + // Attiva RememberAuctionStates + settings.RememberAuctionStates = true; + // DefaultStartAuctionsOnLoad diventa irrilevante, ma lo lasciamo a "Stopped" per compatibilità + settings.DefaultStartAuctionsOnLoad = "Stopped"; + } + else + { + // Disattiva RememberAuctionStates e usa DefaultStartAuctionsOnLoad + settings.RememberAuctionStates = false; + settings.DefaultStartAuctionsOnLoad = loadAuctionsActive?.IsChecked == true ? "Active" : + loadAuctionsPaused?.IsChecked == true ? "Paused" : + "Stopped"; + } var newAuctionActive = Settings.FindName("NewAuctionActive") as System.Windows.Controls.RadioButton; var newAuctionPaused = Settings.FindName("NewAuctionPaused") as System.Windows.Controls.RadioButton; diff --git a/Mimante/Core/MainWindow.AuctionManagement.cs b/Mimante/Core/MainWindow.AuctionManagement.cs index 7bcf868..0949c21 100644 --- a/Mimante/Core/MainWindow.AuctionManagement.cs +++ b/Mimante/Core/MainWindow.AuctionManagement.cs @@ -256,11 +256,10 @@ namespace AutoBidder { try { - // ? Carica impostazioni per determinare lo stato iniziale delle aste + // ? Carica impostazioni var settings = Utilities.SettingsManager.Load(); - var loadState = settings.DefaultStartAuctionsOnLoad; // "Active", "Paused", "Stopped" - // Ottieni username corrente dalla sessione per riprist inare IsMyBid + // Ottieni username corrente dalla sessione per ripristinare IsMyBid var session = _auctionMonitor.GetSession(); var currentUsername = session?.Username ?? string.Empty; @@ -273,7 +272,7 @@ namespace AutoBidder // Decode HTML entities try { auction.Name = System.Net.WebUtility.HtmlDecode(auction.Name ?? string.Empty); } catch { } - // ? NUOVO: Ripristina IsMyBid per tutte le puntate in RecentBids + // ? Ripristina IsMyBid per tutte le puntate in RecentBids if (auction.RecentBids != null && auction.RecentBids.Count > 0 && !string.IsNullOrEmpty(currentUsername)) { foreach (var bid in auction.RecentBids) @@ -282,22 +281,32 @@ namespace AutoBidder } } - // ? Applica stato iniziale configurato dall'utente - switch (loadState) + // ? NUOVO: Gestione stato in base a RememberAuctionStates + if (settings.RememberAuctionStates) { - case "Active": - auction.IsActive = true; - auction.IsPaused = false; - break; - case "Paused": - auction.IsActive = true; - auction.IsPaused = true; - break; - case "Stopped": - default: - auction.IsActive = false; - auction.IsPaused = false; - break; + // MODO 1: Ripristina lo stato salvato di ogni asta (IsActive e IsPaused vengono dal file salvato) + // Non serve fare nulla, lo stato è già quello salvato nel file + } + else + { + // MODO 2: Applica DefaultStartAuctionsOnLoad a tutte le aste + var loadState = settings.DefaultStartAuctionsOnLoad; + switch (loadState) + { + case "Active": + auction.IsActive = true; + auction.IsPaused = false; + break; + case "Paused": + auction.IsActive = true; + auction.IsPaused = true; + break; + case "Stopped": + default: + auction.IsActive = false; + auction.IsPaused = false; + break; + } } _auctionMonitor.AddAuction(auction); @@ -305,8 +314,7 @@ namespace AutoBidder _auctionViewModels.Add(vm); } - // ? FIX: Avvia monitoraggio se ci sono aste in stato Active O Paused - // (Paused = IsActive=true ma IsPaused=true, quindi vanno monitorate) + // ? Avvia monitoraggio se ci sono aste in stato Active O Paused bool hasActiveOrPausedAuctions = auctions.Any(a => a.IsActive); if (hasActiveOrPausedAuctions && auctions.Count > 0) @@ -314,13 +322,23 @@ namespace AutoBidder _auctionMonitor.Start(); _isAutomationActive = true; - if (loadState == "Active") + if (settings.RememberAuctionStates) { - Log($"[AUTO-START] Monitoraggio avviato automaticamente per {auctions.Count} aste caricate in stato attivo", LogLevel.Info); + var activeCount = auctions.Count(a => a.IsActive && !a.IsPaused); + var pausedCount = auctions.Count(a => a.IsActive && a.IsPaused); + Log($"[AUTO-START] Monitoraggio avviato: {activeCount} attive, {pausedCount} in pausa (stati ripristinati)", LogLevel.Info); } - else if (loadState == "Paused") + else { - Log($"[AUTO-START] Monitoraggio avviato automaticamente per {auctions.Count} aste caricate in pausa", LogLevel.Info); + var loadState = settings.DefaultStartAuctionsOnLoad; + if (loadState == "Active") + { + Log($"[AUTO-START] Monitoraggio avviato automaticamente per {auctions.Count} aste caricate in stato attivo", LogLevel.Info); + } + else if (loadState == "Paused") + { + Log($"[AUTO-START] Monitoraggio avviato automaticamente per {auctions.Count} aste caricate in pausa", LogLevel.Info); + } } } @@ -330,7 +348,14 @@ namespace AutoBidder // Log sempre mostrato (anche con 0 aste) if (auctions.Count > 0) { - Log($"[LOAD] {auctions.Count} aste caricate con stato iniziale: {loadState}", LogLevel.Info); + if (settings.RememberAuctionStates) + { + Log($"[LOAD] {auctions.Count} aste caricate con stati individuali ripristinati", LogLevel.Info); + } + else + { + Log($"[LOAD] {auctions.Count} aste caricate con stato iniziale: {settings.DefaultStartAuctionsOnLoad}", LogLevel.Info); + } } else { diff --git a/Mimante/Core/MainWindow.ButtonHandlers.cs b/Mimante/Core/MainWindow.ButtonHandlers.cs index 983588b..6e5f18a 100644 --- a/Mimante/Core/MainWindow.ButtonHandlers.cs +++ b/Mimante/Core/MainWindow.ButtonHandlers.cs @@ -41,6 +41,8 @@ namespace AutoBidder Log("[START ALL] Tutte le aste avviate/riprese", LogLevel.Info); } + // ✅ Salva gli stati aggiornati su disco + SaveAuctions(); UpdateGlobalControlButtons(); } catch (Exception ex) @@ -67,6 +69,8 @@ namespace AutoBidder _isAutomationActive = false; } + // ✅ Salva gli stati aggiornati su disco + SaveAuctions(); UpdateGlobalControlButtons(); if (sender != null) // Solo se chiamato dall'utente @@ -88,6 +92,9 @@ namespace AutoBidder { vm.IsPaused = true; } + + // ✅ Salva gli stati aggiornati su disco + SaveAuctions(); UpdateGlobalControlButtons(); if (sender != null) // Solo se chiamato dall'utente diff --git a/Mimante/Core/MainWindow.Commands.cs b/Mimante/Core/MainWindow.Commands.cs index fcb11e1..fb0c73d 100644 --- a/Mimante/Core/MainWindow.Commands.cs +++ b/Mimante/Core/MainWindow.Commands.cs @@ -58,6 +58,8 @@ namespace AutoBidder Log($"[START] Asta avviata: {vm.Name}", LogLevel.Info); } + // ? Salva gli stati aggiornati su disco + SaveAuctions(); UpdateGlobalControlButtons(); } @@ -66,6 +68,9 @@ namespace AutoBidder if (vm == null) return; vm.IsPaused = true; Log($"[PAUSA] Asta in pausa: {vm.Name}", LogLevel.Info); + + // ? Salva gli stati aggiornati su disco + SaveAuctions(); UpdateGlobalControlButtons(); } @@ -87,6 +92,8 @@ namespace AutoBidder Log($"[STOP] Asta fermata: {vm.Name}", LogLevel.Info); } + // ? Salva gli stati aggiornati su disco + SaveAuctions(); UpdateGlobalControlButtons(); } diff --git a/Mimante/Utilities/SettingsManager.cs b/Mimante/Utilities/SettingsManager.cs index e200e10..f50d6ee 100644 --- a/Mimante/Utilities/SettingsManager.cs +++ b/Mimante/Utilities/SettingsManager.cs @@ -52,6 +52,13 @@ namespace AutoBidder.Utilities /// public string DefaultNewAuctionState { get; set; } = "Stopped"; + /// + /// Se TRUE, salva e ripristina lo stato effettivo (attiva/pausa/ferma) di ogni asta. + /// Se FALSE, applica DefaultStartAuctionsOnLoad a tutte le aste al caricamento. + /// Default: false (usa DefaultStartAuctionsOnLoad) + /// + public bool RememberAuctionStates { get; set; } = false; + // ? NUOVO: LIMITE MINIMO PUNTATE /// /// Numero minimo di puntate residue da mantenere sull'account.