// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System.Linq; using System.Threading.Tasks; using osu.Framework.Allocation; using osu.Framework.Graphics.Sprites; using osu.Game.Online.API; using osu.Game.Overlays.Notifications; namespace osu.Game.Updater { /// /// An update manager that shows notifications if a newer release is detected. /// This is a case where updates are handled externally by a package manager or other means, so no action is performed on clicking the notification. /// public class NoActionUpdateManager : UpdateManager { private string version; [BackgroundDependencyLoader] private void load(OsuGameBase game) { version = game.Version; } protected override async Task PerformUpdateCheck() { try { var releases = new OsuJsonWebRequest("https://api.github.com/repos/ppy/osu/releases/latest"); await releases.PerformAsync().ConfigureAwait(false); var latest = releases.ResponseObject; // avoid any discrepancies due to build suffixes for now. // eventually we will want to support release streams and consider these. version = version.Split('-').First(); string latestTagName = latest.TagName.Split('-').First(); if (latestTagName != version) { Notifications.Post(new SimpleNotification { Text = $"A newer release of osu! has been found ({version} → {latestTagName}).\n\n" + "Check with your package manager / provider to bring osu! up-to-date!", Icon = FontAwesome.Solid.Upload, }); return true; } } catch { // we shouldn't crash on a web failure. or any failure for the matter. return true; } return false; } } }