From 1ecc8ccc181f2dbdb85d3cb95697a883f962dac3 Mon Sep 17 00:00:00 2001 From: Timerix Date: Sun, 1 Sep 2024 23:45:51 +0500 Subject: [PATCH] =?UTF-8?q?=D0=BB=D0=BE=D0=B3=D0=B3=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B8=20=D0=BB=D0=B8=D1=81?= =?UTF-8?q?=D0=B8=D0=BA.gif?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Млаумчерб.Клиент/LauncherLogger.cs | 13 +++ Млаумчерб.Клиент/Network.cs | 13 +++ Млаумчерб.Клиент/Главне.cs | 4 + Млаумчерб.Клиент/Игра.cs | 41 ++++++++++ Млаумчерб.Клиент/Млаумчерб.Клиент.csproj | 20 ++--- Млаумчерб.Клиент/Настройки.cs | 16 ++-- Млаумчерб.Клиент/Окне.axaml | 71 +++++++++++----- Млаумчерб.Клиент/Окне.axaml.cs | 17 +++- Млаумчерб.Клиент/Ошибки.cs | 6 +- Млаумчерб.Клиент/Приложение.axaml | 27 +++++-- Млаумчерб.Клиент/Приложение.axaml.cs | 5 +- Млаумчерб.Клиент/капитал/лисик.gif | Bin 0 -> 39988 bytes Млаумчерб.Клиент/классы/Буржуазия.cs | 98 +++++++++++++++++++++++ Млаумчерб.Клиент/классы/Пролетариат.cs | 6 ++ 14 files changed, 292 insertions(+), 45 deletions(-) create mode 100644 Млаумчерб.Клиент/LauncherLogger.cs create mode 100644 Млаумчерб.Клиент/Network.cs create mode 100644 Млаумчерб.Клиент/Игра.cs create mode 100644 Млаумчерб.Клиент/капитал/лисик.gif create mode 100644 Млаумчерб.Клиент/классы/Буржуазия.cs create mode 100644 Млаумчерб.Клиент/классы/Пролетариат.cs diff --git a/Млаумчерб.Клиент/LauncherLogger.cs b/Млаумчерб.Клиент/LauncherLogger.cs new file mode 100644 index 0000000..cd7d219 --- /dev/null +++ b/Млаумчерб.Клиент/LauncherLogger.cs @@ -0,0 +1,13 @@ +using DTLib.Filesystem; +using DTLib.Logging; + +namespace Млаумчерб.Клиент; + +public class LauncherLogger : FileLogger +{ + public static readonly IOPath LogsDirectory = "launcher-logs"; + + public LauncherLogger() : base(LogsDirectory, "млаумчерб") + { + } +} \ No newline at end of file diff --git a/Млаумчерб.Клиент/Network.cs b/Млаумчерб.Клиент/Network.cs new file mode 100644 index 0000000..15f9f0d --- /dev/null +++ b/Млаумчерб.Клиент/Network.cs @@ -0,0 +1,13 @@ +namespace Млаумчерб.Клиент; + +public record struct NetworkTransferResult +{ + public long BytesTotal; + public long BytesTransferred; + public long BytesPerSecond; +} + +public class NetworkHelper +{ + +} \ No newline at end of file diff --git a/Млаумчерб.Клиент/Главне.cs b/Млаумчерб.Клиент/Главне.cs index 9ad4dc6..26adaf6 100644 --- a/Млаумчерб.Клиент/Главне.cs +++ b/Млаумчерб.Клиент/Главне.cs @@ -2,6 +2,10 @@ global using System.Collections.Generic; global using System.IO; global using System.Text; +global using DTLib.Logging; +global using DTLib.Filesystem; +global using File = DTLib.Filesystem.File; +global using Directory = DTLib.Filesystem.Directory; using System.Globalization; using Avalonia; diff --git a/Млаумчерб.Клиент/Игра.cs b/Млаумчерб.Клиент/Игра.cs new file mode 100644 index 0000000..31c2145 --- /dev/null +++ b/Млаумчерб.Клиент/Игра.cs @@ -0,0 +1,41 @@ +using System.Threading.Tasks; +using DTLib.Filesystem; +using Path = DTLib.Filesystem.Path; + +namespace Млаумчерб.Клиент; + +public interface IGame +{ + string Name { get; } + IOPath InstallationDirectory { get; } + Progress BeginUpdate(); + void EndUpdate(); + Task Launch(); +} + +public class MinecraftVersion : IGame +{ + public string Name { get; } + public IOPath InstallationDirectory { get; } + + public MinecraftVersion(string name) + { + Name = name; + InstallationDirectory = Path.Concat("minecraft", Path.ReplaceRestrictedChars(name)); + } + + public Progress BeginUpdate() + { + throw new NotImplementedException(); + } + + public void EndUpdate() + { + throw new NotImplementedException(); + } + + public Task Launch() + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/Млаумчерб.Клиент/Млаумчерб.Клиент.csproj b/Млаумчерб.Клиент/Млаумчерб.Клиент.csproj index 1c11a44..6f12b6f 100644 --- a/Млаумчерб.Клиент/Млаумчерб.Клиент.csproj +++ b/Млаумчерб.Клиент/Млаумчерб.Клиент.csproj @@ -13,15 +13,17 @@ - - - - - - - - - + + + + + + + + + + + diff --git a/Млаумчерб.Клиент/Настройки.cs b/Млаумчерб.Клиент/Настройки.cs index 28ba930..fccfe8b 100644 --- a/Млаумчерб.Клиент/Настройки.cs +++ b/Млаумчерб.Клиент/Настройки.cs @@ -1,20 +1,20 @@ -using Newtonsoft.Json; +using DTLib.Logging; +using Newtonsoft.Json; namespace Млаумчерб.Клиент; -public class Настройки +public record Настройки { public string имя_пользователя { get; set; } = ""; public int выделенная_память_мб { get; set; } = 4096; public bool открывать_на_весь_экран { get; set; } - - public static readonly Encoding UTF8WithoutBom = new UTF8Encoding(false); public static Настройки ЗагрузитьИзФайла(string имя_файла = "млаумчерб.настройки") { - //TODO: лог + Приложение.Логгер.LogInfo(nameof(Настройки), $"попытка загрузить настройки из файла '{имя_файла}'"); if(!File.Exists(имя_файла)) { + Приложение.Логгер.LogInfo(nameof(Настройки), "файл не существует"); return new Настройки(); } @@ -30,13 +30,15 @@ public class Настройки $"Создан новый файл '{имя_файла}'."); } + Приложение.Логгер.LogInfo(nameof(Настройки), $"настройки загружены: {н}"); return н; } public void СохранитьВФайл(string имя_файла = "млаумчерб.настройки") { - //TODO: log + Приложение.Логгер.LogInfo(nameof(Настройки), $"попытка сохранить настройки в файл '{имя_файла}'"); var текст = JsonConvert.SerializeObject(this, Formatting.Indented); - File.WriteAllText(имя_файла, текст, UTF8WithoutBom); + File.WriteAllText(имя_файла, текст); + Приложение.Логгер.LogInfo(nameof(Настройки), $"настройки сохранены: {текст}"); } } \ No newline at end of file diff --git a/Млаумчерб.Клиент/Окне.axaml b/Млаумчерб.Клиент/Окне.axaml index f4d22e4..59855e2 100644 --- a/Млаумчерб.Клиент/Окне.axaml +++ b/Млаумчерб.Клиент/Окне.axaml @@ -1,5 +1,7 @@ - 30 * 30 - - - + * 30 + + + * 300 * + Classes="dark_tr_bg white_border"> 30 * - 30 - + + + News + + + Classes="dark_tr_bg white_border" + Margin="10 0"> * 60 + Version: + + + + Username: + Memory limit: Mb + Fullscreen + Update game files - + + + + + + + + + diff --git a/Млаумчерб.Клиент/Окне.axaml.cs b/Млаумчерб.Клиент/Окне.axaml.cs index 0675045..3511493 100644 --- a/Млаумчерб.Клиент/Окне.axaml.cs +++ b/Млаумчерб.Клиент/Окне.axaml.cs @@ -1,8 +1,8 @@ -using System.ComponentModel.DataAnnotations; using Avalonia; using Avalonia.Controls; using Avalonia.Data; using Avalonia.Interactivity; +using Avalonia.Platform.Storage; namespace Млаумчерб.Клиент; @@ -79,4 +79,19 @@ public partial class Окне : Window Ошибки.ПоказатьСообщение(ex); } } + + private void OpenLogsDirectory(object? s, RoutedEventArgs e) + { + Launcher.LaunchDirectoryInfoAsync(new DirectoryInfo(LauncherLogger.LogsDirectory.ToString())); + } + + private void OpenLogFile(object? sender, RoutedEventArgs e) + { + Launcher.LaunchFileInfoAsync(new FileInfo(Приложение.Логгер.LogfileName.ToString())); + } + + private void OpenSourceRepository(object? sender, RoutedEventArgs e) + { + Launcher.LaunchUriAsync(new Uri("https://timerix.ddns.net:3322/Timerix/mlaumcherb")); + } } \ No newline at end of file diff --git a/Млаумчерб.Клиент/Ошибки.cs b/Млаумчерб.Клиент/Ошибки.cs index 263cfc0..b55b0eb 100644 --- a/Млаумчерб.Клиент/Ошибки.cs +++ b/Млаумчерб.Клиент/Ошибки.cs @@ -1,7 +1,9 @@ using Avalonia.Controls; using DTLib.Ben.Demystifier; +using DTLib.Logging; using MsBox.Avalonia; using MsBox.Avalonia.Dto; +using MsBox.Avalonia.Enums; using MsBox.Avalonia.Models; namespace Млаумчерб.Клиент; @@ -13,12 +15,13 @@ public static class Ошибки internal static async void ПоказатьСообщение(string err) { + Приложение.Логгер.LogError(nameof(Ошибки), err); var box = MessageBoxManager.GetMessageBoxCustom(new MessageBoxCustomParams { ButtonDefinitions = new List { new() { Name = "пон" } }, ContentTitle = "ОШИБКА", ContentMessage = err, - Icon = MsBox.Avalonia.Enums.Icon.Error, + Icon = Icon.Error, WindowStartupLocation = WindowStartupLocation.CenterOwner, CanResize = true, MaxWidth = 1000, @@ -28,7 +31,6 @@ public static class Ошибки Topmost = true } ); - //TODO: write to log await box.ShowAsync().ConfigureAwait(false); } } \ No newline at end of file diff --git a/Млаумчерб.Клиент/Приложение.axaml b/Млаумчерб.Клиент/Приложение.axaml index 56a234e..77afed0 100644 --- a/Млаумчерб.Клиент/Приложение.axaml +++ b/Млаумчерб.Клиент/Приложение.axaml @@ -5,18 +5,31 @@ - - - - + + + + + + diff --git a/Млаумчерб.Клиент/Приложение.axaml.cs b/Млаумчерб.Клиент/Приложение.axaml.cs index 5ca0861..7486df9 100644 --- a/Млаумчерб.Клиент/Приложение.axaml.cs +++ b/Млаумчерб.Клиент/Приложение.axaml.cs @@ -4,10 +4,13 @@ using Avalonia.Markup.Xaml; namespace Млаумчерб.Клиент; -public partial class Приложение : Application +public class Приложение : Application { + public static readonly LauncherLogger Логгер = new(); + public override void Initialize() { + Логгер.LogInfo(nameof(Приложение), "приложение запущено"); AvaloniaXamlLoader.Load(this); } diff --git a/Млаумчерб.Клиент/капитал/лисик.gif b/Млаумчерб.Клиент/капитал/лисик.gif new file mode 100644 index 0000000000000000000000000000000000000000..54405b488349e09fdbce1a2fc88bf8b2360d1717 GIT binary patch literal 39988 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 F{tH=xJoo?r literal 0 HcmV?d00001 diff --git a/Млаумчерб.Клиент/классы/Буржуазия.cs b/Млаумчерб.Клиент/классы/Буржуазия.cs new file mode 100644 index 0000000..b6e4022 --- /dev/null +++ b/Млаумчерб.Клиент/классы/Буржуазия.cs @@ -0,0 +1,98 @@ +using Newtonsoft.Json; + +namespace Млаумчерб.Клиент.классы; + +public class Artifact +{ + [JsonRequired] public string url { get; set; } = ""; + [JsonRequired] public string sha1 { get; set; } = ""; + [JsonRequired] public int size { get; set; } +} + +public class Os +{ + [JsonRequired] public string name { get; set; } = ""; +} + +public class Rule +{ + [JsonRequired] public string action { get; set; } = ""; + [JsonRequired] public Os os { get; set; } = null!; +} + +public class Classifiers +{ + [JsonProperty("natives-linux")] + public Artifact? nativeslinux { get; set; } + + [JsonProperty("natives-osx")] + public Artifact? nativesosx { get; set; } + + [JsonProperty("natives-windows")] + public Artifact? nativeswindows { get; set; } +} + +public class LibraryDownloads +{ + public Artifact? artifact { get; set; } + public Classifiers? classifiers { get; set; } +} + +public class Extract +{ + public List? exclude { get; set; } +} + +public class Natives +{ + public string? linux { get; set; } + public string? osx { get; set; } + public string? windows { get; set; } +} + +public class Library +{ + [JsonRequired] public string name { get; set; } = ""; + public List? rules { get; set; } + public Natives? natives { get; set; } + public Extract? extract { get; set; } + [JsonRequired] public LibraryDownloads downloads { get; set; } = null!; +} + +public class AssetIndex +{ + [JsonRequired] public string id { get; set; } = ""; + [JsonRequired] public int totalSize { get; set; } + [JsonRequired] public bool known { get; set; } + [JsonRequired] public string url { get; set; } = ""; + [JsonRequired] public string sha1 { get; set; } = ""; + [JsonRequired] public int size { get; set; } +} + +public class Downloads +{ + [JsonRequired] public Artifact client { get; set; } = null!; +} + +public class JavaVersion +{ + [JsonRequired] public string component { get; set; } = ""; + [JsonRequired] public int majorVersion { get; set; } +} + +public class MinecraftVersionDescriptor +{ + [JsonRequired] public string id { get; set; } = ""; + [JsonRequired] public string jar { get; set; } = ""; + [JsonRequired] public string family { get; set; } = ""; + [JsonRequired] public DateTime time { get; set; } + [JsonRequired] public DateTime releaseTime { get; set; } + [JsonRequired] public string type { get; set; } = ""; + [JsonRequired] public string mainClass { get; set; } = ""; + [JsonRequired] public Downloads downloads { get; set; } = null!; + [JsonRequired] public JavaVersion javaVersion { get; set; } = null!; + [JsonRequired] public List libraries { get; set; } = null!; + [JsonRequired] public AssetIndex assetIndex { get; set; } = null!; + [JsonRequired] public string assets { get; set; } = ""; + // public string minecraftArguments { get; set; } +} \ No newline at end of file diff --git a/Млаумчерб.Клиент/классы/Пролетариат.cs b/Млаумчерб.Клиент/классы/Пролетариат.cs new file mode 100644 index 0000000..efa37f2 --- /dev/null +++ b/Млаумчерб.Клиент/классы/Пролетариат.cs @@ -0,0 +1,6 @@ +namespace Млаумчерб.Клиент.классы; + +public class Пролетариат +{ + +} \ No newline at end of file