Files
Mimante/Mimante/Documentation/FIX_RUNTIME_COOKIE_EVENTS.md
T
Alby96 6795282993 Migliorato auto-login e gestione cookie WebView2
- Introdotto il pre-caricamento di WebView2 per ridurre i tempi di attesa.
- Implementato il pattern TaskCompletionSource per attendere l'inizializzazione di WebView2 (timeout 60s).
- Centralizzata la logica di verifica e importazione automatica dei cookie.
- Mostrate istruzioni di login solo se necessario, migliorando l'UX.
- Risolti problemi di timeout e threading durante l'inizializzazione di WebView2.
- Puliti e ottimizzati i log per maggiore chiarezza.
- Rimossa la gestione manuale dei cookie, ora automatizzata.
2025-11-25 11:33:50 +01:00

13 KiB

?? Fix: Runtime Error - Eventi Cookie Obsoleti

?? Problema Rilevato

Errore Runtime:

System.Windows.Markup.XamlParseException
Messaggio='Impossibile creare 'SaveCookieClicked' dal testo 'Settings_SaveCookieClicked'.' 
numero riga '328' e posizione riga '39'.

Eccezione interna 1:
ArgumentException: Cannot bind to the target method because its signature is not compatible with that of the delegate type.

Causa: Durante il refactoring per l'autenticazione automatica tramite browser, gli handler eventi cookie sono stati rimossi dal code-behind, ma le registrazioni eventi nel XAML non sono state rimosse, causando un errore all'avvio dell'applicazione.


?? Analisi del Problema

Sequenza Eventi

  1. ? Refactoring completato: Rimossi handler cookie da MainWindow.EventHandlers.Settings.cs
  2. ? Refactoring completato: Sezione cookie rimossa da SettingsControl.xaml
  3. ? Mancato cleanup: Eventi cookie ancora registrati in MainWindow.xaml (righe 328-330)
  4. ? Mancato cleanup: Definizioni eventi cookie ancora presenti in SettingsControl.xaml.cs

File Problematici

MainWindow.xaml (righe 328-330)

<!-- ? PROBLEMATICO -->
<controls:SettingsControl x:Name="Settings"
    Visibility="Collapsed"
    SaveCookieClicked="Settings_SaveCookieClicked"      ? Handler non esiste
    ImportCookieClicked="Settings_ImportCookieClicked"  ? Handler non esiste
    CancelCookieClicked="Settings_CancelCookieClicked"  ? Handler non esiste
    ExportBrowseClicked="Settings_ExportBrowseClicked"
    SaveSettingsClicked="Settings_SaveSettingsClicked"
    CancelSettingsClicked="Settings_CancelSettingsClicked"
    SaveDefaultsClicked="Settings_SaveDefaultsClicked"
    CancelDefaultsClicked="Settings_CancelDefaultsClicked"/>

SettingsControl.xaml.cs

// ? PROBLEMATICO: Definizioni eventi obsoleti ancora presenti
public static readonly RoutedEvent SaveCookieClickedEvent = ...
public static readonly RoutedEvent ImportCookieClickedEvent = ...
public static readonly RoutedEvent CancelCookieClickedEvent = ...

private void SaveCookieButton_Click(object sender, RoutedEventArgs e) { ... }
private void ImportCookieFromBrowserButton_Click(object sender, RoutedEventArgs e) { ... }
private void CancelCookieButton_Click(object sender, RoutedEventArgs e) { ... }

? Soluzione Implementata

1?? Pulizia MainWindow.xaml

File: MainWindow.xaml (righe 328-335)

Prima ?:

<controls:SettingsControl x:Name="Settings"
    Visibility="Collapsed"
    SaveCookieClicked="Settings_SaveCookieClicked"
    ImportCookieClicked="Settings_ImportCookieClicked"
    CancelCookieClicked="Settings_CancelCookieClicked"
    ExportBrowseClicked="Settings_ExportBrowseClicked"
    SaveSettingsClicked="Settings_SaveSettingsClicked"
    CancelSettingsClicked="Settings_CancelSettingsClicked"
    SaveDefaultsClicked="Settings_SaveDefaultsClicked"
    CancelDefaultsClicked="Settings_CancelDefaultsClicked"/>

Dopo ?:

<controls:SettingsControl x:Name="Settings"
    Visibility="Collapsed"
    ExportBrowseClicked="Settings_ExportBrowseClicked"
    SaveSettingsClicked="Settings_SaveSettingsClicked"
    CancelSettingsClicked="Settings_CancelSettingsClicked"
    SaveDefaultsClicked="Settings_SaveDefaultsClicked"
    CancelDefaultsClicked="Settings_CancelDefaultsClicked"/>

Modifiche:

  • ? Rimosso SaveCookieClicked="Settings_SaveCookieClicked"
  • ? Rimosso ImportCookieClicked="Settings_ImportCookieClicked"
  • ? Rimosso CancelCookieClicked="Settings_CancelCookieClicked"

2?? Pulizia SettingsControl.xaml.cs

File: Controls\SettingsControl.xaml.cs

Rimossi Handler Metodi

Prima ?:

private void SaveCookieButton_Click(object sender, RoutedEventArgs e)
{
    RaiseEvent(new RoutedEventArgs(SaveCookieClickedEvent, this));
}

private void ImportCookieFromBrowserButton_Click(object sender, RoutedEventArgs e)
{
    RaiseEvent(new RoutedEventArgs(ImportCookieClickedEvent, this));
}

private void CancelCookieButton_Click(object sender, RoutedEventArgs e)
{
    RaiseEvent(new RoutedEventArgs(CancelCookieClickedEvent, this));
}

Dopo ?:

// ========================================
// NOTA: Eventi cookie RIMOSSI
// Gestione automatica tramite browser
// ========================================

Rimossi RoutedEvent Definitions

Prima ?:

public static readonly RoutedEvent SaveCookieClickedEvent = EventManager.RegisterRoutedEvent(
    "SaveCookieClicked", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(SettingsControl));

public static readonly RoutedEvent ImportCookieClickedEvent = EventManager.RegisterRoutedEvent(
    "ImportCookieClicked", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(SettingsControl));

public static readonly RoutedEvent CancelCookieClickedEvent = EventManager.RegisterRoutedEvent(
    "CancelCookieClicked", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(SettingsControl));

Dopo ?:

// Routed Events (cookie events RIMOSSI)
public static readonly RoutedEvent ExportBrowseClickedEvent = EventManager.RegisterRoutedEvent(...);
public static readonly RoutedEvent SaveSettingsClickedEvent = EventManager.RegisterRoutedEvent(...);
// ...altri eventi validi...

Rimossi Event Properties

Prima ?:

public event RoutedEventHandler SaveCookieClicked
{
    add { AddHandler(SaveCookieClickedEvent, value); }
    remove { RemoveHandler(SaveCookieClickedEvent, value); }
}

public event RoutedEventHandler ImportCookieClicked
{
    add { AddHandler(ImportCookieClickedEvent, value); }
    remove { RemoveHandler(ImportCookieClickedEvent, value); }
}

public event RoutedEventHandler CancelCookieClicked
{
    add { AddHandler(CancelCookieClickedEvent, value); }
    remove { RemoveHandler(CancelCookieClickedEvent, value); }
}

Dopo ?:

// Solo eventi validi mantenuti
public event RoutedEventHandler ExportBrowseClicked { ... }
public event RoutedEventHandler SaveSettingsClicked { ... }
// ...altri eventi validi...

Aggiornato SaveAllSettings_Click

Prima ?:

private void SaveAllSettings_Click(object sender, RoutedEventArgs e)
{
    // 1. Salva cookie (se presente)
    RaiseEvent(new RoutedEventArgs(SaveCookieClickedEvent, this));  ? Errore!
    
    // 2. Salva impostazioni export
    RaiseEvent(new RoutedEventArgs(SaveSettingsClickedEvent, this));
    
    // 3. Salva impostazioni predefinite aste
    RaiseEvent(new RoutedEventArgs(SaveDefaultsClickedEvent, this));
}

Dopo ?:

private void SaveAllSettings_Click(object sender, RoutedEventArgs e)
{
    // 1. Salva impostazioni export
    RaiseEvent(new RoutedEventArgs(SaveSettingsClickedEvent, this));
    
    // 2. Salva impostazioni predefinite aste
    RaiseEvent(new RoutedEventArgs(SaveDefaultsClickedEvent, this));
    
    // UNICO MessageBox di conferma
    MessageBox.Show(
        "Tutte le impostazioni sono state salvate con successo.\n\nLe nuove impostazioni verranno applicate alle aste future.",
        "Impostazioni Salvate",
        MessageBoxButton.OK,
        MessageBoxImage.Information
    );
}

Aggiornato CancelAllSettings_Click

Prima ?:

private void CancelAllSettings_Click(object sender, RoutedEventArgs e)
{
    RaiseEvent(new RoutedEventArgs(CancelCookieClickedEvent, this));  ? Errore!
    RaiseEvent(new RoutedEventArgs(CancelSettingsClickedEvent, this));
    RaiseEvent(new RoutedEventArgs(CancelDefaultsClickedEvent, this));
}

Dopo ?:

private void CancelAllSettings_Click(object sender, RoutedEventArgs e)
{
    // Annulla tutte le modifiche
    RaiseEvent(new RoutedEventArgs(CancelSettingsClickedEvent, this));
    RaiseEvent(new RoutedEventArgs(CancelDefaultsClickedEvent, this));
}

?? Confronto Prima/Dopo

Eventi Registrati in MainWindow.xaml

Evento Prima Dopo
SaveCookieClicked ? Registrato ? Rimosso
ImportCookieClicked ? Registrato ? Rimosso
CancelCookieClicked ? Registrato ? Rimosso
ExportBrowseClicked ? Registrato ? Mantenuto
SaveSettingsClicked ? Registrato ? Mantenuto
CancelSettingsClicked ? Registrato ? Mantenuto
SaveDefaultsClicked ? Registrato ? Mantenuto
CancelDefaultsClicked ? Registrato ? Mantenuto

Eventi Definiti in SettingsControl.xaml.cs

Componente Prima Dopo
Handler Metodi 8 metodi 5 metodi
RoutedEvent Definitions 8 eventi 5 eventi
Event Properties 8 properties 5 properties
Totale righe ~180 righe ~130 righe

Riduzione: -50 righe (~28% più compatto)


?? Test di Verifica

Test 1: Avvio Applicazione ?

Steps:

  1. Compila progetto
  2. Avvia applicazione
  3. Verifica nessun errore runtime

Risultato Atteso: ? Applicazione si avvia senza errori

Prima:

? System.Windows.Markup.XamlParseException
? 'Impossibile creare SaveCookieClicked...'
? Crash all'avvio

Dopo:

? Compilazione riuscita
? Avvio senza errori
? UI caricata correttamente

Test 2: Tab Impostazioni ?

Steps:

  1. Avvia applicazione
  2. Click tab "Impostazioni"
  3. Verifica UI caricata

Risultato Atteso: ? Impostazioni visibili senza sezione cookie

Prima:

? Crash durante caricamento XAML

Dopo:

? Impostazioni Export visibili
? Impostazioni Predefinite visibili
? Protezione Account visibile
? Limiti Log visibili

Test 3: Salvataggio Impostazioni ?

Steps:

  1. Modifica impostazioni export
  2. Modifica impostazioni predefinite
  3. Click "Salva"
  4. Verifica conferma

Risultato Atteso: ? Salvataggio funziona senza errori

Log Attesi:

[OK] Tutte le impostazioni salvate con successo

?? Lezioni Apprese

1. Cleanup Completo Durante Refactoring

Quando si rimuove una funzionalità, verificare tutti i punti di integrazione:

Checklist Cleanup:

  • Code-behind handlers (MainWindow.EventHandlers.Settings.cs)
  • XAML event registrations (MainWindow.xaml)
  • UserControl event definitions (SettingsControl.xaml.cs)
  • UserControl XAML buttons/controls (SettingsControl.xaml)
  • Event properties exposure (MainWindow.xaml.cs)
  • Documentazione

2. Pattern Pulizia Eventi WPF

// ? SBAGLIATO: Rimuovere solo code-behind
// File: MainWindow.EventHandlers.Settings.cs
// private void Settings_SaveCookieClicked() { } // ? Rimosso

// ? MA DIMENTICATO:
// File: MainWindow.xaml
// SaveCookieClicked="Settings_SaveCookieClicked"  ? DEVE essere rimosso!

// ? CORRETTO: Rimuovere entrambi
// 1. Handler in code-behind
// 2. Registrazione in XAML

3. Testing Runtime Essenziale

// ? Build riuscita ? Funzionamento garantito
// 
// Il compilatore verifica:
// - Sintassi corretta
// - Tipi corretti
// - Membri accessibili
//
// MA NON verifica:
// - Event binding XAML ? Code-behind
// - Resource keys esistenti
// - Template bindings
//
// ? SEMPRE testare runtime dopo refactoring UI

4. Refactoring Incrementale

Approccio Corretto:

1. Rimuovi UI (XAML controls)
   ?
2. Rimuovi event handlers (code-behind)
   ?
3. Rimuovi event registrations (XAML)
   ?
4. Rimuovi event definitions (UserControl)
   ?
5. ? BUILD + RUN + TEST

Approccio Sbagliato ?:

1. Rimuovi tutto in un colpo
   ?
2. Build (successo falso)
   ?
3. Run ? CRASH

? Stato Finale

Build Status

? Compilazione riuscita
? 0 Errori
? 0 Warning

Runtime Status

? Avvio applicazione: OK
? Caricamento XAML: OK
? Eventi funzionanti: OK
? UI responsive: OK

File Modificati

File Modifiche
MainWindow.xaml Rimossi 3 event bindings
Controls\SettingsControl.xaml.cs Rimossi 3 eventi + handlers (-50 righe)

Funzionalità Impattate

Funzionalità Status
Gestione Cookie ? Automatica tramite browser
Impostazioni Export ? Funzionante
Impostazioni Predefinite ? Funzionante
Protezione Account ? Funzionante
Limiti Log ? Funzionante

?? Conclusione

Problema Risolto

  • ? Prima: Runtime crash all'avvio per eventi cookie obsoleti
  • ? Dopo: Applicazione si avvia correttamente, autenticazione automatica funzionante

Cleanup Completato

  • ? Rimossi eventi cookie da MainWindow.xaml
  • ? Rimossi eventi cookie da SettingsControl.xaml.cs
  • ? Aggiornato SaveAllSettings_Click per non usare eventi cookie
  • ? Aggiornato CancelAllSettings_Click per non usare eventi cookie

Testing Verificato

  • ? Build riuscita
  • ? Runtime senza errori
  • ? UI funzionante
  • ? Salvataggio impostazioni OK

Status: ? FIX COMPLETATO E TESTATO


Data Fix: 2025
Versione: 5.8+
Issue: Runtime error - eventi cookie obsoleti in XAML
Causa: Cleanup incompleto durante refactoring autenticazione automatica
Soluzione: Rimozione completa eventi cookie da XAML e code-behind
Status: ? RISOLTO

?? Riferimenti

  • MainWindow.xaml - Event bindings
  • Controls\SettingsControl.xaml.cs - Event definitions e handlers
  • Core\MainWindow.ConnectionHandlers.cs - Nuovo sistema autenticazione
  • Core\MainWindow.WebView.cs - Auto-import cookie
  • Documentation\FEATURE_WEBVIEW_PRELOAD_AND_COOKIE_EXTRACTION.md - Feature autenticazione automatica