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.
201 lines
7.2 KiB
C#
201 lines
7.2 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using AutoBidder.Services;
|
|
using AutoBidder.Utilities;
|
|
|
|
namespace AutoBidder
|
|
{
|
|
/// <summary>
|
|
/// User info and banner management - REFACTORED con SessionService
|
|
/// </summary>
|
|
public partial class MainWindow
|
|
{
|
|
private System.Windows.Threading.DispatcherTimer _userBannerTimer;
|
|
private System.Windows.Threading.DispatcherTimer _userHtmlTimer;
|
|
private SessionService _sessionService; // NUOVO: Servizio centralizzato
|
|
|
|
private void InitializeUserInfoTimers()
|
|
{
|
|
// Timer per aggiornamento dati utente da HTML ogni 5 minuti (PRINCIPALE)
|
|
_userHtmlTimer = new System.Windows.Threading.DispatcherTimer();
|
|
_userHtmlTimer.Interval = TimeSpan.FromMinutes(5);
|
|
_userHtmlTimer.Tick += UserHtmlTimer_Tick;
|
|
_userHtmlTimer.Start();
|
|
|
|
// Timer per aggiornamento banner API ogni 10 minuti (SECONDARIO - fallback)
|
|
_userBannerTimer = new System.Windows.Threading.DispatcherTimer();
|
|
_userBannerTimer.Interval = TimeSpan.FromMinutes(10);
|
|
_userBannerTimer.Tick += UserBannerTimer_Tick;
|
|
_userBannerTimer.Start();
|
|
}
|
|
|
|
private void InitializeSessionService()
|
|
{
|
|
// NUOVO: Inizializza SessionService
|
|
_sessionService = new SessionService(_auctionMonitor.GetApiClient());
|
|
|
|
// Event handlers
|
|
_sessionService.OnLog += (msg) => Log(msg, LogLevel.Info);
|
|
_sessionService.OnSessionChanged += (session) =>
|
|
{
|
|
Dispatcher.Invoke(() => SetUserBanner(session.Username, session.RemainingBids));
|
|
};
|
|
}
|
|
|
|
private void SetUserBanner(string username, int? remainingBids)
|
|
{
|
|
try
|
|
{
|
|
var session = _sessionService?.GetCurrentSession();
|
|
|
|
if (!string.IsNullOrEmpty(username))
|
|
{
|
|
// === HEADER - 2 RIGHE ===
|
|
// Riga 1: Puntate + Credito
|
|
RemainingBidsText.Text = remainingBids?.ToString() ?? "0";
|
|
|
|
if (session?.ShopCredit > 0)
|
|
{
|
|
AuctionMonitor.ShopCreditText.Text = $"EUR {session.ShopCredit:F2}";
|
|
}
|
|
else
|
|
{
|
|
AuctionMonitor.ShopCreditText.Text = "EUR 0.00";
|
|
}
|
|
|
|
// Riga 2: Aste vinte (TODO: implementare)
|
|
BannerAsteDaRiscattare.Text = "0";
|
|
|
|
// === SIDEBAR - Pannello Utente ===
|
|
// Username
|
|
SidebarUsernameText.Text = username;
|
|
|
|
// ID Utente
|
|
if (session?.UserId > 0)
|
|
{
|
|
SidebarUserIdText.Text = $"ID: {session.UserId}";
|
|
SidebarUserIdText.Visibility = System.Windows.Visibility.Visible;
|
|
}
|
|
else
|
|
{
|
|
SidebarUserIdText.Visibility = System.Windows.Visibility.Collapsed;
|
|
}
|
|
|
|
// Email
|
|
if (!string.IsNullOrEmpty(session?.Email))
|
|
{
|
|
SidebarUserEmailText.Text = session.Email;
|
|
SidebarUserEmailText.Visibility = System.Windows.Visibility.Visible;
|
|
}
|
|
else
|
|
{
|
|
SidebarUserEmailText.Visibility = System.Windows.Visibility.Collapsed;
|
|
}
|
|
|
|
// Mostra il pannello sidebar
|
|
SidebarUserInfoPanel.Visibility = System.Windows.Visibility.Visible;
|
|
}
|
|
else
|
|
{
|
|
// Nascondi pannello sidebar
|
|
SidebarUserInfoPanel.Visibility = System.Windows.Visibility.Collapsed;
|
|
|
|
// Reset header
|
|
RemainingBidsText.Text = "0";
|
|
AuctionMonitor.ShopCreditText.Text = "EUR 0.00";
|
|
BannerAsteDaRiscattare.Text = "0";
|
|
}
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
private async void UserBannerTimer_Tick(object? sender, EventArgs e)
|
|
{
|
|
// Usa SessionService per refresh
|
|
if (_sessionService != null)
|
|
{
|
|
await _sessionService.RefreshUserInfoAsync();
|
|
}
|
|
}
|
|
|
|
private async void UserHtmlTimer_Tick(object? sender, EventArgs e)
|
|
{
|
|
// Usa SessionService per refresh
|
|
if (_sessionService != null)
|
|
{
|
|
await _sessionService.RefreshUserInfoAsync();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Carica sessione salvata - SEMPLIFICATO con SessionService
|
|
/// </summary>
|
|
private async void LoadSavedSession()
|
|
{
|
|
try
|
|
{
|
|
// 1. Carica sessione da disco
|
|
var session = _sessionService.LoadSession();
|
|
|
|
if (session == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
// 2. Mostra cookie in UI
|
|
try
|
|
{
|
|
SettingsCookieTextBox.Text = session.CookieString ?? string.Empty;
|
|
}
|
|
catch { }
|
|
|
|
StartButton.IsEnabled = true;
|
|
|
|
// 3. Valida e attiva in background
|
|
_ = Task.Run(async () =>
|
|
{
|
|
var result = await _sessionService.ValidateAndActivateSessionAsync(
|
|
session.CookieString,
|
|
session.Username
|
|
);
|
|
|
|
if (!result.Success)
|
|
{
|
|
Dispatcher.Invoke(() =>
|
|
{
|
|
Log($"[WARN] Validazione fallita: {result.ErrorMessage}");
|
|
Log($"[INFO] Aggiorna il cookie nelle Impostazioni se necessario");
|
|
});
|
|
}
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log($"[WARN] Errore caricamento sessione: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Aggiorna immediatamente il banner delle puntate residue (chiamato dopo ogni puntata)
|
|
/// </summary>
|
|
public void UpdateRemainingBidsDisplay()
|
|
{
|
|
try
|
|
{
|
|
var session = _sessionService?.GetCurrentSession();
|
|
if (session != null && session.RemainingBids > 0)
|
|
{
|
|
RemainingBidsText.Text = session.RemainingBids.ToString();
|
|
Log($"[BANNER UPDATE] Puntate residue aggiornate: {session.RemainingBids}", LogLevel.Info);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log($"[ERROR] Errore aggiornamento banner: {ex.Message}", LogLevel.Error);
|
|
}
|
|
}
|
|
}
|
|
}
|