1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-05 02:53:21 +08:00
This commit is contained in:
smallketchup82 2024-12-03 13:52:56 +08:00 committed by GitHub
commit da74dc9963
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 64 additions and 9 deletions

View File

@ -2,10 +2,13 @@
// See the LICENCE file in the repository root for full licence text.
using System;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Logging;
using osu.Game;
using osu.Game.Configuration;
using osu.Game.Overlays;
using osu.Game.Overlays.Notifications;
using osu.Game.Screens.Play;
@ -16,7 +19,7 @@ namespace osu.Desktop.Updater
{
public partial class VelopackUpdateManager : Game.Updater.UpdateManager
{
private readonly UpdateManager updateManager;
private UpdateManager updateManager = null!;
private INotificationOverlay notificationOverlay = null!;
[Resolved]
@ -25,22 +28,45 @@ namespace osu.Desktop.Updater
[Resolved]
private ILocalUserPlayInfo? localUserInfo { get; set; }
[Resolved]
private OsuConfigManager osuConfigManager { get; set; } = null!;
private bool isInGameplay => localUserInfo?.PlayingState.Value != LocalUserPlayingState.NotPlaying;
private UpdateInfo? pendingUpdate;
public VelopackUpdateManager()
{
updateManager = new UpdateManager(new GithubSource(@"https://github.com/ppy/osu", null, false), new UpdateOptions
{
AllowVersionDowngrade = true,
});
}
private Bindable<ReleaseStream> releaseStream => osuConfigManager.GetBindable<ReleaseStream>(OsuSetting.ReleaseStream);
[BackgroundDependencyLoader]
private void load(INotificationOverlay notifications)
{
notificationOverlay = notifications;
UpdateOptions options = new UpdateOptions
{
AllowVersionDowngrade = true,
};
string arch = RuntimeInformation.OSArchitecture.ToString().ToLowerInvariant();
string platform = Environment.OSVersion.Platform switch
{
PlatformID.Win32NT => "win",
PlatformID.Unix => "linux-" + arch,
PlatformID.MacOSX => "osx-" + arch,
_ => throw new PlatformNotSupportedException(),
};
if (releaseStream.Value == ReleaseStream.Photon)
{
options.ExplicitChannel = $"{platform}-photon";
// TODO: The logging here is not correct. It should be reading from `VelopackLocator.GetDefault(null).Channel` instead. Should also probably be moved to a more appropriate location.
Logger.Log("Using photon channel");
}
else if (releaseStream.Value == ReleaseStream.Lazer)
options.ExplicitChannel = platform;
updateManager = new UpdateManager(new GithubSource(@"https://github.com/ppy/osu", null, false), options);
}
protected override async Task<bool> PerformUpdateCheck() => await checkForUpdateAsync().ConfigureAwait(false);

View File

@ -6,6 +6,7 @@ namespace osu.Game.Configuration
public enum ReleaseStream
{
Lazer,
Photon,
//Stable40,
//Beta40,
//Stable

View File

@ -13,6 +13,7 @@ using osu.Framework.Screens;
using osu.Framework.Statistics;
using osu.Game.Configuration;
using osu.Game.Localisation;
using osu.Game.Overlays.Dialog;
using osu.Game.Overlays.Notifications;
using osu.Game.Overlays.Settings.Sections.Maintenance;
using osu.Game.Updater;
@ -36,13 +37,40 @@ namespace osu.Game.Overlays.Settings.Sections.General
[Resolved]
private Storage storage { get; set; } = null!;
[Resolved]
private IDialogOverlay dialogOverlay { get; set; } = null!;
[BackgroundDependencyLoader]
private void load(OsuConfigManager config, OsuGame? game)
{
var releaseStream = config.GetBindable<ReleaseStream>(OsuSetting.ReleaseStream);
Add(new SettingsEnumDropdown<ReleaseStream>
{
LabelText = GeneralSettingsStrings.ReleaseStream,
Current = config.GetBindable<ReleaseStream>(OsuSetting.ReleaseStream),
Current = releaseStream,
});
bool debounce = false;
releaseStream.BindValueChanged(r =>
{
if (debounce)
{
debounce = false;
return;
}
if (game?.RestartAppWhenExited() == true)
{
game.AttemptExit();
}
else
{
dialogOverlay.Push(new ConfirmDialog("You must restart after changing release streams. Are you sure about this?", () => game?.AttemptExit(), () =>
{
debounce = true;
releaseStream.Value = r.OldValue;
}));
}
});
if (updateManager?.CanCheckForUpdate == true)