183 lines
7.6 KiB
C#
Raw Normal View History

2022-05-19 14:41:44 +01:00
using Spectre.Console;
2022-05-14 02:58:38 +01:00
using SPT_AKI_Installer.Aki.Helper;
2022-05-19 14:41:44 +01:00
using System;
using System.IO;
using System.Threading;
2022-05-13 22:41:15 +01:00
2022-05-14 02:58:38 +01:00
namespace SPT_AKI_Installer.Aki.Core
2022-05-13 22:41:15 +01:00
{
//TODO:
2022-05-14 02:58:38 +01:00
// locales, language selection
2022-05-13 22:41:15 +01:00
public static class SPTinstaller
{
2022-05-19 14:41:44 +01:00
static void Main()
2022-05-13 22:41:15 +01:00
{
string targetPath = Environment.CurrentDirectory;
2022-05-19 14:41:44 +01:00
#if DEBUG
2022-05-14 02:58:38 +01:00
targetPath = @"D:\install";
2022-05-19 14:41:44 +01:00
#endif
SpectreHelper.Figlet("SPT-AKI INSTALLER", Color.Yellow);
PreCheckHelper.GameCheck(out string originalGamePath);
PreCheckHelper.DetectOriginalGameVersion(originalGamePath);
if (originalGamePath == null)
{
CloseApp("Unable to find EFT OG directory! \n please make sure EFT is installed! \n please also run EFT once!");
}
2022-05-13 22:41:15 +01:00
2022-05-19 14:41:44 +01:00
if (originalGamePath == targetPath)
2022-05-13 22:41:15 +01:00
{
2022-05-19 14:41:44 +01:00
CloseApp("Installer is located in EFT's original directory! \n Please move the installer to a seperate folder as per the guide!");
2022-05-13 22:41:15 +01:00
}
2022-05-19 14:41:44 +01:00
var checkForExistingFiles = FileHelper.FindFile(targetPath, "EscapeFromTarkov.exe");
if (checkForExistingFiles != null)
2022-05-13 22:41:15 +01:00
{
2022-05-19 14:41:44 +01:00
CloseApp("Installer is located in a Folder that has existing Game Files \n Please make sure the installer is in a fresh folder as per the guide");
2022-05-13 22:41:15 +01:00
}
LogHelper.User("We need to download files during this installation.");
LogHelper.User("Are you ok with this? type yes or no");
var userReponse = Console.ReadLine();
while (!string.Equals(userReponse, "yes", StringComparison.OrdinalIgnoreCase) &&
!string.Equals(userReponse, "no", StringComparison.OrdinalIgnoreCase))
{
LogHelper.Warning("Response was not yes or no, please respond with yes or no");
userReponse = Console.ReadLine();
}
if (string.Equals(userReponse, "no", StringComparison.OrdinalIgnoreCase))
{
CloseApp("you selected no, we need to download this to continue with auto installation \n Press enter to close the app");
}
LogHelper.Info("Downloading ClientVersions.json...");
var jsonDownload = DownloadHelper.DownloadFileAsync(targetPath, "https://dev.sp-tarkov.com/api/v1/repos/CWX/Installer_Test/raw/ClientVersions.json", "/ClientVersions.json");
while (jsonDownload.Status != System.Threading.Tasks.TaskStatus.RanToCompletion)
{
}
LogHelper.Info("Downloading Complete, Checking Versions!");
DownloadHelper.ReadJson(targetPath);
LogHelper.Info($"Original game path detected, Game version: { DownloadHelper.ogClient } Detected");
LogHelper.Info($"TargetClient version for this Game version is: { DownloadHelper.targetClient }");
if (string.Equals(DownloadHelper.patchNeedCheck, "true", StringComparison.OrdinalIgnoreCase))
{
LogHelper.Info("Patching IS required!");
}
if (string.Equals(DownloadHelper.patchNeedCheck, "false", StringComparison.OrdinalIgnoreCase))
{
LogHelper.Info("Patching is not required!");
}
LogHelper.Info($"TargetAki version for this GameVersion is { DownloadHelper.targetAki }");
LogHelper.Info("Checking if Zips already exist in directory");
2022-05-19 14:41:44 +01:00
PreCheckHelper.PatcherZipCheck(originalGamePath, targetPath, out string patcherZipPath);
PreCheckHelper.AkiZipCheck(targetPath, out string akiZipPath);
2022-05-13 22:41:15 +01:00
if (patcherZipPath == null && string.Equals(DownloadHelper.patchNeedCheck, "true", StringComparison.OrdinalIgnoreCase))
2022-05-13 22:41:15 +01:00
{
LogHelper.Info("Unable to find Patcher Zip in Directory");
LogHelper.Info("Downloading Patcher Zip now!");
2022-05-31 14:49:28 +01:00
var task = DownloadHelper.DownloadFileAsync(targetPath, DownloadHelper.patcherLink, "/PATCHERZIP.zip");
while(task.Status != System.Threading.Tasks.TaskStatus.RanToCompletion)
{
}
LogHelper.Info("Download Complete!");
2022-05-13 22:41:15 +01:00
}
else if (string.Equals(DownloadHelper.patchNeedCheck, "false", StringComparison.OrdinalIgnoreCase))
2022-05-13 22:41:15 +01:00
{
LogHelper.Info("Did not check for Patcher as its not needed");
2022-05-13 22:41:15 +01:00
}
if (akiZipPath == null)
2022-05-19 14:41:44 +01:00
{
LogHelper.Info("Unable to find Aki Zip in Directory");
LogHelper.Info("Downloading Aki Zip now!");
2022-05-31 14:49:28 +01:00
var task = DownloadHelper.DownloadFileAsync(targetPath, DownloadHelper.akiLink, "/AKIZIP.zip");
while (task.Status != System.Threading.Tasks.TaskStatus.RanToCompletion)
{
}
LogHelper.Info("Download Complete!");
2022-05-19 14:41:44 +01:00
}
LogHelper.Info("Ready to continue with installation");
PreCheckHelper.PatcherZipCheck(originalGamePath, targetPath, out patcherZipPath);
PreCheckHelper.AkiZipCheck(targetPath, out akiZipPath);
2022-05-19 14:41:44 +01:00
LogHelper.Info("Copying game files");
GameCopy(originalGamePath, targetPath);
if (string.Equals(DownloadHelper.patchNeedCheck, "true", StringComparison.OrdinalIgnoreCase))
2022-05-19 14:41:44 +01:00
{
PatcherCopy(targetPath, patcherZipPath);
PatcherProcess(targetPath);
}
2022-05-13 22:41:15 +01:00
2022-05-19 14:41:44 +01:00
AkiInstall(targetPath, akiZipPath);
DeleteZip(patcherZipPath, akiZipPath, Path.Join(targetPath, "/ClientVersions.json"));
}
2022-05-19 14:41:44 +01:00
static void GameCopy(string originalGamePath, string targetPath)
{
2022-05-19 14:41:44 +01:00
FileHelper.CopyDirectory(originalGamePath, targetPath, true);
LogHelper.Info("Game has been copied, Extracting patcher");
}
2022-05-19 14:41:44 +01:00
static void PatcherCopy(string targetPath, string patcherZipPath)
{
2022-05-19 14:41:44 +01:00
ZipHelper.Decompress(patcherZipPath, targetPath);
FileHelper.FindFolder(patcherZipPath, targetPath, out DirectoryInfo dir);
2022-05-14 02:58:38 +01:00
FileHelper.CopyDirectory(dir.FullName, targetPath, true);
2022-05-19 14:41:44 +01:00
2022-05-13 22:41:15 +01:00
if (dir.Exists)
{
dir.Delete(true);
dir.Refresh();
if (dir.Exists)
{
LogHelper.Error("unable to delete patcher folder");
LogHelper.Error($"please delete folder called {dir.FullName}");
}
}
}
2022-05-13 22:41:15 +01:00
2022-05-19 14:41:44 +01:00
static void PatcherProcess(string targetPath)
{
2022-05-19 14:41:44 +01:00
LogHelper.Info("patcher has been extracted, starting patcher");
2022-05-14 02:58:38 +01:00
ProcessHelper patcherProcess = new();
patcherProcess.StartProcess(Path.Join(targetPath + "/patcher.exe"), targetPath);
2022-05-13 22:41:15 +01:00
2022-05-19 14:41:44 +01:00
FileHelper.DeleteFiles(Path.Join(targetPath, "/patcher.exe"));
}
2022-05-13 22:41:15 +01:00
2022-05-19 14:41:44 +01:00
static void AkiInstall(string targetPath, string akiZipPath)
{
ZipHelper.Decompress(akiZipPath, targetPath);
LogHelper.Info("Aki has been extracted");
}
static void DeleteZip(string patcherZipPath, string akiZipPath, string versionJson)
2022-05-19 14:41:44 +01:00
{
FileHelper.DeleteFiles(patcherZipPath, false);
FileHelper.DeleteFiles(akiZipPath, false);
FileHelper.DeleteFiles(versionJson, false);
2022-05-19 14:41:44 +01:00
LogHelper.User("Removed Zips, Press enter to close the installer, you can then delete the installer");
LogHelper.User("ENJOY SPT-AKI!");
Console.ReadKey();
Environment.Exit(0);
}
static void CloseApp(string text)
{
LogHelper.Warning(text);
Console.ReadKey();
Environment.Exit(0);
2022-05-13 22:41:15 +01:00
}
}
}