Browse Source

warnings fixes, nuget packages update

Veloe 2 years ago
parent
commit
cd416583cd

+ 12 - 12
VeloeMinecraftLauncher/VeloeMinecraftLauncher.csproj

@@ -9,8 +9,8 @@
 		<DebugType>embedded</DebugType>
 		<StartupObject>VeloeMinecraftLauncher.Program</StartupObject>
 		<PlatformTarget>x64</PlatformTarget>
-		<AssemblyVersion>1.4.0.44</AssemblyVersion>
-		<FileVersion>1.4.0.44</FileVersion>
+		<AssemblyVersion>1.4.0.101</AssemblyVersion>
+		<FileVersion>1.4.0.101</FileVersion>
 		<Configurations>Debug;Release</Configurations>
 	</PropertyGroup>
 	<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@@ -32,18 +32,18 @@
 		<TrimmableAssembly Include="Avalonia.Themes.Default" />
 	</ItemGroup>
 	<ItemGroup>
-		<PackageReference Include="Avalonia" Version="11.0.0" />
-		<PackageReference Include="Avalonia.Controls.DataGrid" Version="11.0.0" />
-		<PackageReference Include="Avalonia.Desktop" Version="11.0.0" />
+		<PackageReference Include="Avalonia" Version="11.0.4" />
+		<PackageReference Include="Avalonia.Controls.DataGrid" Version="11.0.4" />
+		<PackageReference Include="Avalonia.Desktop" Version="11.0.4" />
 		<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
-		<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.0" />
-		<PackageReference Include="Avalonia.Fonts.Inter" Version="11.0.0" />
-		<PackageReference Include="Avalonia.ReactiveUI" Version="11.0.0" />
-		<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.0" />
-		<PackageReference Include="Avalonia.Xaml.Interactivity" Version="11.0.0.1" />
+		<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.4" />
+		<PackageReference Include="Avalonia.Fonts.Inter" Version="11.0.4" />
+		<PackageReference Include="Avalonia.ReactiveUI" Version="11.0.4" />
+		<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.4" />
+		<PackageReference Include="Avalonia.Xaml.Interactivity" Version="11.0.2" />
 		<PackageReference Include="Microsoft.AspNet.WebApi.Client" Version="5.2.9" />
-		<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="7.0.8" />
-		<PackageReference Include="ReactiveUI.Blazor" Version="19.3.3" />
+		<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="7.0.10" />
+		<PackageReference Include="ReactiveUI.Blazor" Version="19.4.1" />
 		<PackageReference Include="ReactiveUI.Validation" Version="3.1.7" />
 		<PackageReference Include="Serilog" Version="3.0.1" />
 		<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />

+ 47 - 38
VeloeMinecraftLauncher/ViewModels/MainWindowViewModel.cs

@@ -19,8 +19,6 @@ using Avalonia.Controls;
 using Avalonia.Threading;
 using System.IO.Compression;
 using ReactiveUI.Validation.Extensions;
-using Avalonia.Media;
-using Avalonia.Data;
 using System.Collections.Generic;
 using VeloeMinecraftLauncher.Models.Entity;
 using VeloeMinecraftLauncher.Models;
@@ -34,46 +32,49 @@ public class MainWindowViewModel : ViewModelBase
 {
     public MainWindowViewModel()
     {
+        _downloadedVersions = new();
         _serverPanels = new();
 
-        Task.Run(async () =>
+        try
         {
-            try
-            {
-                //creating logger
-                EventSink eventSink = new(null);
-                eventSink.DataReceived += LogHandler;
-                var hook = new CaptureFilePathHook();
-                _logger = new LoggerConfiguration()
-                    .MinimumLevel.Debug()
-                    .WriteTo.Sink(eventSink, Settings.consoleLogEventLevel)
-                    .WriteTo.File("launcher.log", Settings.fileLogEventLevel, fileSizeLimitBytes: Settings.maxLog * 1024, rollOnFileSizeLimit: true, hooks: hook)// restricted... is Optional
-                    .CreateLogger();
-                Settings.logger = _logger;
-                Settings.logFilePath = hook;
-                //loading settings
-                _logger.Debug("Loading settings.");
-                Settings.LoadSettings();
-                _username = Settings.username;
-
-                //loading local verions
-                _logger.Debug("Loading local versions.");
-                updateAvailable();
-            }
-            catch (Exception ex)
+            //creating logger
+            EventSink eventSink = new(null);
+            eventSink.DataReceived += LogHandler;
+            var hook = new CaptureFilePathHook();
+            _logger = new LoggerConfiguration()
+                .MinimumLevel.Debug()
+                .WriteTo.Sink(eventSink, Settings.consoleLogEventLevel)
+                .WriteTo.File("launcher.log", Settings.fileLogEventLevel, fileSizeLimitBytes: Settings.maxLog * 1024, rollOnFileSizeLimit: true, hooks: hook)// restricted... is Optional
+                .CreateLogger();
+            Settings.logger = _logger;
+            Settings.logFilePath = hook;
+            //loading settings
+            _logger.Debug("Loading settings.");
+            Settings.LoadSettings();
+            _username = Settings.username;
+
+            //loading local verions
+            _logger.Debug("Loading local versions.");
+            updateAvailable();
+        }
+        catch (Exception ex)
+        {
+            OpenErrorWindow(ex);
+            if (_logger is null)
             {
-                OpenErrorWindow(ex);
-                if (_logger is null)
-                {
-                    _logger = new LoggerConfiguration().MinimumLevel.Debug().CreateLogger();
-                }
+                _logger = new LoggerConfiguration().MinimumLevel.Debug().CreateLogger();
             }
-
+        }
+        finally
+        {
             this.ValidationRule(
                 viewModel => viewModel.Username,
                 value => { return !string.IsNullOrEmpty(value); },
                 "Empty username.");
+        }
 
+        Task.Run(async () =>
+        {
             UpdateUpdater();
 
             try
@@ -234,8 +235,8 @@ public class MainWindowViewModel : ViewModelBase
     ILogger _logger;
 
     LatestLauncherVersion? _latestLauncherInfo;
-    DownloadedVersion _downloadedVersion;
-    DownloadedVersion _startedVersion;
+    DownloadedVersion? _downloadedVersion;
+    DownloadedVersion? _startedVersion;
 
     ObservableCollection<DownloadedVersion> _downloadedVersions;
     ObservableCollection<ServerPanelModel> _serverPanels;
@@ -254,7 +255,7 @@ public class MainWindowViewModel : ViewModelBase
 
     public ObservableCollection<Changelog>? Changelogs { get; private set; }
 
-    public DownloadedVersion DownloadedVersion
+    public DownloadedVersion? DownloadedVersion
     {
         get => _downloadedVersion;
         set => this.RaiseAndSetIfChanged(ref _downloadedVersion, value);
@@ -355,7 +356,7 @@ public class MainWindowViewModel : ViewModelBase
         set => this.RaisePropertyChanged(nameof(ConsoleTextCaretIndex));
     }
 
-    public void OnClickCommand()
+    public async void OnClickCommand()
     {
         using var versionsDownloaderViewModel = new VersionsDownloaderViewModel();
         var versionsDownloader = new VersionsDownloader 
@@ -365,8 +366,16 @@ public class MainWindowViewModel : ViewModelBase
        
         if (Avalonia.Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop && desktop.MainWindow is not null)
         {
-            versionsDownloader.Closed += updateAvailable;
-            versionsDownloader.ShowDialog(desktop.MainWindow);            
+            try
+            {
+                versionsDownloader.Closed += updateAvailable;
+                await versionsDownloader.ShowDialog(desktop.MainWindow);
+            }
+            catch (Exception ex)
+            {
+                //sometimes throws collection modified exception in manager tab
+                OpenErrorWindow(ex);
+            }
         }
     }
 

+ 23 - 25
VeloeMinecraftLauncher/ViewModels/SettingsWindowViewModel.cs

@@ -10,6 +10,7 @@ using System.Collections.ObjectModel;
 using Serilog.Events;
 using System.Linq;
 using ReactiveUI.Validation.Components;
+using Avalonia.Platform.Storage;
 
 namespace VeloeMinecraftLauncher.ViewModels;
 
@@ -180,50 +181,47 @@ public class SettingsWindowViewModel : ViewModelBase
     {
         Task.Run(async() =>
         {
-            var dialog = new OpenFolderDialog();
-
             var initPath = String.Empty;
 
-            if (Settings.minecraftForlderPath is not null)
-                if (Settings.minecraftForlderPath != String.Empty)
-                    initPath = Path.GetFullPath(Settings.minecraftForlderPath);
+            if (string.IsNullOrEmpty(Settings.minecraftForlderPath))
+                initPath = Path.GetFullPath(Settings.minecraftForlderPath);
+
+            var folderPickerOpenOptions = new FolderPickerOpenOptions() 
+            {
+                AllowMultiple = false,
+                SuggestedStartLocation = await window.StorageProvider.TryGetFolderFromPathAsync(initPath)
+            };
 
-            dialog.Directory = initPath;
+            var result = await window.StorageProvider.OpenFolderPickerAsync(folderPickerOpenOptions);
 
-            var result = await dialog.ShowAsync(window);
-            if (result is null)
-                return;
-            
-            if (result == String.Empty)
+            if (result is null || result.Count != 1 || result.First().Path.AbsolutePath == String.Empty)
                 return;
 
-            MinecraftFolderPath = result;
+            MinecraftFolderPath = result.First().Path.AbsolutePath;
         });
     }
 
     public void OpenJavaPathDialog(Window window)
     {
-        Task.Run(() =>
+        Task.Run(async() =>
         {
-            OpenFileDialog dialog = new OpenFileDialog();
-
             var initPath = String.Empty;
 
-            if (Settings.javaPath is not null)
-                if (Settings.javaPath != String.Empty)
-                    initPath = Path.GetFullPath(Settings.javaPath);
+            if (string.IsNullOrEmpty(Settings.javaPath))
+                initPath = Path.GetFullPath(Settings.javaPath);
 
-            dialog.AllowMultiple = false;
-            dialog.Directory = initPath;
+            var folderPickerOpenOptions = new FolderPickerOpenOptions()
+            {
+                AllowMultiple = false,
+                SuggestedStartLocation = await window.StorageProvider.TryGetFolderFromPathAsync(initPath)
+            };
 
-            var result = dialog.ShowAsync(window).Result;
-            if (result is null)
-                return;
+            var result = await window.StorageProvider.OpenFolderPickerAsync(folderPickerOpenOptions);
 
-            if (result[0] == String.Empty)
+            if (result is null || result.Count != 1 || result.First().Path.AbsolutePath == String.Empty)
                 return;
 
-            JavaPath = result[0];
+            JavaPath = result.First().Path.AbsolutePath;
         });
     }
 

+ 31 - 23
VeloeMinecraftLauncher/ViewModels/VersionsDownloaderViewModel.cs

@@ -54,11 +54,13 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
     ObservableCollection<Entity.VersionManifest.Version> _filteredVersions;
     ObservableCollection<DownloadedVersion> _downloadedVersions;
     ObservableCollection<Modpack> _modpackVersions;
+
     ObservableCollection<TreeNode> _downloadedVersionTree;
     TreeNode _libraries;
+
     List<Entity.VersionManifest.Version> _modpackVersionsAsVersion;
-    Entity.VersionManifest.Version _filteredVersion;
-    DownloadedVersion _downloadedVersion;
+    Entity.VersionManifest.Version? _filteredVersion;
+    DownloadedVersion? _downloadedVersion;
     Modpack? _selectedModpack;
     VersionManifest _versionManifest;
 
@@ -68,28 +70,34 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
 
         this.PropertyChanged += OnFilteredVersionPropertyChanged;
         this.PropertyChanged += OnDownloadedVersionPropertyChanged;
+        _logger = Settings.logger;
+
+        ArgumentNullException.ThrowIfNull(_logger);
+
+        if (_versionManifest is null) _versionManifest = new();
+
+        if (_filteredVersions is null) _filteredVersions = new();
+        if (_modpackVersions is null) _modpackVersions = new();
+        if (_modpackVersionsAsVersion is null) 
+            _modpackVersionsAsVersion = _modpackVersions
+                                            .Select(v => new Entity.VersionManifest.Version() 
+                                            { 
+                                                Id = v.Name, 
+                                                Type = "modpack", 
+                                                ComplianceLevel = v.Revision 
+                                            })
+                                            .ToList();
+
+        if (_libraries is null) _libraries = new();
+        if (_downloadedVersions is null) _downloadedVersions = new();
+        if (_downloadedVersionTree is null) _downloadedVersionTree = new();
+        if (DownloadedVersionsDictionary is null) DownloadedVersionsDictionary = new();
 
         try
         {
-            _logger = Settings.logger;
             Task.Run(async () =>
             {              
-                if (FilteredVersions is null)
-                {
-                    FilteredVersions = new();
-                }
-                if (_modpackVersions is null)
-                {
-                    _modpackVersions = new();
-                }
-                if (DownloadedVersionTree is null)
-                {
-                    _downloadedVersionTree = new();
-                }
-                if (DownloadedVersionsDictionary is null)
-                {
-                    DownloadedVersionsDictionary = new();
-                }
+                
                 _logger.Debug("Getting versionManifest.json");
                 _versionManifest = await Downloader.DownloadAndDeserializeJsonData<VersionManifest>("https://launchermeta.mojang.com/mc/game/version_manifest_v2.json") ?? new();
                 _modpackVersions.AddRange(await Downloader.DownloadAndDeserializeJsonData<List<Modpack>>("https://files.veloe.link/launcher/modpacks.json") ?? new());
@@ -106,7 +114,7 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
         }
     }
 
-    public Entity.VersionManifest.Version FilteredVersion
+    public Entity.VersionManifest.Version? FilteredVersion
     {
         get { return _filteredVersion; }
         set 
@@ -119,7 +127,7 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
         }
     }
 
-    public DownloadedVersion DownloadedVersion
+    public DownloadedVersion? DownloadedVersion
     {
         get => _downloadedVersion;
         set 
@@ -274,7 +282,7 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
 
     private async void OnFilteredVersionPropertyChanged(object? sender, PropertyChangedEventArgs e)
     {
-        if (e.PropertyName is nameof(FilteredVersion))
+        if (e.PropertyName is nameof(FilteredVersion) && FilteredVersion is not null)
         { 
             await DownloadButtonTextUpdateAsync(FilteredVersion);
             await GetFilteredVersionDownloadableFeaturesAsync(FilteredVersion);
@@ -283,7 +291,7 @@ public class VersionsDownloaderViewModel : ViewModelBase, IDisposable
 
     private async void OnDownloadedVersionPropertyChanged(object? sender, PropertyChangedEventArgs e)
     {
-        if (e.PropertyName is nameof(DownloadedVersion))
+        if (e.PropertyName is nameof(DownloadedVersion) && DownloadedVersion is not null)
         {
             await CreateNewTreeListAsync(DownloadedVersion);
         }