Files
Mimante/Mimante/Core/MainWindow.ControlEvents.cs
Alberto Balbo 62d5cebf9c Refactoring gestione sessione e persistenza impostazioni
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.
2025-11-24 12:00:13 +01:00

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);
}
}
}