Check for updates when tray menu opens
- Checks for updates in background when user clicks tray icon - Shows clickable blue banner when update available - Rate limited to once per hour to avoid spam - Version 1.1.5 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -18,6 +18,8 @@ public partial class MainWindow : Window
|
||||
private List<(XMonitor Monitor, List<InputSourceOption> Options)> _loadedMonitors = new();
|
||||
private Storyboard? _spinnerStoryboard;
|
||||
private DispatcherTimer? _showLogButtonTimer;
|
||||
private UpdateInfo? _pendingUpdate;
|
||||
private DateTime _lastUpdateCheck = DateTime.MinValue;
|
||||
|
||||
public MainWindow()
|
||||
{
|
||||
@@ -53,12 +55,50 @@ public partial class MainWindow : Window
|
||||
};
|
||||
_showLogButtonTimer.Start();
|
||||
|
||||
// Check for updates in background (max once per hour)
|
||||
if ((DateTime.Now - _lastUpdateCheck).TotalMinutes > 60)
|
||||
{
|
||||
_lastUpdateCheck = DateTime.Now;
|
||||
_ = CheckForUpdatesAsync();
|
||||
}
|
||||
|
||||
Dispatcher.BeginInvoke(new Action(() =>
|
||||
{
|
||||
Top = workArea.Bottom - ActualHeight - 10;
|
||||
}), DispatcherPriority.Loaded);
|
||||
}
|
||||
|
||||
private async Task CheckForUpdatesAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
var update = await UpdateChecker.CheckForUpdateAsync();
|
||||
if (update != null)
|
||||
{
|
||||
_pendingUpdate = update;
|
||||
await Dispatcher.InvokeAsync(() => ShowUpdateBanner(update));
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Silently ignore update check failures
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowUpdateBanner(UpdateInfo update)
|
||||
{
|
||||
updateBanner.Visibility = Visibility.Visible;
|
||||
updateText.Text = $"v{update.LatestVersion} available - Click to update";
|
||||
}
|
||||
|
||||
private void UpdateBanner_Click(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
||||
{
|
||||
if (_pendingUpdate != null && !string.IsNullOrEmpty(_pendingUpdate.DownloadUrl))
|
||||
{
|
||||
UpdateChecker.OpenDownloadPage(_pendingUpdate.DownloadUrl);
|
||||
}
|
||||
}
|
||||
|
||||
private void Window_Deactivated(object sender, EventArgs e)
|
||||
{
|
||||
Hide();
|
||||
|
||||
Reference in New Issue
Block a user