Skip to content

Commit 2c338f6

Browse files
authored
Merge pull request #72 from AMagicPear/main
perf&feat: Java 搜索的性能优化 & 从MOJANG 服务器在线下载
2 parents aad2d8e + 8b1167a commit 2c338f6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+2457
-733
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using PCL2.Neo.Models.Minecraft.Java;
2+
using PCL2.Neo.Models.Minecraft.Mod;
3+
4+
namespace PCL2.Neo.Tests.Models.FileHelper;
5+
6+
public class FileTest
7+
{
8+
[Test]
9+
public async Task Download()
10+
{
11+
await Helpers.FileHelper.DownloadFileAsync(new Uri(
12+
"https://piston-meta.mojang.com/v1/products/java-runtime/2ec0cc96c44e5a76b9c8b7c39df7210883d12871/all.json"),
13+
Path.Combine(Path.GetTempPath(), "all.json"));
14+
Console.WriteLine(Path.GetTempPath());
15+
}
16+
17+
[Test]
18+
public async Task Fetch()
19+
{
20+
await JavaManager.FetchJavaOnline("mac-os-arm64", "/Users/amagicpear/Downloads/PCL2Test",
21+
JavaManager.MojangJavaVersion.Δ,
22+
new Progress<(int, int)>((value) =>
23+
{
24+
Console.WriteLine($"下载进度:已下载{value.Item1}/总文件数{value.Item2}");
25+
}));
26+
// await Helpers.FileHelper.FetchJavaOnline("windows-x64",@"C:\Users\AMagicPear\Downloads\PCL2Test");
27+
}
28+
29+
[Test]
30+
public void ModPackTest()
31+
{
32+
ModPack.InstallPackModrinth("/Users/amagicpear/Downloads/1.20.4-Fabric 0.15.3/modpack.mrpack", "/Users/amagicpear/Downloads/TestModPack");
33+
}
34+
35+
[Test]
36+
public void MojangVersionTest()
37+
{
38+
Console.WriteLine(JavaManager.MojangJavaVersion.Δ.Value);
39+
}
40+
41+
[Test]
42+
public async Task SelectFileTest(){
43+
// await Helpers.FileHelper.SelectFile("Test");
44+
}
45+
}

PCL2.Neo.Tests/Models/Minecraft/JavaTest.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,8 @@ public class JavaTest
88
[Test]
99
public async Task Test()
1010
{
11-
Java javaInstance = await Java.CreateAsync();
12-
Console.WriteLine("当前有 " + javaInstance.JavaList.Count + " 个 Java");
13-
foreach (JavaEntity javaEntity in javaInstance.JavaList)
14-
{
15-
Console.WriteLine("--------------------");
16-
Console.WriteLine("路径: " + javaEntity.DirectoryPath);
17-
Console.WriteLine("架构: " + ArchitectureUtils.GetExecutableArchitecture(javaEntity.JavaExe));
18-
}
11+
JavaManager javaInstance = new();
12+
await javaInstance.JavaListInit();
1913
}
2014
}
2115
}

PCL2.Neo.Tests/Models/Minecraft/PropertiesTest.cs

Lines changed: 0 additions & 14 deletions
This file was deleted.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using PCL2.Neo.Utils;
2+
3+
namespace PCL2.Neo.Tests.Models.Utils;
4+
5+
public class ExeArchitecture
6+
{
7+
[Test]
8+
public void TestArchitecture()
9+
{
10+
string path = "/Users/amagicpear/Downloads/file_zip_win32_x64.exe";
11+
ExeArchitectureUtils.GetExecutableArchitecture(path);
12+
}
13+
}

PCL2.Neo/App.axaml.cs

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,70 @@
1-
using System;
21
using System.Linq;
32
using Avalonia;
3+
using Avalonia.Controls;
44
using Avalonia.Controls.ApplicationLifetimes;
5-
using Avalonia.Data.Core;
65
using Avalonia.Data.Core.Plugins;
76
using Avalonia.Markup.Xaml;
7+
using CommunityToolkit.Mvvm.DependencyInjection;
8+
using Microsoft.Extensions.DependencyInjection;
9+
using PCL2.Neo.Services;
10+
using Avalonia.Platform.Storage;
811
using PCL2.Neo.Helpers;
912
using PCL2.Neo.Models.Minecraft.Java;
1013
using PCL2.Neo.Utils;
1114
using PCL2.Neo.ViewModels;
15+
using PCL2.Neo.ViewModels.Download;
16+
using PCL2.Neo.ViewModels.Home;
1217
using PCL2.Neo.Views;
18+
using System;
1319
using System.Threading.Tasks;
1420

1521
namespace PCL2.Neo
1622
{
1723
public partial class App : Application
1824
{
19-
public static Java JavaManager;
25+
// public static Java? JavaManager { get; private set; }
26+
// public static IStorageProvider StorageProvider { get; private set; } = null!;
27+
2028
public override void Initialize()
2129
{
2230
AvaloniaXamlLoader.Load(this);
2331
}
2432

33+
private static IServiceProvider ConfigureServices() => new ServiceCollection()
34+
.AddTransient<MainWindowViewModel>()
35+
36+
.AddTransient<HomeViewModel>()
37+
.AddTransient<HomeSubViewModel>()
38+
39+
.AddTransient<DownloadViewModel>()
40+
.AddTransient<DownloadGameViewModel>()
41+
.AddTransient<DownloadModViewModel>()
42+
43+
.AddSingleton<NavigationService>(s => new NavigationService(s))
44+
.AddSingleton<StorageService>()
45+
.AddSingleton<IJavaManager,JavaManager>()
46+
.BuildServiceProvider();
47+
2548
public override void OnFrameworkInitializationCompleted()
2649
{
27-
Task.Run(SetupJavaManager);
50+
Ioc.Default.ConfigureServices(ConfigureServices());
51+
52+
var vm = Ioc.Default.GetRequiredService<MainWindowViewModel>();
53+
Task.Run(Ioc.Default.GetRequiredService<IJavaManager>().JavaListInit);
2854
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
2955
{
3056
// Avoid duplicate validations from both Avalonia and the CommunityToolkit.
3157
// More info: https://docs.avaloniaui.net/docs/guides/development-guides/data-validation#manage-validationplugins
3258
DisableAvaloniaDataAnnotationValidation();
33-
desktop.MainWindow = new MainWindow();
59+
desktop.MainWindow = new MainWindow
60+
{
61+
DataContext = vm
62+
};
3463
}
3564

3665
base.OnFrameworkInitializationCompleted();
3766
}
3867

39-
private async Task SetupJavaManager()
40-
{
41-
JavaManager = await Java.CreateAsync();
42-
}
43-
4468
private void DisableAvaloniaDataAnnotationValidation()
4569
{
4670
// Get an array of plugins to remove

PCL2.Neo/Attributes.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
3+
namespace PCL2.Neo;
4+
5+
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
6+
public class SubViewModelOfAttribute(Type parentViewModel) : Attribute
7+
{
8+
public Type ParentViewModel { get; } = parentViewModel;
9+
}
10+
11+
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
12+
public class DefaultSubViewModelAttribute(Type subViewModel) : Attribute
13+
{
14+
public Type SubViewModel { get; } = subViewModel;
15+
}

PCL2.Neo/Colors.axaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050
<SolidColorBrush x:Key="ColorBrushMsgBox">#fbfbfb</SolidColorBrush>
5151
<SolidColorBrush x:Key="ColorBrushMsgBoxText">#5c5c5c</SolidColorBrush>
5252
<SolidColorBrush x:Key="ColorBrushMemory">#000000</SolidColorBrush>
53+
<SolidColorBrush x:Key="ColorBrushMyCard">#cdffffff</SolidColorBrush>
54+
<SolidColorBrush x:Key="ColorBrushMyCardMouseOver">#e6ffffff</SolidColorBrush>
5355
</ResourceDictionary>
5456
<ResourceDictionary x:Key="Dark">
5557
<SolidColorBrush x:Key="ColorBrush1">#ebebeb</SolidColorBrush>
@@ -101,6 +103,8 @@
101103
<SolidColorBrush x:Key="ColorBrushMsgBox">#2b2b2b</SolidColorBrush>
102104
<SolidColorBrush x:Key="ColorBrushMsgBoxText">#ebebeb</SolidColorBrush>
103105
<SolidColorBrush x:Key="ColorBrushMemory">#ffffff</SolidColorBrush>
106+
<SolidColorBrush x:Key="ColorBrushMyCard">#eb2b2b2b</SolidColorBrush>
107+
<SolidColorBrush x:Key="ColorBrushMyCardMouseOver">#f5303030</SolidColorBrush>
104108
</ResourceDictionary>
105109
</ResourceDictionary.ThemeDictionaries>
106110
</ResourceDictionary>

PCL2.Neo/Const.cs

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Diagnostics;
3+
using System.Runtime.InteropServices;
34

45
namespace PCL2.Neo;
56

@@ -9,19 +10,76 @@ public static class Const
910
/// 平台路径分隔符。
1011
/// </summary>
1112
public static readonly char Sep = System.IO.Path.DirectorySeparatorChar;
12-
13+
1314
/// <summary>
1415
/// 平台换行符。
1516
/// </summary>
1617
public static readonly string CrLf = Environment.NewLine;
17-
18+
1819
/// <summary>
1920
/// 程序的启动路径,以 <see cref="Sep"/> 结尾。
2021
/// </summary>
2122
public static readonly string Path = Environment.CurrentDirectory + Sep;
22-
23+
2324
/// <summary>
2425
/// 包含程序名的完整路径。
2526
/// </summary>
2627
public static readonly string PathWithName = Process.GetCurrentProcess().MainModule!.FileName;
28+
29+
/// <summary>
30+
/// 系统是否为64位。
31+
/// </summary>
32+
public static readonly bool Is64Os = Environment.Is64BitOperatingSystem;
33+
34+
public enum RunningOs
35+
{
36+
Windows,
37+
Linux,
38+
MacOs,
39+
Unknown
40+
}
41+
42+
public static readonly RunningOs Os = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
43+
? RunningOs.Windows
44+
: RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
45+
? RunningOs.Linux
46+
: RuntimeInformation.IsOSPlatform(OSPlatform.OSX)
47+
? RunningOs.MacOs
48+
: RunningOs.Unknown;
49+
50+
public static readonly Architecture Architecture = RuntimeInformation.ProcessArchitecture;
51+
52+
/// <summary>
53+
/// 根据 MOJANG API 命名
54+
/// </summary>
55+
public static string Platform
56+
{
57+
get
58+
{
59+
return Os switch
60+
{
61+
RunningOs.Windows => Architecture switch
62+
{
63+
Architecture.X64 => "windows-x64",
64+
Architecture.X86 => "windows-x86",
65+
Architecture.Arm64 => "windows-arm64",
66+
_ => "unknown"
67+
},
68+
RunningOs.Linux => Architecture switch
69+
{
70+
Architecture.X64 => "linux",
71+
Architecture.X86 => "linux-i386",
72+
_ => "unknown"
73+
},
74+
RunningOs.MacOs => Architecture switch
75+
{
76+
Architecture.X64 => "mac-os",
77+
Architecture.Arm64 => "mac-os-arm64",
78+
_ => "unknown"
79+
},
80+
RunningOs.Unknown => "unknown",
81+
_ => "unknown"
82+
};
83+
}
84+
}
2785
}

0 commit comments

Comments
 (0)