Aggiunto pulsante "Rimuovi Tutte" e miglioramenti UI

- Aggiunto il pulsante "Rimuovi Tutte" in `AuctionMonitorControl.xaml` per eliminare tutte le aste monitorate.
- Implementato il metodo `RemoveAllButton_Click` in `AuctionMonitorControl.xaml.cs` e registrato il nuovo evento routed `RemoveAllClickedEvent`.
- Aggiunto il gestore `AuctionMonitor_RemoveAllClicked` in `MainWindow.ControlEvents.cs` e collegato l'evento in `MainWindow.xaml`.
- Migliorata la gestione degli errori e aggiunti messaggi di conferma dettagliati.
- Introdotti nuovi metodi di utilità per resettare le impostazioni, pulire la lista utenti e il log di un'asta selezionata.
- Rimosso codice obsoleto per semplificare la base di codice.
This commit is contained in:
2025-11-26 11:37:11 +01:00
parent c199e542ba
commit 56484e0bec
6 changed files with 195 additions and 58 deletions

View File

@@ -196,7 +196,8 @@
Padding="10,5"
FontSize="11"
Margin="3,0"
Click="AddUrlButton_Click"/>
Click="AddUrlButton_Click"
ToolTip="Aggiungi nuova asta"/>
<Button Content="Rimuovi"
x:Name="RemoveUrlButton"
@@ -205,7 +206,18 @@
Padding="10,5"
FontSize="11"
Margin="3,0"
Click="RemoveUrlButton_Click"/>
Click="RemoveUrlButton_Click"
ToolTip="Rimuovi asta selezionata"/>
<Button Content="Rimuovi Tutte"
x:Name="RemoveAllButton"
Background="#E81123"
Style="{StaticResource SmallRoundedButton}"
Padding="10,5"
FontSize="11"
Margin="3,0"
Click="RemoveAllButton_Click"
ToolTip="Rimuovi tutte le aste monitorate"/>
</StackPanel>
</Grid>
</Border>

View File

@@ -77,6 +77,11 @@ namespace AutoBidder.Controls
RaiseEvent(new RoutedEventArgs(RemoveUrlClickedEvent, this));
}
private void RemoveAllButton_Click(object sender, RoutedEventArgs e)
{
RaiseEvent(new RoutedEventArgs(RemoveAllClickedEvent, this));
}
private void ExportButton_Click(object sender, RoutedEventArgs e)
{
RaiseEvent(new RoutedEventArgs(ExportClickedEvent, this));
@@ -210,6 +215,9 @@ namespace AutoBidder.Controls
public static readonly RoutedEvent RemoveUrlClickedEvent = EventManager.RegisterRoutedEvent(
"RemoveUrlClicked", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(AuctionMonitorControl));
public static readonly RoutedEvent RemoveAllClickedEvent = EventManager.RegisterRoutedEvent(
"RemoveAllClicked", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(AuctionMonitorControl));
public static readonly RoutedEvent ExportClickedEvent = EventManager.RegisterRoutedEvent(
"ExportClicked", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(AuctionMonitorControl));
@@ -291,6 +299,12 @@ namespace AutoBidder.Controls
remove { RemoveHandler(RemoveUrlClickedEvent, value); }
}
public event RoutedEventHandler RemoveAllClicked
{
add { AddHandler(RemoveAllClickedEvent, value); }
remove { RemoveHandler(RemoveAllClickedEvent, value); }
}
public event RoutedEventHandler ExportClicked
{
add { AddHandler(ExportClickedEvent, value); }

View File

@@ -256,67 +256,70 @@ namespace AutoBidder
}
}
private void ResetSettingsButton_Click(object sender, RoutedEventArgs e)
private void RemoveAllButton_Click(object sender, RoutedEventArgs e)
{
if (_selectedAuction == null) return;
var result = MessageBox.Show(
"Ripristinare le impostazioni ai valori predefiniti?",
"Conferma Reset",
MessageBoxButton.YesNo,
MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
if (_auctionViewModels.Count == 0)
{
_selectedAuction.AuctionInfo.BidBeforeDeadlineMs = 200;
_selectedAuction.AuctionInfo.CheckAuctionOpenBeforeBid = false;
_selectedAuction.MinPrice = 0;
_selectedAuction.MaxPrice = 0;
_selectedAuction.MaxClicks = 0;
MessageBox.Show("Non ci sono aste da rimuovere", "Lista Vuota", MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
UpdateSelectedAuctionDetails(_selectedAuction);
Log($"Reset impostazioni: {_selectedAuction.Name}", LogLevel.Success);
var count = _auctionViewModels.Count;
// Conferma rimozione
var result = MessageBox.Show(
$"Rimuovere TUTTE le aste dal monitoraggio?\n\nSono presenti {count} aste monitorate.\n\nTutte le aste verranno eliminate dalla lista e non saranno più monitorate.",
"Conferma Rimozione Totale",
MessageBoxButton.YesNo,
MessageBoxImage.Warning);
if (result != MessageBoxResult.Yes)
{
Log($"[REMOVE ALL] Rimozione annullata", LogLevel.Info);
return;
}
try
{
// Ferma il monitoraggio se attivo
if (_isAutomationActive)
{
_auctionMonitor.Stop();
_isAutomationActive = false;
Log("[STOP] Monitoraggio fermato prima della rimozione totale", LogLevel.Info);
}
// Rimuove tutte le aste dal monitor e dal ViewModel
var auctionsToRemove = _auctionViewModels.ToList(); // Copia per evitare modifiche durante iterazione
foreach (var auction in auctionsToRemove)
{
_auctionMonitor.RemoveAuction(auction.AuctionId);
}
// Pulisci la lista ViewModel
_auctionViewModels.Clear();
// Resetta selezione
_selectedAuction = null;
// Salva modifiche
SaveAuctions();
UpdateTotalCount();
UpdateGlobalControlButtons();
Log($"[REMOVE ALL] Tutte le aste rimosse: {count} aste eliminate", LogLevel.Success);
MessageBox.Show($"Tutte le {count} aste sono state rimosse dal monitoraggio.", "Rimozione Completata", MessageBoxButton.OK, MessageBoxImage.Information);
}
catch (Exception ex)
{
Log($"[ERROR] Errore rimozione totale: {ex.Message}", LogLevel.Error);
MessageBox.Show($"Errore durante la rimozione delle aste: {ex.Message}", "Errore", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
private void ClearBiddersButton_Click(object sender, RoutedEventArgs e)
{
if (_selectedAuction == null) return;
var result = MessageBox.Show(
"Cancellare la lista degli utenti?",
"Conferma Pulizia",
MessageBoxButton.YesNo,
MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
{
_selectedAuction.AuctionInfo.BidderStats.Clear();
SelectedAuctionBiddersGrid.ItemsSource = null;
SelectedAuctionBiddersCount.Text = "Utenti: 0";
Log($"[CLEAR] Lista utenti pulita: {_selectedAuction.Name}", LogLevel.Info);
}
}
private void ClearLogButton_Click(object sender, RoutedEventArgs e)
{
if (_selectedAuction == null) return;
var result = MessageBox.Show(
"Cancellare il log dell'asta?",
"Conferma Pulizia",
MessageBoxButton.YesNo,
MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
{
_selectedAuction.AuctionInfo.AuctionLog.Clear();
SelectedAuctionLog.Document.Blocks.Clear();
Log($"Log pulito: {_selectedAuction.Name}", LogLevel.Success);
}
}
private void CopyAuctionUrlButton_Click(object sender, RoutedEventArgs e)
private async void CopyAuctionUrlButton_Click(object sender, RoutedEventArgs e)
{
if (_selectedAuction == null)
{

View File

@@ -112,6 +112,11 @@ namespace AutoBidder
RemoveUrlButton_Click(sender, e);
}
private void AuctionMonitor_RemoveAllClicked(object sender, RoutedEventArgs e)
{
RemoveAllButton_Click(sender, e);
}
private void AuctionMonitor_AuctionSelectionChanged(object sender, RoutedEventArgs e)
{
if (AuctionMonitor.MultiAuctionsGrid.SelectedItem is ViewModels.AuctionViewModel selected)

View File

@@ -215,5 +215,107 @@ namespace AutoBidder
Log($"[ERRORE] Esportazione asta: {ex.Message}", LogLevel.Error);
}
}
/// <summary>
/// Resetta le impostazioni dell'asta selezionata ai valori predefiniti
/// </summary>
private void ResetSettingsButton_Click(object sender, RoutedEventArgs e)
{
try
{
if (_selectedAuction == null)
{
MessageBox.Show("Seleziona un'asta dalla griglia", "Nessuna Selezione", MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
var settings = SettingsManager.Load();
// Resetta ai valori predefiniti dalle impostazioni
_selectedAuction.AuctionInfo.BidBeforeDeadlineMs = settings.DefaultBidBeforeDeadlineMs;
_selectedAuction.AuctionInfo.CheckAuctionOpenBeforeBid = settings.DefaultCheckAuctionOpenBeforeBid;
_selectedAuction.MinPrice = settings.DefaultMinPrice;
_selectedAuction.MaxPrice = settings.DefaultMaxPrice;
_selectedAuction.MaxClicks = settings.DefaultMaxClicks;
// Aggiorna UI
UpdateAuctionSettingsDisplay(_selectedAuction);
// Salva
SaveAuctions();
Log($"[RESET] Impostazioni ripristinate ai valori predefiniti per: {_selectedAuction.Name}", LogLevel.Info);
}
catch (Exception ex)
{
Log($"[ERRORE] Reset impostazioni: {ex.Message}", LogLevel.Error);
MessageBox.Show($"Errore durante il reset: {ex.Message}", "Errore", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
/// <summary>
/// Pulisce la lista degli utenti che hanno puntato sull'asta selezionata
/// </summary>
private void ClearBiddersButton_Click(object sender, RoutedEventArgs e)
{
try
{
if (_selectedAuction == null)
{
MessageBox.Show("Seleziona un'asta dalla griglia", "Nessuna Selezione", MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
var result = MessageBox.Show(
$"Pulire la lista degli utenti per questa asta?\n\n{_selectedAuction.Name}\n\nLa lista degli utenti che hanno puntato verrà svuotata.",
"Conferma Pulizia",
MessageBoxButton.YesNo,
MessageBoxImage.Question);
if (result != MessageBoxResult.Yes)
return;
// Pulisci la lista bidders
_selectedAuction.AuctionInfo.BidderStats.Clear();
// Aggiorna UI
RefreshBiddersGrid(_selectedAuction);
Log($"[CLEAR] Lista utenti pulita per: {_selectedAuction.Name}", LogLevel.Info);
}
catch (Exception ex)
{
Log($"[ERRORE] Pulizia lista utenti: {ex.Message}", LogLevel.Error);
MessageBox.Show($"Errore durante la pulizia: {ex.Message}", "Errore", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
/// <summary>
/// Pulisce il log dell'asta selezionata
/// </summary>
private void ClearLogButton_Click(object sender, RoutedEventArgs e)
{
try
{
if (_selectedAuction == null)
{
MessageBox.Show("Seleziona un'asta dalla griglia", "Nessuna Selezione", MessageBoxButton.OK, MessageBoxImage.Information);
return;
}
// Pulisci il log dell'asta
_selectedAuction.AuctionInfo.AuctionLog.Clear();
// Aggiorna UI
UpdateAuctionLog(_selectedAuction);
Log($"[CLEAR] Log pulito per: {_selectedAuction.Name}", LogLevel.Info);
}
catch (Exception ex)
{
Log($"[ERRORE] Pulizia log asta: {ex.Message}", LogLevel.Error);
MessageBox.Show($"Errore durante la pulizia: {ex.Message}", "Errore", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
}

View File

@@ -189,6 +189,7 @@
ExportClicked="AuctionMonitor_ExportClicked"
AddUrlClicked="AuctionMonitor_AddUrlClicked"
RemoveUrlClicked="AuctionMonitor_RemoveUrlClicked"
RemoveAllClicked="AuctionMonitor_RemoveAllClicked"
AuctionSelectionChanged="AuctionMonitor_AuctionSelectionChanged"
CopyUrlClicked="AuctionMonitor_CopyUrlClicked"
OpenAuctionInternalClicked="AuctionMonitor_OpenAuctionInternalClicked"