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" Padding="10,5"
FontSize="11" FontSize="11"
Margin="3,0" Margin="3,0"
Click="AddUrlButton_Click"/> Click="AddUrlButton_Click"
ToolTip="Aggiungi nuova asta"/>
<Button Content="Rimuovi" <Button Content="Rimuovi"
x:Name="RemoveUrlButton" x:Name="RemoveUrlButton"
@@ -205,7 +206,18 @@
Padding="10,5" Padding="10,5"
FontSize="11" FontSize="11"
Margin="3,0" 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> </StackPanel>
</Grid> </Grid>
</Border> </Border>

View File

@@ -76,6 +76,11 @@ namespace AutoBidder.Controls
{ {
RaiseEvent(new RoutedEventArgs(RemoveUrlClickedEvent, this)); 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) private void ExportButton_Click(object sender, RoutedEventArgs e)
{ {
@@ -209,6 +214,9 @@ namespace AutoBidder.Controls
public static readonly RoutedEvent RemoveUrlClickedEvent = EventManager.RegisterRoutedEvent( public static readonly RoutedEvent RemoveUrlClickedEvent = EventManager.RegisterRoutedEvent(
"RemoveUrlClicked", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(AuctionMonitorControl)); "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( public static readonly RoutedEvent ExportClickedEvent = EventManager.RegisterRoutedEvent(
"ExportClicked", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(AuctionMonitorControl)); "ExportClicked", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(AuctionMonitorControl));
@@ -290,6 +298,12 @@ namespace AutoBidder.Controls
add { AddHandler(RemoveUrlClickedEvent, value); } add { AddHandler(RemoveUrlClickedEvent, value); }
remove { RemoveHandler(RemoveUrlClickedEvent, value); } remove { RemoveHandler(RemoveUrlClickedEvent, value); }
} }
public event RoutedEventHandler RemoveAllClicked
{
add { AddHandler(RemoveAllClickedEvent, value); }
remove { RemoveHandler(RemoveAllClickedEvent, value); }
}
public event RoutedEventHandler ExportClicked public event RoutedEventHandler ExportClicked
{ {

View File

@@ -255,68 +255,71 @@ namespace AutoBidder
MessageBox.Show($"Errore durante la rimozione:\n{ex.Message}", "Errore", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show($"Errore durante la rimozione:\n{ex.Message}", "Errore", MessageBoxButton.OK, MessageBoxImage.Error);
} }
} }
private void ResetSettingsButton_Click(object sender, RoutedEventArgs e) private void RemoveAllButton_Click(object sender, RoutedEventArgs e)
{ {
if (_selectedAuction == null) return; if (_auctionViewModels.Count == 0)
var result = MessageBox.Show(
"Ripristinare le impostazioni ai valori predefiniti?",
"Conferma Reset",
MessageBoxButton.YesNo,
MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
{ {
_selectedAuction.AuctionInfo.BidBeforeDeadlineMs = 200; MessageBox.Show("Non ci sono aste da rimuovere", "Lista Vuota", MessageBoxButton.OK, MessageBoxImage.Information);
_selectedAuction.AuctionInfo.CheckAuctionOpenBeforeBid = false; return;
_selectedAuction.MinPrice = 0; }
_selectedAuction.MaxPrice = 0;
_selectedAuction.MaxClicks = 0;
UpdateSelectedAuctionDetails(_selectedAuction); var count = _auctionViewModels.Count;
Log($"Reset impostazioni: {_selectedAuction.Name}", LogLevel.Success);
// 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) private async void CopyAuctionUrlButton_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)
{ {
if (_selectedAuction == null) if (_selectedAuction == null)
{ {

View File

@@ -111,6 +111,11 @@ namespace AutoBidder
{ {
RemoveUrlButton_Click(sender, e); RemoveUrlButton_Click(sender, e);
} }
private void AuctionMonitor_RemoveAllClicked(object sender, RoutedEventArgs e)
{
RemoveAllButton_Click(sender, e);
}
private void AuctionMonitor_AuctionSelectionChanged(object sender, RoutedEventArgs e) private void AuctionMonitor_AuctionSelectionChanged(object sender, RoutedEventArgs e)
{ {

View File

@@ -215,5 +215,107 @@ namespace AutoBidder
Log($"[ERRORE] Esportazione asta: {ex.Message}", LogLevel.Error); 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" ExportClicked="AuctionMonitor_ExportClicked"
AddUrlClicked="AuctionMonitor_AddUrlClicked" AddUrlClicked="AuctionMonitor_AddUrlClicked"
RemoveUrlClicked="AuctionMonitor_RemoveUrlClicked" RemoveUrlClicked="AuctionMonitor_RemoveUrlClicked"
RemoveAllClicked="AuctionMonitor_RemoveAllClicked"
AuctionSelectionChanged="AuctionMonitor_AuctionSelectionChanged" AuctionSelectionChanged="AuctionMonitor_AuctionSelectionChanged"
CopyUrlClicked="AuctionMonitor_CopyUrlClicked" CopyUrlClicked="AuctionMonitor_CopyUrlClicked"
OpenAuctionInternalClicked="AuctionMonitor_OpenAuctionInternalClicked" OpenAuctionInternalClicked="AuctionMonitor_OpenAuctionInternalClicked"