diff --git a/Mlaumcherb.Client.Avalonia/GameVersion.cs b/Mlaumcherb.Client.Avalonia/GameVersion.cs index c6ec5cc..e4a12be 100644 --- a/Mlaumcherb.Client.Avalonia/GameVersion.cs +++ b/Mlaumcherb.Client.Avalonia/GameVersion.cs @@ -38,7 +38,7 @@ public class GameVersion _descriptor.javaVersion.component, LauncherApp.Config.redirect_game_output); } - public async Task Download(bool update, Action networkTaskCreatedCallback) + public async Task Download(bool checkHashes, Action networkTaskCreatedCallback) { LauncherApp.Logger.LogInfo(Id, $"started updating version {Id}"); @@ -47,9 +47,9 @@ public class GameVersion new AssetsDownloadTaskFactory(_descriptor), new LibrariesDownloadTaskFactory(_descriptor, _libraries), ]; - if (LauncherApp.Config.download_java) + if (LauncherApp.Config.download_java && (!File.Exists(JavaExecutableFilePath) || checkHashes)) taskFactories.Add(new JavaDownloadTaskFactory(_descriptor)); - if (_descriptor.modpack != null) + if (_descriptor.modpack != null) taskFactories.Add(new ModpackDownloadTaskFactory(_descriptor)); // has to be downloaded last because it is used to check if version is installed taskFactories.Add(new VersionJarDownloadTaskFactory(_descriptor)); @@ -57,7 +57,7 @@ public class GameVersion var networkTasks = new List(); for (int i = 0; i < taskFactories.Count; i++) { - var nt = await taskFactories[i].CreateAsync(update); + var nt = await taskFactories[i].CreateAsync(checkHashes); if (nt != null) { networkTasks.Add(nt); diff --git a/Mlaumcherb.Client.Avalonia/Mlaumcherb.Client.Avalonia.csproj b/Mlaumcherb.Client.Avalonia/Mlaumcherb.Client.Avalonia.csproj index 56d202e..2f2881e 100644 --- a/Mlaumcherb.Client.Avalonia/Mlaumcherb.Client.Avalonia.csproj +++ b/Mlaumcherb.Client.Avalonia/Mlaumcherb.Client.Avalonia.csproj @@ -12,7 +12,6 @@ true капитал\кубе.ico млаумчерб - Release;Debug x64 AVLN3001 @@ -25,7 +24,7 @@ - + @@ -35,9 +34,5 @@ - - - - diff --git a/Mlaumcherb.Client.Avalonia/зримое/LauncherApp.axaml.cs b/Mlaumcherb.Client.Avalonia/зримое/LauncherApp.axaml.cs index 2a1f31b..0140004 100644 --- a/Mlaumcherb.Client.Avalonia/зримое/LauncherApp.axaml.cs +++ b/Mlaumcherb.Client.Avalonia/зримое/LauncherApp.axaml.cs @@ -2,7 +2,6 @@ using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; using Mlaumcherb.Client.Avalonia.классы; -using Mlaumcherb.Client.Avalonia.сеть; using Mlaumcherb.Client.Avalonia.сеть.Update; using Mlaumcherb.Client.Avalonia.холопы; @@ -20,19 +19,26 @@ public class LauncherApp : Application Config = Config.LoadFromFile(); Logger.DebugLogEnabled = Config.debug; AvaloniaXamlLoader.Load(this); - - Update(); - // some file required by forge installer - if (!File.Exists("launcher_profiles.json")) + try { - File.WriteAllText("launcher_profiles.json", "{}"); - } + SelfUpdateAsync(); + + // some file required by forge installer + if (!File.Exists("launcher_profiles.json")) + { + File.WriteAllText("launcher_profiles.json", "{}"); + } - InstalledVersionCatalog = InstalledVersionCatalog.Load(); + InstalledVersionCatalog = InstalledVersionCatalog.Load(); + } + catch (Exception e) + { + ErrorHelper.ShowMessageBox(nameof(LauncherApp), e); + } } - private async void Update() + private async void SelfUpdateAsync() { try { @@ -46,6 +52,10 @@ public class LauncherApp : Application Logger.LogInfo(nameof(LauncherApp), "restarting..."); upd.RestartSelf(); } + else + { + Logger.LogInfo(nameof(LauncherApp), "no updates found"); + } } catch (Exception e) { diff --git a/Mlaumcherb.Client.Avalonia/зримое/MainWindow.axaml.cs b/Mlaumcherb.Client.Avalonia/зримое/MainWindow.axaml.cs index 3520aa9..6ca189f 100644 --- a/Mlaumcherb.Client.Avalonia/зримое/MainWindow.axaml.cs +++ b/Mlaumcherb.Client.Avalonia/зримое/MainWindow.axaml.cs @@ -71,7 +71,7 @@ public partial class MainWindow : Window try { LauncherApp.Logger.OnLogMessage += GuiLogMessage; - LauncherVersionTextBox.Text = $"v {Assembly.GetExecutingAssembly().GetName().Version}"; + LauncherVersionTextBox.Text = $"v{Assembly.GetExecutingAssembly().GetName().Version}"; PlayerName = LauncherApp.Config.player_name; MemoryLimit = LauncherApp.Config.max_memory; @@ -92,6 +92,20 @@ public partial class MainWindow : Window } } + protected override void OnUnloaded(RoutedEventArgs e) + { + SaveGuiPropertiesToConfig(); + } + + private void SaveGuiPropertiesToConfig() + { + LauncherApp.Config.player_name = PlayerName; + LauncherApp.Config.max_memory = MemoryLimit; + LauncherApp.Config.download_java = EnableJavaDownload; + LauncherApp.Config.redirect_game_output = RedirectGameOutput; + LauncherApp.Config.SaveToFile(); + } + private void UpdateInstalledVersionsCatalogView(string? selectVersion) { LauncherApp.InstalledVersionCatalog.CheckInstalledVersions(); @@ -121,8 +135,15 @@ public partial class MainWindow : Window private void RescanInstalledVersionsButton_OnClick(object? sender, RoutedEventArgs e) { - var selectedVersionView = InstalledVersionCatalogComboBox.SelectedItem as InstalledGameVersionItemView; - UpdateInstalledVersionsCatalogView(selectedVersionView?.Props.Id); + try + { + var selectedVersionView = InstalledVersionCatalogComboBox.SelectedItem as InstalledGameVersionItemView; + UpdateInstalledVersionsCatalogView(selectedVersionView?.Props.Id); + } + catch (Exception ex) + { + ErrorHelper.ShowMessageBox(nameof(MainWindow), ex); + } } private void GuiLogMessage(LauncherLogger.LogMessage msg) @@ -147,22 +168,27 @@ public partial class MainWindow : Window Dispatcher.UIThread.Invoke(() => LaunchButton.IsEnabled = false); LauncherApp.Config.last_launched_version = selectedVersionView.Props.Id; - LauncherApp.Config.player_name = PlayerName; - LauncherApp.Config.max_memory = MemoryLimit; - LauncherApp.Config.download_java = EnableJavaDownload; - LauncherApp.Config.redirect_game_output = RedirectGameOutput; - LauncherApp.Config.SaveToFile(); + SaveGuiPropertiesToConfig(); var v = await selectedVersionView.Props.LoadDescriptor(UpdateGameFiles); - await v.Download(UpdateGameFiles, nt => - { - Dispatcher.UIThread.Invoke(() => + + try + { + await v.Download(UpdateGameFiles, nt => { - DownloadsPanel.Children.Add(new NetworkTaskView(nt, - ntv => DownloadsPanel.Children.Remove(ntv))); - }); - } - ); + Dispatcher.UIThread.Invoke(() => + { + DownloadsPanel.Children.Add(new NetworkTaskView(nt, + ntv => DownloadsPanel.Children.Remove(ntv))); + }); + } + ); + } + catch (Exception ex) + { + ErrorHelper.ShowMessageBox(nameof(MainWindow), ex); + } + Dispatcher.UIThread.Invoke(() => { UpdateGameFiles = false; @@ -183,7 +209,6 @@ public partial class MainWindow : Window { try { - string workingDir = Directory.GetCurrent().ToString(); LauncherApp.Logger.LogDebug(nameof(MainWindow), $"opening working directory: {workingDir}"); diff --git a/Mlaumcherb.Client.Avalonia/классы/Пролетариат/InstalledVersionCatalog.cs b/Mlaumcherb.Client.Avalonia/классы/Пролетариат/InstalledVersionCatalog.cs index f6ba541..b71922b 100644 --- a/Mlaumcherb.Client.Avalonia/классы/Пролетариат/InstalledVersionCatalog.cs +++ b/Mlaumcherb.Client.Avalonia/классы/Пролетариат/InstalledVersionCatalog.cs @@ -29,7 +29,6 @@ public class InstalledVersionCatalog } catalog.CheckInstalledVersions(); - catalog.Save(); return catalog; } @@ -44,6 +43,7 @@ public class InstalledVersionCatalog /// /// Check if any versions were installed or deleted manually. + /// Calls /// public void CheckInstalledVersions() { @@ -53,17 +53,16 @@ public class InstalledVersionCatalog { string id = subdir.LastName().ToString(); if (!File.Exists(PathHelper.GetVersionDescriptorPath(id))) - throw new Exception( - $"Can't find version descriptor file in directory '{subdir}'. Rename it as directory name."); - + { + LauncherApp.Logger.LogWarn(nameof(CheckInstalledVersions), + $"Can't find version descriptor file in directory '{subdir}'. " + + $"Rename it as directory name."); + continue; + } + if (versions.TryGetValue(id, out var foundProps)) - { versionsUpdated.Add(foundProps); - } - else - { - versionsUpdated.Add(new InstalledGameVersionProps(id, null, null)); - } + else versionsUpdated.Add(new InstalledGameVersionProps(id, null, null)); } // reverse sort @@ -73,5 +72,7 @@ public class InstalledVersionCatalog versionsUpdated.Select(props => new KeyValuePair(props.Id, props) )); + + Save(); } } \ No newline at end of file diff --git a/Mlaumcherb.Client.Avalonia/сеть/NetworkHelper.cs b/Mlaumcherb.Client.Avalonia/сеть/NetworkHelper.cs index 258c9c9..66762c5 100644 --- a/Mlaumcherb.Client.Avalonia/сеть/NetworkHelper.cs +++ b/Mlaumcherb.Client.Avalonia/сеть/NetworkHelper.cs @@ -12,6 +12,7 @@ public static class NetworkHelper // thanks for Sashok :3 // https://github.com/new-sashok724/Launcher/blob/23485c3f7de6620d2c6b7b2dd9339c3beb6a0366/Launcher/source/helper/IOHelper.java#L259 _http.DefaultRequestHeaders.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); + _http.Timeout = TimeSpan.FromSeconds(4); } public static Task GetString(string url, CancellationToken ct = default) => _http.GetStringAsync(url, ct); diff --git a/build.sh b/build.sh index a133276..cfeea6b 100755 --- a/build.sh +++ b/build.sh @@ -40,6 +40,7 @@ case "$mode" in esac rm -rf "$outdir" +# when internet breaks again add --source /mnt/c/Users/User/.nuget/packages/ command="dotnet publish -c Release -o $outdir $args" echo "$command" $command