Introdotto `SessionService` per centralizzare la gestione della sessione utente, migliorando la separazione delle responsabilità e la testabilità. Risolto il problema del caricamento del cookie di autenticazione all'avvio e garantita la persistenza delle checkbox di esportazione (`IncludeMetadata`, `RemoveAfterExport`, `OverwriteExisting`). Ottimizzata la gestione della barra degli indirizzi del browser con aggiornamenti locali immediati. Applicato il pattern "Load ? Modify ? Save" per il salvataggio delle impostazioni, migliorando la simmetria e la leggibilità del codice. Logging centralizzato e semplificato per eventi rilevanti. Aggiornata la documentazione per riflettere i cambiamenti e verificati i test per garantire il corretto funzionamento.
330 lines
12 KiB
C#
330 lines
12 KiB
C#
using System.Windows;
|
|
|
|
namespace AutoBidder
|
|
{
|
|
/// <summary>
|
|
/// Event handlers for UserControl events and tab navigation
|
|
/// </summary>
|
|
public partial class MainWindow
|
|
{
|
|
// ===== TAB NAVIGATION =====
|
|
|
|
private void TabAsteAttive_Checked(object sender, RoutedEventArgs e)
|
|
{
|
|
ShowPanel(AuctionMonitor);
|
|
}
|
|
|
|
private void TabBrowser_Checked(object sender, RoutedEventArgs e)
|
|
{
|
|
ShowPanel(Browser);
|
|
}
|
|
|
|
private void TabPuntateGratis_Checked(object sender, RoutedEventArgs e)
|
|
{
|
|
ShowPanel(PuntateGratisPanel);
|
|
}
|
|
|
|
private void TabDatiStatistici_Checked(object sender, RoutedEventArgs e)
|
|
{
|
|
ShowPanel(StatisticsPanel);
|
|
}
|
|
|
|
private void TabImpostazioni_Checked(object sender, RoutedEventArgs e)
|
|
{
|
|
ShowPanel(Settings);
|
|
|
|
// ? NUOVO: Carica il cookie salvato quando si apre il tab Impostazioni
|
|
try
|
|
{
|
|
var session = Services.SessionManager.LoadSession();
|
|
if (session != null && !string.IsNullOrEmpty(session.CookieString))
|
|
{
|
|
SettingsCookieTextBox.Text = session.CookieString;
|
|
}
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private void ShowPanel(System.Windows.UIElement? panelToShow)
|
|
{
|
|
// Prevent NullReferenceException during initialization
|
|
if (AuctionMonitor == null || Browser == null || StatisticsPanel == null || Settings == null || PuntateGratisPanel == null)
|
|
return;
|
|
|
|
// Hide all panels
|
|
AuctionMonitor.Visibility = Visibility.Collapsed;
|
|
Browser.Visibility = Visibility.Collapsed;
|
|
PuntateGratisPanel.Visibility = Visibility.Collapsed;
|
|
StatisticsPanel.Visibility = Visibility.Collapsed;
|
|
Settings.Visibility = Visibility.Collapsed;
|
|
|
|
// Show selected panel
|
|
if (panelToShow != null)
|
|
panelToShow.Visibility = Visibility.Visible;
|
|
}
|
|
|
|
// ===== AUCTION MONITOR CONTROL EVENTS =====
|
|
|
|
private void AuctionMonitor_StartClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
StartButton_Click(sender, e);
|
|
}
|
|
|
|
private void AuctionMonitor_PauseAllClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
PauseAllButton_Click(sender, e);
|
|
}
|
|
|
|
private void AuctionMonitor_StopClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
StopButton_Click(sender, e);
|
|
}
|
|
|
|
private void AuctionMonitor_ExportClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
// Chiama il metodo di export esistente
|
|
try
|
|
{
|
|
// Esporta tutte le aste monitorate
|
|
var auctions = _auctionMonitor.GetAuctions();
|
|
if (auctions.Count == 0)
|
|
{
|
|
System.Windows.MessageBox.Show("Nessuna asta da esportare", "Export", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Information);
|
|
return;
|
|
}
|
|
|
|
// TODO: Implementare dialog export con scelta formato
|
|
System.Windows.MessageBox.Show($"Export di {auctions.Count} aste.\n\nFunzionalità in sviluppo.\nUsa le impostazioni nella scheda Impostazioni per configurare l'export.", "Export Aste", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Information);
|
|
Log($"[INFO] Richiesto export di {auctions.Count} aste (funzionalità in sviluppo)", Utilities.LogLevel.Info);
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
Log($"[ERRORE] Export: {ex.Message}", Utilities.LogLevel.Error);
|
|
}
|
|
}
|
|
|
|
private void AuctionMonitor_AddUrlClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
AddUrlButton_Click(sender, e);
|
|
}
|
|
|
|
private void AuctionMonitor_RemoveUrlClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
RemoveUrlButton_Click(sender, e);
|
|
}
|
|
|
|
private void AuctionMonitor_AuctionSelectionChanged(object sender, RoutedEventArgs e)
|
|
{
|
|
if (AuctionMonitor.MultiAuctionsGrid.SelectedItem is ViewModels.AuctionViewModel selected)
|
|
{
|
|
_selectedAuction = selected;
|
|
UpdateSelectedAuctionDetails(selected);
|
|
}
|
|
}
|
|
|
|
private void AuctionMonitor_CopyUrlClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
CopyAuctionUrlButton_Click(sender, e);
|
|
}
|
|
|
|
private void AuctionMonitor_OpenAuctionInternalClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
OpenAuctionInternalButton_Click(sender, e);
|
|
}
|
|
|
|
private void AuctionMonitor_OpenAuctionExternalClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
OpenAuctionExternalButton_Click(sender, e);
|
|
}
|
|
|
|
private void AuctionMonitor_ExportAuctionClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
ExportAuctionButton_Click(sender, e);
|
|
}
|
|
|
|
private void AuctionMonitor_ResetSettingsClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
ResetSettingsButton_Click(sender, e);
|
|
}
|
|
|
|
private void AuctionMonitor_ClearBiddersClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
ClearBiddersButton_Click(sender, e);
|
|
}
|
|
|
|
private void AuctionMonitor_ClearLogClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
ClearLogButton_Click(sender, e);
|
|
}
|
|
|
|
private void AuctionMonitor_ClearGlobalLogClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
ClearLogButton_Click(sender, e); // Clear Log invece di ClearGlobalLog
|
|
}
|
|
|
|
// ===== AUCTION SETTINGS EVENTS =====
|
|
|
|
private void AuctionMonitor_RefreshProductInfoClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
RefreshProductInfoButton_Click(sender, e);
|
|
}
|
|
|
|
private void AuctionMonitor_BidBeforeDeadlineMsChanged(object sender, RoutedEventArgs e)
|
|
{
|
|
// Gestito internamente dal binding WPF
|
|
if (_selectedAuction != null && int.TryParse(AuctionMonitor.SelectedBidBeforeDeadlineMs.Text, out int ms))
|
|
{
|
|
_selectedAuction.AuctionInfo.BidBeforeDeadlineMs = ms;
|
|
SaveAuctions();
|
|
}
|
|
}
|
|
|
|
private void AuctionMonitor_CheckAuctionOpenChanged(object sender, RoutedEventArgs e)
|
|
{
|
|
// Gestito internamente dal binding WPF
|
|
if (_selectedAuction != null)
|
|
{
|
|
_selectedAuction.AuctionInfo.CheckAuctionOpenBeforeBid = AuctionMonitor.SelectedCheckAuctionOpen.IsChecked ?? false;
|
|
SaveAuctions();
|
|
}
|
|
}
|
|
|
|
private void AuctionMonitor_MinPriceChanged(object sender, RoutedEventArgs e)
|
|
{
|
|
// Gestito internamente dal binding WPF
|
|
if (_selectedAuction != null && double.TryParse(AuctionMonitor.SelectedMinPrice.Text, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out double price))
|
|
{
|
|
_selectedAuction.MinPrice = price;
|
|
SaveAuctions();
|
|
}
|
|
}
|
|
|
|
private void AuctionMonitor_MaxPriceChanged(object sender, RoutedEventArgs e)
|
|
{
|
|
// Gestito internamente dal binding WPF
|
|
if (_selectedAuction != null && double.TryParse(AuctionMonitor.SelectedMaxPrice.Text, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out double price))
|
|
{
|
|
_selectedAuction.MaxPrice = price;
|
|
SaveAuctions();
|
|
}
|
|
}
|
|
|
|
private void AuctionMonitor_MaxClicksChanged(object sender, RoutedEventArgs e)
|
|
{
|
|
// Gestito internamente dal binding WPF
|
|
if (_selectedAuction != null && int.TryParse(AuctionMonitor.SelectedMaxClicks.Text, out int clicks))
|
|
{
|
|
_selectedAuction.MaxClicks = clicks;
|
|
SaveAuctions();
|
|
}
|
|
}
|
|
|
|
// ===== BROWSER CONTROL EVENTS =====
|
|
|
|
private void Browser_BrowserBackClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (Browser.EmbeddedWebView?.CoreWebView2 != null && Browser.EmbeddedWebView.CoreWebView2.CanGoBack)
|
|
Browser.EmbeddedWebView.CoreWebView2.GoBack();
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private void Browser_BrowserForwardClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (Browser.EmbeddedWebView?.CoreWebView2 != null && Browser.EmbeddedWebView.CoreWebView2.CanGoForward)
|
|
Browser.EmbeddedWebView.CoreWebView2.GoForward();
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private void Browser_BrowserRefreshClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
Browser.EmbeddedWebView?.Reload();
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private void Browser_BrowserHomeClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
Browser.EmbeddedWebView?.CoreWebView2?.Navigate("https://it.bidoo.com/");
|
|
Browser.BrowserAddress.Text = "https://it.bidoo.com/";
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private void Browser_BrowserGoClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
var url = Browser.BrowserAddress.Text?.Trim();
|
|
if (string.IsNullOrEmpty(url)) return;
|
|
if (!url.StartsWith("http", System.StringComparison.OrdinalIgnoreCase))
|
|
url = "https://" + url;
|
|
Browser.EmbeddedWebView?.CoreWebView2?.Navigate(url);
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private void Browser_BrowserAddAuctionClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
var url = Browser.BrowserAddress.Text?.Trim() ?? Browser.EmbeddedWebView?.Source?.ToString();
|
|
if (!string.IsNullOrEmpty(url))
|
|
_ = AddAuctionFromUrl(url);
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
// ===== SETTINGS CONTROL EVENTS =====
|
|
|
|
private void Settings_SaveCookieClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
SaveCookieButton_Click(sender, e);
|
|
}
|
|
|
|
private void Settings_ImportCookieClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
ImportCookieFromBrowserButton_Click(sender, e);
|
|
}
|
|
|
|
private void Settings_CancelCookieClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
CancelCookieButton_Click(sender, e);
|
|
}
|
|
|
|
private void Settings_ExportBrowseClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
ExportBrowseButton_Click(sender, e);
|
|
}
|
|
|
|
private void Settings_SaveSettingsClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
SaveSettingsButton_Click(sender, e);
|
|
}
|
|
|
|
private void Settings_CancelSettingsClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
CancelSettingsButton_Click(sender, e);
|
|
}
|
|
|
|
private void Settings_SaveDefaultsClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
SaveDefaultsButton_Click(sender, e);
|
|
}
|
|
|
|
private void Settings_CancelDefaultsClicked(object sender, RoutedEventArgs e)
|
|
{
|
|
CancelDefaultsButton_Click(sender, e);
|
|
}
|
|
}
|
|
}
|