Due database, interruttore dell'apprendimento, barre a icone; via kill-switch, esportazioni e voci deprecate
Tutto ciò che l'applicazione registra sta ora in due file SQLite in %LocalAppData%\AutoBidder\Database: autobidder.sqlite per le osservazioni e esercizio.sqlite per i documenti d'esercizio (aste nel monitor, prodotti, promozioni, modelli appresi con prefisso ml/) e per i registri applicativo e del riscatto puntate. Il motore comune è SqliteDatabase; i file JSON e la cartella Apprendimento delle versioni precedenti vengono importati la prima volta e lasciati dove sono. La cartella si cambia dalle Impostazioni: al salvataggio si chiede se spostare i file, e si riavvia. Le cartelle Dati/Statistiche/Registri, i registri su file, le misure dell'anticipo e le impostazioni morte (LogBids, AutoApplyProductDefaults, NewAuctionLimitsPriority…) non esistono più. Il kill-switch se ne va: al suo posto un solo interruttore in barra, accanto ad Avvia/Osserva/Ferma, che spegne l'apprendimento. Spento, il motore punta solo entro i limiti dell'utente (prezzo, puntate, budget, fascia oraria, rischio) con l'anticipo fisso: niente valore atteso, regime, duello, bandit, anticipo adattivo. Le aste vengono comunque registrate e studiate. Tre difetti visti osservando il motore dal vivo per un'ora, in Osserva: - la copertura «Compralo Ora» con V lasciato al listino azzerava la perdita coperta e il motore diceva BID a ogni scadenza con P dell'1%: ora vale solo per i prodotti con «Valore reale €» scritto, altrimenti la puntata si conta persa e P decide; - la chiusura di un'asta arrivava due volte (fine, poi rimozione dal monitor) e di nuovo al riavvio: modello, profilo, bandit e statistiche per prodotto contavano ogni asta due volte. Il monitor la comunica una volta sola, l'apprendimento salta le aste già apprese, e le schede prodotto vengono ricostruite una volta dallo storico; - la pagina delle ricompense veniva scambiata per la pagina di accesso perché porta un collegamento a /login.php: prima si guarda se è la pagina delle ricompense. Interfaccia: la scheda Esporta e tutto il suo codice sono tolti; le esportazioni chiedono sempre dove salvare. Prodotti, Storico e Apprendimento hanno barre a sole icone con tooltip che dicono esattamente cosa succede, colorate come il monitor, con i nuovi pulsanti di pulizia (spegni tutte le stelline, togli i non seguiti, pulizia completa; seleziona tutte / elimina le selezionate / svuota lo storico). Impostazioni: sezione Database, Manutenzione con «Elimina tutti i dati (tranne la login)» e «Impostazioni di fabbrica», esportazione dei registri in testo. Modifiche.txt, il prompt ormai realizzato, esce dal repository. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -84,10 +84,7 @@ namespace AutoBidder
|
||||
Settings.CatalogMaxAuctionsTextBox.Text = settings.CatalogMaxAuctions.ToString();
|
||||
Settings.CatalogAutoRefreshCheckBox.IsChecked = settings.CatalogAutoRefresh;
|
||||
|
||||
// Anticipo, aste programmate, notifiche, cartelle
|
||||
Settings.BidLeadTrackingCheckBox.IsChecked = settings.BidLeadTrackingEnabled;
|
||||
Settings.BidLeadMinSamplesTextBox.Text = settings.BidLeadMinSamples.ToString();
|
||||
|
||||
// Aste programmate, notifiche, cartelle
|
||||
Settings.ScheduledBackoffCheckBox.IsChecked = settings.ScheduledAuctionBackoffEnabled;
|
||||
Settings.ScheduledPollFarTextBox.Text = settings.ScheduledPollFarSeconds.ToString();
|
||||
Settings.ScheduledPollMidTextBox.Text = settings.ScheduledPollMidSeconds.ToString();
|
||||
@@ -112,12 +109,12 @@ namespace AutoBidder
|
||||
Settings.AutoRemoveKeepWonCheckBox.IsChecked = settings.AutoRemoveKeepWon;
|
||||
Settings.AutoRemoveKeepUnclearCheckBox.IsChecked = settings.AutoRemoveKeepUnclear;
|
||||
|
||||
Settings.WriteAppLogCheckBox.IsChecked = settings.WriteAppLogFile;
|
||||
Settings.WriteFreeBidsLogCheckBox.IsChecked = settings.WriteFreeBidsLogFile;
|
||||
Settings.WriteDossiersCheckBox.IsChecked = settings.WriteAuctionDossiers;
|
||||
Settings.RawPollsCheckBox.IsChecked = settings.DossierIncludeRawPolls;
|
||||
Settings.WriteAppLogCheckBox.IsChecked = settings.WriteAppLog;
|
||||
Settings.WriteFreeBidsLogCheckBox.IsChecked = settings.WriteFreeBidsLog;
|
||||
Settings.WriteDossiersCheckBox.IsChecked = settings.RecordAuctions;
|
||||
Settings.RawPollsCheckBox.IsChecked = settings.RecordPolls;
|
||||
Settings.LogRetentionTextBox.Text = settings.LogRetentionDays.ToString();
|
||||
Settings.DatabaseFileTextBox.Text = AppPaths.DatabaseFile;
|
||||
Settings.DatabaseFolderTextBox.Text = AppPaths.DatabaseFolder;
|
||||
|
||||
Settings.BankrollEnabledCheckBox.IsChecked = settings.BankrollManagerEnabled;
|
||||
Settings.MaxBidsPerAuctionTextBox.Text = settings.MaxBidsPerAuction.ToString();
|
||||
@@ -130,8 +127,6 @@ namespace AutoBidder
|
||||
Settings.HedgeCheckBox.IsChecked = settings.BuyNowHedgeEnabled;
|
||||
Settings.RefreshRiskStatus();
|
||||
|
||||
RefreshBidLeadSummary();
|
||||
|
||||
// Aggiorna indicatore visivo
|
||||
UpdateMinBidsIndicator(settings.MinimumRemainingBids);
|
||||
|
||||
@@ -403,11 +398,6 @@ namespace AutoBidder
|
||||
settings.CatalogCacheSeconds = ReadBounded(Settings.CatalogCacheSecondsTextBox.Text,
|
||||
settings.CatalogCacheSeconds, 0, 3600, "cache catalogo", " s");
|
||||
|
||||
// === SEZIONE: Anticipo puntata ===
|
||||
settings.BidLeadTrackingEnabled = Settings.BidLeadTrackingCheckBox.IsChecked ?? true;
|
||||
settings.BidLeadMinSamples = ReadBounded(Settings.BidLeadMinSamplesTextBox.Text,
|
||||
settings.BidLeadMinSamples, 5, 500, "puntate minime per il consiglio", "");
|
||||
|
||||
// === SEZIONE: Aste programmate ===
|
||||
settings.ScheduledAuctionBackoffEnabled = Settings.ScheduledBackoffCheckBox.IsChecked ?? true;
|
||||
settings.ScheduledPollFarSeconds = ReadBounded(Settings.ScheduledPollFarTextBox.Text,
|
||||
@@ -422,15 +412,7 @@ namespace AutoBidder
|
||||
settings.NotifyOnLoss = Settings.NotifyOnLossCheckBox.IsChecked ?? false;
|
||||
|
||||
// === SEZIONE: Cartelle dei dati ===
|
||||
var previousData = AppPaths.DataFolder;
|
||||
var previousStats = AppPaths.StatsFolder;
|
||||
|
||||
// Il campo contiene il percorso risolto: se coincide con il predefinito si
|
||||
// salva vuoto, così spostando la cartella dati i registri la seguono invece
|
||||
// di restare inchiodati a un percorso che nessuno ha mai scelto davvero.
|
||||
settings.DataFolder = NormalizeFolderChoice(Settings.DataFolderTextBox.Text, AppPaths.DataFolder, settings.DataFolder);
|
||||
settings.StatsFolder = NormalizeFolderChoice(Settings.StatsFolderTextBox.Text, AppPaths.StatsFolder, settings.StatsFolder);
|
||||
settings.LogFolder = NormalizeFolderChoice(Settings.LogFolderTextBox.Text, AppPaths.LogFolder, settings.LogFolder);
|
||||
var previousDatabaseFolder = AppPaths.DatabaseFolder;
|
||||
|
||||
|
||||
settings.QuietHoursEnabled = Settings.QuietHoursCheckBox.IsChecked ?? true;
|
||||
@@ -444,18 +426,15 @@ namespace AutoBidder
|
||||
settings.AutoRemoveKeepWon = Settings.AutoRemoveKeepWonCheckBox.IsChecked ?? true;
|
||||
settings.AutoRemoveKeepUnclear = Settings.AutoRemoveKeepUnclearCheckBox.IsChecked ?? true;
|
||||
|
||||
settings.WriteAppLogFile = Settings.WriteAppLogCheckBox.IsChecked ?? true;
|
||||
settings.WriteFreeBidsLogFile = Settings.WriteFreeBidsLogCheckBox.IsChecked ?? true;
|
||||
settings.WriteAuctionDossiers = Settings.WriteDossiersCheckBox.IsChecked ?? true;
|
||||
settings.DossierIncludeRawPolls = Settings.RawPollsCheckBox.IsChecked ?? true;
|
||||
settings.WriteAppLog = Settings.WriteAppLogCheckBox.IsChecked ?? true;
|
||||
settings.WriteFreeBidsLog = Settings.WriteFreeBidsLogCheckBox.IsChecked ?? true;
|
||||
settings.RecordAuctions = Settings.WriteDossiersCheckBox.IsChecked ?? true;
|
||||
settings.RecordPolls = Settings.RawPollsCheckBox.IsChecked ?? true;
|
||||
|
||||
if (int.TryParse(Settings.LogRetentionTextBox.Text?.Trim(), out var retention) && retention >= 0)
|
||||
settings.LogRetentionDays = retention;
|
||||
|
||||
var previousDb = AppPaths.DatabaseFile;
|
||||
settings.DatabasePath = NormalizeFolderChoice(Settings.DatabaseFileTextBox.Text, AppPaths.DatabaseFile, settings.DatabasePath);
|
||||
if (!string.Equals(previousDb, settings.DatabasePath.Length > 0 ? settings.DatabasePath : AppPaths.DatabaseFile, StringComparison.OrdinalIgnoreCase))
|
||||
Log("[DATI] Percorso del database cambiato: vale dal prossimo avvio", LogLevel.Warning);
|
||||
settings.DatabaseFolder = NormalizeFolderChoice(Settings.DatabaseFolderTextBox.Text, AppPaths.DatabaseFolder, settings.DatabaseFolder);
|
||||
|
||||
settings.BankrollManagerEnabled = Settings.BankrollEnabledCheckBox.IsChecked ?? true;
|
||||
settings.MaxBidsPerAuction = ReadBounded(Settings.MaxBidsPerAuctionTextBox.Text, settings.MaxBidsPerAuction, 0, 100000, "puntate massime per asta", "");
|
||||
@@ -469,7 +448,7 @@ namespace AutoBidder
|
||||
|
||||
Utilities.SettingsManager.Save(settings);
|
||||
|
||||
ApplyDataFolderSettings(settings, previousData, previousStats);
|
||||
ApplyDatabaseFolderSetting(settings, previousDatabaseFolder);
|
||||
|
||||
// Il limite di ritmo si applica a caldo, senza ricreare il trasporto.
|
||||
_auctionMonitor.ApplyTransportSettings(settings);
|
||||
|
||||
Reference in New Issue
Block a user