* 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.
205 lines
9.0 KiB
C#
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();
|
|
});
|
|
}
|
|
}
|
|
}
|