using System; using System.Threading.Tasks; using System.Windows; using BetterGenshinImpact.Helpers.Ui; using MessageBoxResult = Wpf.Ui.Controls.MessageBoxResult; namespace BetterGenshinImpact.View.Windows; /// /// 仓库更新提示对话框 /// public partial class RepoUpdateDialog : Wpf.Ui.Controls.FluentWindow { private System.Windows.Threading.DispatcherTimer? _dialogTimer; private int _remainingSeconds; private readonly int _daysSinceUpdate; private TaskCompletionSource? _taskCompletionSource; /// /// 初始化仓库更新提示对话框 /// /// 距上次更新的天数 public RepoUpdateDialog(int daysSinceUpdate) { _daysSinceUpdate = daysSinceUpdate; InitializeComponent(); // 配置窗口属性 Title = "仓库更新提示"; MessageTextBlock.Text = $"脚本仓库已经 {daysSinceUpdate} 天未更新\n\n温馨提示:\n脚本内容跟随仓库版本,旧版仓库会订阅到旧版脚本。\n更新仓库后需要重新订阅脚本,以更新脚本内容。\n\n是否立即更新?"; Owner = Application.Current.MainWindow; // 注册事件 SourceInitialized += OnSourceInitialized; Loaded += OnLoaded; Closed += OnClosed; } private void OnSourceInitialized(object? sender, EventArgs e) { WindowHelper.TryApplySystemBackdrop(this); } private void OnLoaded(object sender, RoutedEventArgs e) { // 计算倒计时秒数:30 天为 5 秒,超过 30 天每多 2 天增加 1 秒 _remainingSeconds = 5 + (_daysSinceUpdate - 30) / 2; SecondaryButton.Content = $"直接打开 ({_remainingSeconds}s)"; StartDialogTimer(); } private void OnClosed(object? sender, EventArgs e) { StopDialogTimer(); _taskCompletionSource?.TrySetResult(MessageBoxResult.None); } /// /// 显示对话框并等待结果 /// public Task ShowDialogAsync() { _taskCompletionSource = new TaskCompletionSource(); ShowDialog(); return _taskCompletionSource.Task; } private void PrimaryButton_Click(object sender, RoutedEventArgs e) { _taskCompletionSource?.TrySetResult(MessageBoxResult.Primary); Close(); } private void SecondaryButton_Click(object sender, RoutedEventArgs e) { _taskCompletionSource?.TrySetResult(MessageBoxResult.Secondary); Close(); } /// /// 启动对话框定时器 /// private void StartDialogTimer() { // 创建定时器 _dialogTimer = new System.Windows.Threading.DispatcherTimer { Interval = TimeSpan.FromSeconds(1) }; _dialogTimer.Tick += OnTimerTick; _dialogTimer.Start(); } private void OnTimerTick(object? sender, EventArgs e) { _remainingSeconds--; if (_remainingSeconds > 0) { SecondaryButton.Content = $"直接打开 ({_remainingSeconds}s)"; } else { // 倒计时结束,启用按钮 SecondaryButton.Content = "直接打开"; SecondaryButton.IsEnabled = true; _dialogTimer?.Stop(); } } /// /// 停止对话框定时器 /// private void StopDialogTimer() { if (_dialogTimer != null) { _dialogTimer.Tick -= OnTimerTick; _dialogTimer.Stop(); _dialogTimer = null; } } }