Files
Nitrox/Nitrox.Launcher/ViewModels/UpdatesViewModel.cs
2025-07-06 00:23:46 +02:00

91 lines
2.5 KiB
C#

using System;
using System.Threading.Tasks;
using Avalonia.Collections;
using Avalonia.Threading;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Nitrox.Launcher.Models.Design;
using Nitrox.Launcher.Models.Utils;
using Nitrox.Launcher.ViewModels.Abstract;
using NitroxModel.Helper;
using NitroxModel.Logger;
namespace Nitrox.Launcher.ViewModels;
public partial class UpdatesViewModel : RoutableViewModelBase
{
[ObservableProperty]
private bool newUpdateAvailable;
[ObservableProperty]
private bool usingOfficialVersion;
[ObservableProperty]
private string version;
[ObservableProperty]
private string officialVersion;
[ObservableProperty]
private AvaloniaList<NitroxChangelog> nitroxChangelogs = [];
internal override async Task ViewContentLoadAsync()
{
await Dispatcher.UIThread.InvokeAsync(async () =>
{
try
{
NitroxChangelogs.Clear();
NitroxChangelogs.AddRange(await Downloader.GetChangeLogsAsync());
}
catch (Exception ex)
{
Log.Error(ex, "Error while trying to display Nitrox changelogs");
}
});
}
public async Task<bool> IsNitroxUpdateAvailableAsync()
{
try
{
Version currentVersion = NitroxEnvironment.Version;
Version latestVersion = await Downloader.GetNitroxLatestVersionAsync();
NewUpdateAvailable = latestVersion > currentVersion;
#if DEBUG
UsingOfficialVersion = false;
#else
UsingOfficialVersion = latestVersion >= currentVersion;
#endif
if (NewUpdateAvailable)
{
string versionMessage = $"A new version of the mod ({latestVersion}) is available.";
Log.Info(versionMessage);
LauncherNotifier.Warning(versionMessage);
}
Version = currentVersion.ToString();
OfficialVersion = latestVersion.ToString();
}
catch // If update check fails, just show "No Update Available" text unless on debug mode
{
NewUpdateAvailable = false;
#if DEBUG
UsingOfficialVersion = false;
#else
UsingOfficialVersion = true;
#endif
}
return NewUpdateAvailable || !UsingOfficialVersion;
}
[RelayCommand]
private void DownloadUpdate()
{
ProcessUtils.OpenUrl("nitrox.rux.gg/download");
}
}