Skip to content

Commit

Permalink
Refactor check-update flow to better handle unobserved exceptions
Browse files Browse the repository at this point in the history
  • Loading branch information
peppy committed Dec 3, 2024
1 parent 2ceb3f6 commit 457957d
Showing 1 changed file with 44 additions and 27 deletions.
71 changes: 44 additions & 27 deletions osu.Game/Overlays/Settings/Sections/General/UpdateSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using System.Threading.Tasks;
using osu.Framework;
using osu.Framework.Allocation;
using osu.Framework.Extensions;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Localisation;
using osu.Framework.Logging;
Expand All @@ -13,6 +12,7 @@
using osu.Framework.Statistics;
using osu.Game.Configuration;
using osu.Game.Localisation;
using osu.Game.Online.Multiplayer;
using osu.Game.Overlays.Notifications;
using osu.Game.Overlays.Settings.Sections.Maintenance;
using osu.Game.Updater;
Expand All @@ -36,8 +36,11 @@ public partial class UpdateSettings : SettingsSubsection
[Resolved]
private Storage storage { get; set; } = null!;

[Resolved]
private OsuGame? game { get; set; }

[BackgroundDependencyLoader]
private void load(OsuConfigManager config, OsuGame? game)
private void load(OsuConfigManager config)
{
Add(new SettingsEnumDropdown<ReleaseStream>
{
Expand All @@ -50,31 +53,7 @@ private void load(OsuConfigManager config, OsuGame? game)
Add(checkForUpdatesButton = new SettingsButton
{
Text = GeneralSettingsStrings.CheckUpdate,
Action = () =>
{
checkForUpdatesButton.Enabled.Value = false;

var checkingNotification = new ProgressNotification { Text = GeneralSettingsStrings.CheckingForUpdates, };
notifications?.Post(checkingNotification);

Task.Run(updateManager.CheckForUpdateAsync).ContinueWith(task => Schedule(() =>
{
// This sequence allows the notification to be immediately dismissed.
checkingNotification.State = ProgressNotificationState.Cancelled;
checkingNotification.Close(false);

if (!task.GetResultSafely())
{
notifications?.Post(new SimpleNotification
{
Text = GeneralSettingsStrings.RunningLatestRelease(game!.Version),
Icon = FontAwesome.Solid.CheckCircle,
});
}

checkForUpdatesButton.Enabled.Value = true;
}));
}
Action = () => checkForUpdates().FireAndForget()
});
}

Expand Down Expand Up @@ -102,6 +81,44 @@ private void load(OsuConfigManager config, OsuGame? game)
}
}

private async Task checkForUpdates()
{
if (updateManager == null || game == null)
return;

checkForUpdatesButton.Enabled.Value = false;

var checkingNotification = new ProgressNotification
{
Text = GeneralSettingsStrings.CheckingForUpdates,
};
notifications?.Post(checkingNotification);

try
{
bool foundUpdate = await updateManager.CheckForUpdateAsync().ConfigureAwait(true);

if (!foundUpdate)
{
notifications?.Post(new SimpleNotification
{
Text = GeneralSettingsStrings.RunningLatestRelease(game.Version),
Icon = FontAwesome.Solid.CheckCircle,
});
}
}
catch
{
}
finally
{
// This sequence allows the notification to be immediately dismissed.
checkingNotification.State = ProgressNotificationState.Cancelled;
checkingNotification.Close(false);
checkForUpdatesButton.Enabled.Value = true;
}
}

private void exportLogs()
{
ProgressNotification notification = new ProgressNotification
Expand Down

0 comments on commit 457957d

Please sign in to comment.