From 67f4795cf65d6940afdac7a4a28fecea57e29104 Mon Sep 17 00:00:00 2001 From: Mino Date: Mon, 30 Mar 2020 18:18:28 +0900 Subject: [PATCH] Download CoreLoad on Install --- .gitignore | 2 ++ build/Build.csproj | 34 ++++++++++++++++++---------------- build/DalamudBuild.cs | 30 ++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 8d96d9403..513cf899f 100644 --- a/.gitignore +++ b/.gitignore @@ -332,3 +332,5 @@ ASALocalRun/ # MFractors (Xamarin productivity tool) working folder .mfractor/ + +/lib/* diff --git a/build/Build.csproj b/build/Build.csproj index 73752d100..822b8f0e9 100644 --- a/build/Build.csproj +++ b/build/Build.csproj @@ -1,16 +1,18 @@ - - - - Exe - netcoreapp3.1 - CS0649;CS0169 - .. - .. - - - - - - - - + + + + Exe + netcoreapp3.1 + CS0649;CS0169 + .. + .. + + + + + + + + + + diff --git a/build/DalamudBuild.cs b/build/DalamudBuild.cs index bc39f17d2..bcfad6bd0 100644 --- a/build/DalamudBuild.cs +++ b/build/DalamudBuild.cs @@ -1,6 +1,9 @@ using System; using System.IO; +using System.IO.Compression; using System.Linq; +using Flurl; +using Flurl.Http; using Nuke.Common; using Nuke.Common.Execution; using Nuke.Common.Git; @@ -15,6 +18,7 @@ using static Nuke.Common.IO.FileSystemTasks; using static Nuke.Common.IO.PathConstruction; using static Nuke.Common.Tools.DotNet.DotNetTasks; using static Nuke.Common.Logger; +using System.Threading.Tasks; [CheckBuildProjectConfigurations] [UnsetVisualStudioEnvironmentVariables] @@ -39,6 +43,8 @@ class DalamudBuild : NukeBuild AbsolutePath DefaultInstallDirectory => (AbsolutePath)Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) / "Dalamud" / "bin" / GitVersion.SemVer; + AbsolutePath CoreHookBinaryDirectory => RootDirectory / "lib" / "CoreHookBinary"; + Target Clean => _ => _ .Before(Restore) .Executes(() => @@ -66,11 +72,35 @@ class DalamudBuild : NukeBuild .EnableNoRestore()); }); + Target DownloadCoreHookBinary => _ => _ + .Executes(() => + { + // Download pre-compiled binary of CoreHook.Hooking and CoreLoad (these are prerequisite) + var corehookTask = ExtractZip($"https://github.com/unknownv2/CoreHook.Hooking/releases/download/1.0.9/corehook-{Configuration}-x64.zip", CoreHookBinaryDirectory); + var coreloadTask = ExtractZip($"https://github.com/unknownv2/CoreHook.Host/releases/download/2.0.5/coreload-{Configuration}-x64.zip", CoreHookBinaryDirectory); + + Task.WaitAll(corehookTask, coreloadTask); + }); + Target Install => _ => _ + .DependsOn(DownloadCoreHookBinary) // prolly can be skipped if prerequisites are already there? .DependsOn(Compile) .Executes(() => { Info($"Installing Dalamud to {DefaultInstallDirectory}"); // TODO }); + + async Task ExtractZip(string uri, string directory) + { + EnsureExistingDirectory(directory); + + Info($"Downloading {uri}"); + + var tempDir = Path.GetTempPath(); + var zipFilePath = await uri.DownloadFileAsync(tempDir); + + Info($"Extracting {zipFilePath}"); + ZipFile.ExtractToDirectory(zipFilePath, directory); + } }