Files
Mimante/Mimante/MainWindow.xaml.cs
Alberto Balbo 29a567bb1d Miglioramenti UX e gestione impostazioni predefinite
* Rimosso il pulsante "Vai" e reso il campo URL non editabile.
* Introdotta persistenza delle impostazioni predefinite (es. anticipo).
* Aggiunto metodo `LoadDefaultSettings()` per caricare i defaults.
* Logging dettagliato per salvataggio e applicazione impostazioni.
* Ottimizzata gestione aste con valori predefiniti da configurazione.
* Fix per evitare puntate inutili quando l'utente è già vincitore.
* Logging migliorato per strategia di puntata e decisioni di skip.
* Aggiornata documentazione con dettagli sui fix implementati.
* Aggiornato `CHANGELOG.md` con le nuove funzionalità e correzioni.
2025-11-20 14:11:37 +01:00

205 lines
9.0 KiB
C#

using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using AutoBidder.Models;
using AutoBidder.Services;
using AutoBidder.ViewModels;
using AutoBidder.Utilities;
namespace AutoBidder
{
/// <summary>
/// AutoBidder v4.0 - HTTP Only Multi-Auction Monitor
/// Architettura modulare con partial classes e UserControls
/// </summary>
public partial class MainWindow : Window
{
// SERVIZI CORE
private readonly AuctionMonitor _auctionMonitor;
private readonly System.Collections.ObjectModel.ObservableCollection<AuctionViewModel> _auctionViewModels = new System.Collections.ObjectModel.ObservableCollection<AuctionViewModel>();
// UI State
private AuctionViewModel? _selectedAuction;
private bool _isAutomationActive = false;
private bool _isUpdatingSelection = false; // Previene loop di salvataggio
// Commands (initialized in MainWindow.Commands.cs)
public RelayCommand? StartAllCommand { get; private set; }
public RelayCommand? StopAllCommand { get; private set; }
public RelayCommand? PauseAllCommand { get; private set; }
public RelayCommand? GridStartCommand { get; private set; }
public RelayCommand? GridPauseCommand { get; private set; }
public RelayCommand? GridStopCommand { get; private set; }
public RelayCommand? GridBidCommand { get; private set; }
// Properties to access UserControl elements - AuctionMonitor
public DataGrid MultiAuctionsGrid => AuctionMonitor.MultiAuctionsGrid;
public RichTextBox LogBox => AuctionMonitor.LogBox;
public Button StartButton => AuctionMonitor.StartButton;
public Button PauseAllButton => AuctionMonitor.PauseAllButton;
public Button StopButton => AuctionMonitor.StopButton;
public Button AddUrlButton => AuctionMonitor.AddUrlButton;
public Button RemoveUrlButton => AuctionMonitor.RemoveUrlButton;
public TextBlock SelectedAuctionName => AuctionMonitor.SelectedAuctionName;
public TextBox SelectedAuctionUrl => AuctionMonitor.SelectedAuctionUrl;
public Button CopyAuctionUrlButton => AuctionMonitor.CopyAuctionUrlButton;
public TextBlock SelectedAuctionBiddersCount => AuctionMonitor.SelectedAuctionBiddersCount;
public DataGrid SelectedAuctionBiddersGrid => AuctionMonitor.SelectedAuctionBiddersGrid;
public Button ClearBiddersButton => AuctionMonitor.ClearBiddersButton;
public TextBlock MonitorateTitle => AuctionMonitor.MonitorateTitle;
public TextBox SelectedBidBeforeDeadlineMs => AuctionMonitor.SelectedBidBeforeDeadlineMs;
public CheckBox SelectedCheckAuctionOpen => AuctionMonitor.SelectedCheckAuctionOpen;
public TextBox SelectedMinPrice => AuctionMonitor.SelectedMinPrice;
public TextBox SelectedMaxPrice => AuctionMonitor.SelectedMaxPrice;
public TextBox SelectedMaxClicks => AuctionMonitor.SelectedMaxClicks;
public Button ResetSettingsButton => AuctionMonitor.ResetSettingsButton;
public Button ClearGlobalLogButton => AuctionMonitor.ClearGlobalLogButton;
public Button ClearLogButton => AuctionMonitor.ClearLogButton;
public RichTextBox SelectedAuctionLog => AuctionMonitor.SelectedAuctionLog;
public TextBlock RemainingBidsText => AuctionMonitor.RemainingBidsText;
public TextBlock BannerAsteDaRiscattare => AuctionMonitor.BannerAsteDaRiscattare;
// Properties to access UserControl elements - Browser
public Microsoft.Web.WebView2.Wpf.WebView2 EmbeddedWebView => Browser.EmbeddedWebView;
public TextBox BrowserAddress => Browser.BrowserAddress;
// Properties to access UserControl elements - Settings
public TextBox SettingsCookieTextBox => Settings.SettingsCookieTextBox;
public TextBox ExportPathTextBox => Settings.ExportPathTextBox;
public Button ExportBrowseButton => Settings.ExportBrowseButton;
public RadioButton ExtCsv => Settings.ExtCsv;
public RadioButton ExtJson => Settings.ExtJson;
public RadioButton ExtXml => Settings.ExtXml;
public CheckBox IncludeUsedBids => Settings.IncludeUsedBids;
public CheckBox IncludeLogs => Settings.IncludeLogs;
public CheckBox IncludeUserBids => Settings.IncludeUserBids;
public CheckBox IncludeMetadata => Settings.IncludeMetadata;
public CheckBox RemoveAfterExport => Settings.RemoveAfterExport;
public CheckBox OverwriteExisting => Settings.OverwriteExisting;
// Impostazioni predefinite aste - AGGIORNATO
public TextBox DefaultBidBeforeDeadlineMs => Settings.DefaultBidBeforeDeadlineMsTextBox;
public CheckBox DefaultCheckAuctionOpen => Settings.DefaultCheckAuctionOpenCheckBox;
public TextBox DefaultMinPrice => Settings.DefaultMinPriceTextBox;
public TextBox DefaultMaxPrice => Settings.DefaultMaxPriceTextBox;
public TextBox DefaultMaxClicks => Settings.DefaultMaxClicksTextBox;
public MainWindow()
{
InitializeComponent();
// Inizializza servizi
_auctionMonitor = new AuctionMonitor();
// Initialize commands (from MainWindow.Commands.cs)
InitializeCommands();
this.DataContext = this;
// Event handlers for auction monitor
_auctionMonitor.OnAuctionUpdated += AuctionMonitor_OnAuctionUpdated;
_auctionMonitor.OnBidExecuted += AuctionMonitor_OnBidExecuted;
_auctionMonitor.OnLog += AuctionMonitor_OnLog;
_auctionMonitor.OnResetCountChanged += AuctionMonitor_OnResetCountChanged;
// Bind griglia
MultiAuctionsGrid.ItemsSource = _auctionViewModels;
// Carica aste salvate (from MainWindow.AuctionManagement.cs)
LoadSavedAuctions();
// Load export settings (from MainWindow.EventHandlers.Export.cs)
LoadExportSettings();
// CARICA IMPOSTAZIONI PREDEFINITE ASTE
LoadDefaultSettings();
// Update initial button states
UpdateGlobalControlButtons();
Log("[OK] AutoBidder v4.0 avviato (API-based)", LogLevel.Success);
Log("[INFO] Usa 'Configura Sessione' per inserire cookie dal menu Applicazioni di Chrome", LogLevel.Info);
// Initialize user info timers (from MainWindow.UserInfo.cs)
InitializeUserInfoTimers();
_ = UpdateUserBannerInfoAsync();
_ = UpdateUserHtmlInfoAsync();
// Attach WebView2 context menu handler
try
{
if (EmbeddedWebView != null)
{
EmbeddedWebView.CoreWebView2InitializationCompleted += (s, e) =>
{
try
{
if (e.IsSuccess && EmbeddedWebView?.CoreWebView2 != null)
{
EmbeddedWebView.CoreWebView2.ContextMenuRequested += CoreWebView2_ContextMenuRequested;
}
}
catch { }
};
}
}
catch { }
}
// ===== AUCTION MONITOR EVENT HANDLERS =====
private void AuctionMonitor_OnAuctionUpdated(AuctionState state)
{
Dispatcher.BeginInvoke(() =>
{
var vm = _auctionViewModels.FirstOrDefault(a => a.AuctionId == state.AuctionId);
vm?.UpdateState(state);
if (_selectedAuction != null && _selectedAuction.AuctionId == state.AuctionId)
{
UpdateAuctionLog(_selectedAuction);
RefreshBiddersGrid(_selectedAuction);
}
UpdateGlobalControlButtons();
});
}
private void AuctionMonitor_OnBidExecuted(AuctionInfo auction, BidResult result)
{
Dispatcher.BeginInvoke(() =>
{
var vm = _auctionViewModels.FirstOrDefault(a => a.AuctionId == auction.AuctionId);
if (vm != null)
{
vm.RefreshCounters();
if (result.Success)
{
Log($"[OK] Click su {auction.Name}: {result.LatencyMs}ms {result.Response}", LogLevel.Success);
}
else
{
Log($"[FAIL] Click fallito su {auction.Name}: {result.Error}", LogLevel.Error);
}
}
});
}
private void AuctionMonitor_OnLog(string message)
{
Log(message);
}
private void AuctionMonitor_OnResetCountChanged(string auctionId)
{
Dispatcher.BeginInvoke(() =>
{
var vm = _auctionViewModels.FirstOrDefault(a => a.AuctionId == auctionId);
vm?.RefreshCounters();
});
}
}
}