diff --git a/Млаумчерб.Клиент/Главне.cs b/Млаумчерб.Клиент/Главне.cs index 801b097..f5fa8f4 100644 --- a/Млаумчерб.Клиент/Главне.cs +++ b/Млаумчерб.Клиент/Главне.cs @@ -13,11 +13,16 @@ global using Directory = DTLib.Filesystem.Directory; global using Path = DTLib.Filesystem.Path; using System.Globalization; using Avalonia; +using Млаумчерб.Клиент.видимое; namespace Млаумчерб.Клиент; public class Главне { + public static readonly LauncherLogger Логгер = new(); + + public static Настройки Настройки = new(); + [STAThread] public static void Main(string[] args) { @@ -29,7 +34,7 @@ public class Главне } catch (Exception ex) { - Приложение.Логгер.LogError(nameof(Главне), ex); + Логгер.LogError(nameof(Главне), ex); } } diff --git a/Млаумчерб.Клиент/Игра.cs b/Млаумчерб.Клиент/Игра.cs index 3513378..0fa62a3 100644 --- a/Млаумчерб.Клиент/Игра.cs +++ b/Млаумчерб.Клиент/Игра.cs @@ -1,5 +1,6 @@ using CliWrap; using DTLib.Extensions; +using Млаумчерб.Клиент.видимое; using Млаумчерб.Клиент.классы; using static Млаумчерб.Клиент.классы.Пролетариат; @@ -28,7 +29,7 @@ public class GameVersionDescriptor string name = GetVersionDescriptorName(f); propsList.Add(new GameVersionProps(name, null, f)); } - var remoteVersions = await Network.GetDownloadableVersions(); + var remoteVersions = await Сеть.GetDownloadableVersions(); propsList.AddRange(remoteVersions); return propsList; } @@ -40,7 +41,7 @@ public class GameVersionDescriptor if (props.RemoteDescriptorUrl is null) throw new NullReferenceException("can't download game version descriptor '" + props.Name + "', because RemoteDescriptorUrl is null"); - await Network.DownloadFileHTTP(props.RemoteDescriptorUrl, props.LocalDescriptorPath); + await Сеть.DownloadFileHTTP(props.RemoteDescriptorUrl, props.LocalDescriptorPath); } return new GameVersionDescriptor(props); } @@ -48,13 +49,13 @@ public class GameVersionDescriptor private GameVersionDescriptor(GameVersionProps props) { _props = props; - WorkingDirectory = Path.Concat(Приложение.Настройки.путь_к_кубачу, Name); + WorkingDirectory = Path.Concat(Главне.Настройки.путь_к_кубачу, Name); string descriptorText = File.ReadAllText(props.LocalDescriptorPath); descriptor = JsonConvert.DeserializeObject(descriptorText) ?? throw new Exception($"can't parse descriptor file '{props.LocalDescriptorPath}'"); javaArgs = new JavaArguments(descriptor); gameArgs = new GameArguments(descriptor); - JavaExecutableFilePath = Path.Concat(Приложение.Настройки.путь_к_жабе, "bin", + JavaExecutableFilePath = Path.Concat(Главне.Настройки.путь_к_жабе, "bin", OperatingSystem.IsWindows() ? "javaw.exe" : "javaw"); } @@ -63,11 +64,11 @@ public class GameVersionDescriptor try { downloadCts = new CancellationTokenSource(); - if(Приложение.Настройки.скачать_жабу) - await Network.DownloadJava(descriptor.javaVersion, Приложение.Настройки.путь_к_жабе, force); - await Network.DownloadAssets(descriptor.assetIndex, downloadCts.Token, force); - await Network.DownloadVersionFile(descriptor.downloads.client.url, GetVersionJarFilePath(Name), force); - await Network.DownloadLibraries(descriptor.libraries, GetLibrariesDir(), force); + if(Главне.Настройки.скачать_жабу) + await Сеть.DownloadJava(descriptor.javaVersion, Главне.Настройки.путь_к_жабе, force); + await Сеть.DownloadAssets(descriptor.assetIndex, downloadCts.Token, force); + await Сеть.DownloadVersionFile(descriptor.downloads.client.url, GetVersionJarFilePath(Name), force); + await Сеть.DownloadLibraries(descriptor.libraries, GetLibrariesDir(), force); // await Network.DownloadModpack(modpack, WorkingDirectory, force); _props.IsDownloaded = true; } @@ -90,7 +91,7 @@ public class GameVersionDescriptor .WithWorkingDirectory(WorkingDirectory.ToString()) .WithArguments(javaArgsList) .WithArguments(gameArgsList); - Приложение.Логгер.LogInfo(nameof(GameVersionDescriptor), + Главне.Логгер.LogInfo(nameof(GameVersionDescriptor), $"launching the game" + "\njava: " + command.TargetFilePath + "\nworking_dir: " + command.WorkingDirPath + @@ -99,7 +100,7 @@ public class GameVersionDescriptor gameCts = new(); commandTask = command.ExecuteAsync(gameCts.Token); var result = await commandTask; - Приложение.Логгер.LogInfo(nameof(GameVersionDescriptor), $"game exited with code {result.ExitCode}"); + Главне.Логгер.LogInfo(nameof(GameVersionDescriptor), $"game exited with code {result.ExitCode}"); } public void Close() diff --git a/Млаумчерб.Клиент/Млаумчерб.Клиент.csproj b/Млаумчерб.Клиент/Млаумчерб.Клиент.csproj index b1b5add..7d66827 100644 --- a/Млаумчерб.Клиент/Млаумчерб.Клиент.csproj +++ b/Млаумчерб.Клиент/Млаумчерб.Клиент.csproj @@ -30,4 +30,19 @@ + + + VersionItemView.axaml + Code + + + Окне.axaml + Code + + + Приложение.axaml + Code + + + diff --git a/Млаумчерб.Клиент/Настройки.cs b/Млаумчерб.Клиент/Настройки.cs index da6ea44..68ee790 100644 --- a/Млаумчерб.Клиент/Настройки.cs +++ b/Млаумчерб.Клиент/Настройки.cs @@ -1,4 +1,6 @@ -namespace Млаумчерб.Клиент; +using Млаумчерб.Клиент.видимое; + +namespace Млаумчерб.Клиент; public record Настройки { @@ -12,10 +14,10 @@ public record Настройки public static Настройки ЗагрузитьИзФайла(string имя_файла = "млаумчерб.настройки") { - Приложение.Логгер.LogInfo(nameof(Настройки), $"попытка загрузить настройки из файла '{имя_файла}'"); + Главне.Логгер.LogInfo(nameof(Настройки), $"попытка загрузить настройки из файла '{имя_файла}'"); if(!File.Exists(имя_файла)) { - Приложение.Логгер.LogInfo(nameof(Настройки), "файл не существует"); + Главне.Логгер.LogInfo(nameof(Настройки), "файл не существует"); return new Настройки(); } @@ -31,15 +33,15 @@ public record Настройки $"Создан новый файл '{имя_файла}'."); } - Приложение.Логгер.LogInfo(nameof(Настройки), $"настройки загружены: {н}"); + Главне.Логгер.LogInfo(nameof(Настройки), $"настройки загружены: {н}"); return н; } public void СохранитьВФайл(string имя_файла = "млаумчерб.настройки") { - Приложение.Логгер.LogInfo(nameof(Настройки), $"попытка сохранить настройки в файл '{имя_файла}'"); + Главне.Логгер.LogInfo(nameof(Настройки), $"попытка сохранить настройки в файл '{имя_файла}'"); var текст = JsonConvert.SerializeObject(this, Formatting.Indented); File.WriteAllText(имя_файла, текст); - Приложение.Логгер.LogInfo(nameof(Настройки), $"настройки сохранены: {текст}"); + Главне.Логгер.LogInfo(nameof(Настройки), $"настройки сохранены: {текст}"); } } \ No newline at end of file diff --git a/Млаумчерб.Клиент/Ошибки.cs b/Млаумчерб.Клиент/Ошибки.cs index e2a103b..2933861 100644 --- a/Млаумчерб.Клиент/Ошибки.cs +++ b/Млаумчерб.Клиент/Ошибки.cs @@ -4,6 +4,7 @@ using MsBox.Avalonia; using MsBox.Avalonia.Dto; using MsBox.Avalonia.Enums; using MsBox.Avalonia.Models; +using Млаумчерб.Клиент.видимое; namespace Млаумчерб.Клиент; @@ -14,7 +15,7 @@ public static class Ошибки internal static async void ПоказатьСообщение(string context, string err) { - Приложение.Логгер.LogError(nameof(Ошибки), err); + Главне.Логгер.LogError(nameof(Ошибки), err); var box = MessageBoxManager.GetMessageBoxCustom(new MessageBoxCustomParams { ButtonDefinitions = new List { new() { Name = "пон" } }, diff --git a/Млаумчерб.Клиент/Network.cs b/Млаумчерб.Клиент/Сеть.cs similarity index 87% rename from Млаумчерб.Клиент/Network.cs rename to Млаумчерб.Клиент/Сеть.cs index e0da061..ee1f2c3 100644 --- a/Млаумчерб.Клиент/Network.cs +++ b/Млаумчерб.Клиент/Сеть.cs @@ -1,11 +1,12 @@ using System.Buffers; using System.Net.Http; +using Млаумчерб.Клиент.видимое; using Млаумчерб.Клиент.классы; using Timer = DTLib.Timer; namespace Млаумчерб.Клиент; -public static class Network +public static class Сеть { private static HttpClient http = new(); private const string ASSET_SERVER_URL = "https://resources.download.minecraft.net/"; @@ -63,9 +64,9 @@ public static class Network File.Delete(indexFilePathTmp); // TODO: add something to Downloads ScrollList - Приложение.Логгер.LogInfo(nameof(DownloadAssets), $"started downloading asset index to '{indexFilePathTmp}'"); + Главне.Логгер.LogInfo(nameof(DownloadAssets), $"started downloading asset index to '{indexFilePathTmp}'"); await DownloadFileHTTP(assetIndexProperties.url, indexFilePathTmp, null, ct); - Приложение.Логгер.LogInfo(nameof(DownloadAssets), "finished downloading asset index"); + Главне.Логгер.LogInfo(nameof(DownloadAssets), "finished downloading asset index"); string indexFileText = File.ReadAllText(indexFilePathTmp); AssetIndex assetIndex = JsonConvert.DeserializeObject(indexFileText) @@ -101,13 +102,13 @@ public static class Network long bytesPerSec = (currentSize - prevSize) / (timerDelay / 1000); float KbytesPerSec = bytesPerSec / 1024f; prevSize = currentSize; - Приложение.Логгер.LogDebug(nameof(DownloadAssets), + Главне.Логгер.LogDebug(nameof(DownloadAssets), $"download progress {currentSizeM}Mb/{totalSizeM}Mb ({KbytesPerSec}Kb/s)"); } using Timer timer = new Timer(true, timerDelay, ReportProgress); timer.Start(); - Приложение.Логгер.LogInfo(nameof(DownloadAssets), "started downloading assets"); + Главне.Логгер.LogInfo(nameof(DownloadAssets), "started downloading assets"); int parallelDownloads = 32; var tasks = new Task[parallelDownloads]; var currentlyDownloadingFileHashes = new string[parallelDownloads]; @@ -118,7 +119,7 @@ public static class Network string hashStart = hash.Substring(0, 2); var assetUrl = $"{ASSET_SERVER_URL}/{hashStart}/{hash}"; IOPath assetFilePath = Path.Concat("assets", "objects", hashStart, hash); - Приложение.Логгер.LogDebug(nameof(DownloadAssets), $"downloading asset '{a.Key}' {hash}"); + Главне.Логгер.LogDebug(nameof(DownloadAssets), $"downloading asset '{a.Key}' {hash}"); tasks[i] = DownloadFileHTTP(assetUrl, assetFilePath, AddBytesCountAtomic, ct); currentlyDownloadingFileHashes[i] = hash; if (++i == parallelDownloads) @@ -132,7 +133,7 @@ public static class Network timer.Stop(); timer.InvokeAction(); File.Move(indexFilePathTmp, indexFilePath, true); - Приложение.Логгер.LogInfo(nameof(DownloadAssets), "finished downloading assets"); + Главне.Логгер.LogInfo(nameof(DownloadAssets), "finished downloading assets"); } private static async Task> GetRemoteVersionDescriptorsAsync() @@ -149,7 +150,7 @@ public static class Network } catch (Exception ex) { - Приложение.Логгер.LogWarn(nameof(Network), ex); + Главне.Логгер.LogWarn(nameof(Сеть), ex); } } return descriptors; diff --git a/Млаумчерб.Клиент/VersionItemView.axaml b/Млаумчерб.Клиент/видимое/VersionItemView.axaml similarity index 83% rename from Млаумчерб.Клиент/VersionItemView.axaml rename to Млаумчерб.Клиент/видимое/VersionItemView.axaml index 772efbb..42bfc27 100644 --- a/Млаумчерб.Клиент/VersionItemView.axaml +++ b/Млаумчерб.Клиент/видимое/VersionItemView.axaml @@ -4,6 +4,6 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Млаумчерб.Клиент" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" - x:Class="Млаумчерб.Клиент.VersionItemView"> + x:Class="Млаумчерб.Клиент.видимое.VersionItemView"> diff --git a/Млаумчерб.Клиент/VersionItemView.axaml.cs b/Млаумчерб.Клиент/видимое/VersionItemView.axaml.cs similarity index 90% rename from Млаумчерб.Клиент/VersionItemView.axaml.cs rename to Млаумчерб.Клиент/видимое/VersionItemView.axaml.cs index b7eaef1..a8553d1 100644 --- a/Млаумчерб.Клиент/VersionItemView.axaml.cs +++ b/Млаумчерб.Клиент/видимое/VersionItemView.axaml.cs @@ -2,7 +2,7 @@ using Avalonia.Media; using Млаумчерб.Клиент.классы; -namespace Млаумчерб.Клиент; +namespace Млаумчерб.Клиент.видимое; public partial class VersionItemView : ListBoxItem { diff --git a/Млаумчерб.Клиент/Окне.axaml b/Млаумчерб.Клиент/видимое/Окне.axaml similarity index 96% rename from Млаумчерб.Клиент/Окне.axaml rename to Млаумчерб.Клиент/видимое/Окне.axaml index 01cb904..5ba4cd3 100644 --- a/Млаумчерб.Клиент/Окне.axaml +++ b/Млаумчерб.Клиент/видимое/Окне.axaml @@ -2,7 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:gif="clr-namespace:Avalonia.Labs.Gif;assembly=Avalonia.Labs.Gif" xmlns:local="clr-namespace:Млаумчерб" - x:Class="Млаумчерб.Клиент.Окне" + x:Class="Млаумчерб.Клиент.видимое.Окне" Name="window" Title="млаумчерб" Icon="avares://млаумчерб/капитал/кубе.ico" diff --git a/Млаумчерб.Клиент/Окне.axaml.cs b/Млаумчерб.Клиент/видимое/Окне.axaml.cs similarity index 74% rename from Млаумчерб.Клиент/Окне.axaml.cs rename to Млаумчерб.Клиент/видимое/Окне.axaml.cs index 47b7b28..fa8df61 100644 --- a/Млаумчерб.Клиент/Окне.axaml.cs +++ b/Млаумчерб.Клиент/видимое/Окне.axaml.cs @@ -6,7 +6,7 @@ using Avalonia.Platform.Storage; using Avalonia.Threading; using Млаумчерб.Клиент.классы; -namespace Млаумчерб.Клиент; +namespace Млаумчерб.Клиент.видимое; public partial class Окне : Window { @@ -55,10 +55,10 @@ public partial class Окне : Window { try { - Приложение.Настройки = Настройки.ЗагрузитьИзФайла(); - Username = Приложение.Настройки.имя_пользователя; - MemoryLimit = Приложение.Настройки.выделенная_память_мб; - Fullscreen = Приложение.Настройки.открывать_на_весь_экран; + Главне.Настройки = Настройки.ЗагрузитьИзФайла(); + Username = Главне.Настройки.имя_пользователя; + MemoryLimit = Главне.Настройки.выделенная_память_мб; + Fullscreen = Главне.Настройки.открывать_на_весь_экран; Directory.Create(Пролетариат.GetVersionDescriptorDir()); VersionComboBox.SelectedIndex = 0; @@ -69,8 +69,8 @@ public partial class Окне : Window foreach (var p in versions) { VersionComboBox.Items.Add(new VersionItemView(p)); - if (Приложение.Настройки.последняя_запущенная_версия != null && - p.Name == Приложение.Настройки.последняя_запущенная_версия) + if (Главне.Настройки.последняя_запущенная_версия != null && + p.Name == Главне.Настройки.последняя_запущенная_версия) VersionComboBox.SelectedIndex = VersionComboBox.Items.Count - 1; } VersionComboBox.IsEnabled = true; @@ -89,11 +89,11 @@ public partial class Окне : Window var selectedVersionView = (VersionItemView?)VersionComboBox.SelectedItem; var selectedVersion = selectedVersionView?.Props; - Приложение.Настройки.последняя_запущенная_версия = selectedVersion?.Name; - Приложение.Настройки.имя_пользователя = Username; - Приложение.Настройки.выделенная_память_мб = MemoryLimit; - Приложение.Настройки.открывать_на_весь_экран = Fullscreen; - Приложение.Настройки.СохранитьВФайл(); + Главне.Настройки.последняя_запущенная_версия = selectedVersion?.Name; + Главне.Настройки.имя_пользователя = Username; + Главне.Настройки.выделенная_память_мб = MemoryLimit; + Главне.Настройки.открывать_на_весь_экран = Fullscreen; + Главне.Настройки.СохранитьВФайл(); if (selectedVersion == null) return; @@ -124,7 +124,7 @@ public partial class Окне : Window { try { - Launcher.LaunchFileInfoAsync(new FileInfo(Приложение.Логгер.LogfileName.ToString())) + Launcher.LaunchFileInfoAsync(new FileInfo(Главне.Логгер.LogfileName.ToString())) .ConfigureAwait(false); } catch (Exception ex) diff --git a/Млаумчерб.Клиент/Приложение.axaml b/Млаумчерб.Клиент/видимое/Приложение.axaml similarity index 91% rename from Млаумчерб.Клиент/Приложение.axaml rename to Млаумчерб.Клиент/видимое/Приложение.axaml index ecc85f9..dea9033 100644 --- a/Млаумчерб.Клиент/Приложение.axaml +++ b/Млаумчерб.Клиент/видимое/Приложение.axaml @@ -1,6 +1,6 @@ diff --git a/Млаумчерб.Клиент/Приложение.axaml.cs b/Млаумчерб.Клиент/видимое/Приложение.axaml.cs similarity index 62% rename from Млаумчерб.Клиент/Приложение.axaml.cs rename to Млаумчерб.Клиент/видимое/Приложение.axaml.cs index 7486df9..5c52462 100644 --- a/Млаумчерб.Клиент/Приложение.axaml.cs +++ b/Млаумчерб.Клиент/видимое/Приложение.axaml.cs @@ -2,15 +2,13 @@ using Avalonia; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; -namespace Млаумчерб.Клиент; +namespace Млаумчерб.Клиент.видимое; public class Приложение : Application { - public static readonly LauncherLogger Логгер = new(); - public override void Initialize() { - Логгер.LogInfo(nameof(Приложение), "приложение запущено"); + Главне.Логгер.LogInfo(nameof(Приложение), "приложение запущено"); AvaloniaXamlLoader.Load(this); } @@ -23,6 +21,4 @@ public class Приложение : Application base.OnFrameworkInitializationCompleted(); } - - public static Настройки Настройки = new(); } \ No newline at end of file diff --git a/Млаумчерб.Клиент/классы/Пролетариат.cs b/Млаумчерб.Клиент/классы/Пролетариат.cs index d167978..c8e2fc6 100644 --- a/Млаумчерб.Клиент/классы/Пролетариат.cs +++ b/Млаумчерб.Клиент/классы/Пролетариат.cs @@ -1,12 +1,14 @@ -namespace Млаумчерб.Клиент.классы; +using Млаумчерб.Клиент.видимое; + +namespace Млаумчерб.Клиент.классы; public static class Пролетариат { public static IOPath GetAssetIndexFilePath(string id) => - Path.Concat(Приложение.Настройки.путь_к_кубачу, $"assets/indexes/{id}.json"); + Path.Concat(Главне.Настройки.путь_к_кубачу, $"assets/indexes/{id}.json"); public static IOPath GetVersionDescriptorDir() => - Path.Concat(Приложение.Настройки.путь_к_кубачу, "version_descriptors"); + Path.Concat(Главне.Настройки.путь_к_кубачу, "version_descriptors"); public static string GetVersionDescriptorName(IOPath path) => path.LastName().RemoveExtension().ToString(); @@ -15,11 +17,11 @@ public static class Пролетариат Path.Concat(GetVersionDescriptorDir(), Path.ReplaceRestrictedChars(name) + ".json"); public static IOPath GetVersionDir() => - Path.Concat(Приложение.Настройки.путь_к_кубачу, "versions"); + Path.Concat(Главне.Настройки.путь_к_кубачу, "versions"); public static IOPath GetVersionJarFilePath(string name) => Path.Concat(GetVersionDir(), name + ".jar"); public static IOPath GetLibrariesDir() => - Path.Concat(Приложение.Настройки.путь_к_кубачу, "libraries"); + Path.Concat(Главне.Настройки.путь_к_кубачу, "libraries"); }