Bump, Made ProcessHelper, PreCheckHelper, StringHelper non static, moved out methods to PreCheckHelper from Main, hopefully cleaned up Program.cs
This commit is contained in:
parent
a0d715cb44
commit
1cb9f5e03d
@ -10,26 +10,28 @@ namespace SPT_AKI_Installer.Aki.Core
|
||||
//TODO:
|
||||
// delete patcher zip and aki zip
|
||||
// progress for copyDirectory
|
||||
// move Game/patcher/aki check methods out of core
|
||||
// add figlet for SPT-AKI INSTALLER
|
||||
// locales, language selection
|
||||
// PreCheckHelper.AkiCheck is currently hardcoded for 2.3.1
|
||||
// get waffle to add exit code on patcher
|
||||
// remove all user input other than errors
|
||||
|
||||
//comments:
|
||||
// static: FileHelper, ZipHelper, LogHelper
|
||||
// nonStatic: ProcessHelper, PreCheckHelper, StringHelper
|
||||
|
||||
public static class SPTinstaller
|
||||
{
|
||||
public static string targetPath = Environment.CurrentDirectory;
|
||||
private static string patchRef;
|
||||
private static string akiRef;
|
||||
private static DirectoryInfo dir;
|
||||
private static string gamePath;
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
string targetPath = Environment.CurrentDirectory;
|
||||
PreCheckHelper preCheckHelper = new();
|
||||
#if DEBUG
|
||||
targetPath = @"D:\install";
|
||||
#endif
|
||||
GameCheck(out gamePath);
|
||||
preCheckHelper.GameCheck(out string gamePath);
|
||||
|
||||
if (PatcherCheck(gamePath, out patchRef))
|
||||
if (preCheckHelper.PatcherCheck(gamePath,targetPath, out string patchRef))
|
||||
{
|
||||
LogHelper.Info($"Correct Zip for Patcher Present: {patchRef}");
|
||||
}
|
||||
@ -41,7 +43,7 @@ namespace SPT_AKI_Installer.Aki.Core
|
||||
Environment.Exit(0);
|
||||
}
|
||||
|
||||
if (AkiCheck(out akiRef))
|
||||
if (preCheckHelper.AkiCheck(targetPath,out string akiRef))
|
||||
{
|
||||
LogHelper.Info($"Correct Zip for SPT-AKI Present: {akiRef}");
|
||||
}
|
||||
@ -57,16 +59,36 @@ namespace SPT_AKI_Installer.Aki.Core
|
||||
LogHelper.User("PLEASE PRESS ENTER TO COPY GAME FILES!");
|
||||
Console.ReadKey();
|
||||
|
||||
// copies and pastes EFT to AKI installer test folder
|
||||
GameCopy(gamePath, targetPath, akiRef);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// copies and pastes EFT to AKI installer test folder
|
||||
/// </summary>
|
||||
/// <param name="gamePath"></param>
|
||||
/// <param name="targetPath"></param>
|
||||
static void GameCopy(string gamePath, string targetPath, string akiRef)
|
||||
{
|
||||
#if !DEBUG
|
||||
FileHelper.CopyDirectory(gamePath, targetPath, true);
|
||||
#endif
|
||||
LogHelper.User("GAME HAS BEEN COPIED, PRESS ENTER TO EXTRACT PATCHER!");
|
||||
Console.ReadKey();
|
||||
#endif
|
||||
|
||||
// extracts patcher and moves out inner folders
|
||||
PatcherCopy(gamePath, targetPath, akiRef);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// extracts patcher and moves out inner folders
|
||||
/// </summary>
|
||||
/// <param name="patchRef"></param>
|
||||
/// <param name="targetPath"></param>
|
||||
/// <param name="akiRef"></param>
|
||||
static void PatcherCopy(string patchRef, string targetPath, string akiRef)
|
||||
{
|
||||
#if !DEBUG
|
||||
ZipHelper.Decompress(patchRef, targetPath);
|
||||
FileHelper.FindFolder(patchRef, out dir);
|
||||
FileHelper.FindFolder(patchRef, targetPath, out DirectoryInfo dir);
|
||||
FileHelper.CopyDirectory(dir.FullName, targetPath, true);
|
||||
if (dir.Exists)
|
||||
{
|
||||
@ -78,11 +100,22 @@ namespace SPT_AKI_Installer.Aki.Core
|
||||
LogHelper.Error($"please delete folder called {dir.FullName}");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
PatcherProcessStart(targetPath, akiRef);
|
||||
}
|
||||
|
||||
// starts patcher and checks for user input to exit patcher and proceed
|
||||
/// <summary>
|
||||
/// starts patcher and checks for user input to exit patcher and proceed
|
||||
/// </summary>
|
||||
/// <param name="targetPath"></param>
|
||||
/// <param name="akiRef"></param>
|
||||
static void PatcherProcessStart(string targetPath, string akiRef)
|
||||
{
|
||||
#if !DEBUG
|
||||
LogHelper.Info("PATCHER HAS BEEN EXTRACTED, STARTING PATCHER!");
|
||||
ProcessHelper patcherProcess = new();
|
||||
patcherProcess.StartProcess(Path.Join(targetPath + "/patcher.exe"), targetPath);
|
||||
#endif
|
||||
LogHelper.User("PATCHER HAS BEEN STARTED, TYPE YES ONCE THE PATCHER IS COMPLETE!");
|
||||
var complete = Console.ReadLine();
|
||||
|
||||
@ -97,72 +130,17 @@ namespace SPT_AKI_Installer.Aki.Core
|
||||
// if user input "yes" kill patcher process, delete patcher.exe, extract aki zip
|
||||
if (string.Equals(complete, "yes", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
#if !DEBUG
|
||||
patcherProcess.EndProcess();
|
||||
Thread.Sleep(1000);
|
||||
FileHelper.DeleteFile("file", targetPath + "/patcher.exe");
|
||||
ZipHelper.Decompress(akiRef, targetPath);
|
||||
#endif
|
||||
LogHelper.Info("AKI HAS BEEN EXTRACTED, RUN THE SERVER AND WAIT TILL YOU SEE HAPPY SERVER THEN LAUNCHER AND ENJOY!");
|
||||
LogHelper.User("PRESS ENTER TO CLOSE THE APP");
|
||||
Console.ReadKey();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// checks the game is installed, out = game directory
|
||||
/// </summary>
|
||||
/// <param name="gamePath"></param>
|
||||
private static void GameCheck(out string gamePath)
|
||||
{
|
||||
string Path = GameHelper.DetectOriginalGamePath();
|
||||
|
||||
if (Path == null)
|
||||
{
|
||||
LogHelper.Error("EFT IS NOT INSTALLED!");
|
||||
LogHelper.Error("Press enter to close the app");
|
||||
Console.ReadKey();
|
||||
Environment.Exit(0);
|
||||
}
|
||||
gamePath = Path;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// checks for patcher zip path, out = patcher path
|
||||
/// </summary>
|
||||
/// <param name="gamePath"></param>
|
||||
/// <param name="patchRef"></param>
|
||||
/// <returns>bool</returns>
|
||||
private static bool PatcherCheck(string gamePath, out string patchRef)
|
||||
{
|
||||
FileVersionInfo version = FileVersionInfo.GetVersionInfo(Path.Join(gamePath + "/EscapeFromTarkov.exe"));
|
||||
string versionCheck = StringHelper.Splitter(version.ProductVersion, '-', '.', 2);
|
||||
LogHelper.Info($"GAME VERSION IS: {version.ProductVersion}");
|
||||
string patcherRef = FileHelper.FindFile(targetPath, versionCheck);
|
||||
|
||||
if (patcherRef != null)
|
||||
{
|
||||
patchRef = patcherRef;
|
||||
return true;
|
||||
}
|
||||
patchRef = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// checks for aki zip path, out = aki path
|
||||
/// </summary>
|
||||
/// <param name="akiRef"></param>
|
||||
/// <returns>bool</returns>
|
||||
private static bool AkiCheck(out string akiRef)
|
||||
{
|
||||
string aki = FileHelper.FindFile(targetPath, "2.3.1");
|
||||
|
||||
if (aki != null)
|
||||
{
|
||||
akiRef = aki;
|
||||
return true;
|
||||
}
|
||||
akiRef = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,4 @@
|
||||
using SPT_AKI_Installer.Aki.Core;
|
||||
using System;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace SPT_AKI_Installer.Aki.Helper
|
||||
@ -84,11 +83,11 @@ namespace SPT_AKI_Installer.Aki.Helper
|
||||
/// <param name="patchRef"></param>
|
||||
/// <param name="dir"></param>
|
||||
/// <returns></returns>
|
||||
public static bool FindFolder(string patchRef, out DirectoryInfo dir)
|
||||
public static bool FindFolder(string patchRef, string targetPath, out DirectoryInfo dir)
|
||||
{
|
||||
var patchInfo = new FileInfo(patchRef);
|
||||
var patchName = patchInfo.Name.Replace(patchInfo.Extension, "");
|
||||
var path = new DirectoryInfo(Path.Join(SPTinstaller.targetPath, patchName));
|
||||
var path = new DirectoryInfo(Path.Join(targetPath, patchName));
|
||||
if (path.Exists)
|
||||
{
|
||||
dir = path;
|
||||
|
@ -1,23 +0,0 @@
|
||||
using Microsoft.Win32;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.IO;
|
||||
|
||||
namespace SPT_AKI_Installer.Aki.Helper
|
||||
{
|
||||
public static class GameHelper
|
||||
{
|
||||
private const string registryInstall = @"Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\EscapeFromTarkov";
|
||||
|
||||
public static string DetectOriginalGamePath()
|
||||
{
|
||||
// We can't detect the installed path on non-Windows
|
||||
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
return null;
|
||||
|
||||
var uninstallStringValue = Registry.LocalMachine.OpenSubKey(registryInstall, false)
|
||||
?.GetValue("UninstallString");
|
||||
var info = (uninstallStringValue is string key) ? new FileInfo(key) : null;
|
||||
return info?.DirectoryName;
|
||||
}
|
||||
}
|
||||
}
|
@ -12,7 +12,7 @@ namespace SPT_AKI_Installer.Aki.Helper
|
||||
|
||||
/// <summary>
|
||||
/// Outputs a string to console starting with [USER] with
|
||||
/// a Green background and Black foreground
|
||||
/// Green text
|
||||
/// </summary>
|
||||
public static void User(string text)
|
||||
{
|
||||
@ -21,7 +21,7 @@ namespace SPT_AKI_Installer.Aki.Helper
|
||||
|
||||
/// <summary>
|
||||
/// Outputs a string to console starting with [WARNING] with
|
||||
/// a Yellow background and Black foreground
|
||||
/// Yellow text
|
||||
/// </summary>
|
||||
public static void Warning(string text)
|
||||
{
|
||||
@ -30,7 +30,7 @@ namespace SPT_AKI_Installer.Aki.Helper
|
||||
|
||||
/// <summary>
|
||||
/// Outputs a string to console starting with [ERROR] with
|
||||
/// a Red background and Black foreground
|
||||
/// Red text
|
||||
/// </summary>
|
||||
public static void Error(string text)
|
||||
{
|
||||
@ -39,7 +39,7 @@ namespace SPT_AKI_Installer.Aki.Helper
|
||||
|
||||
/// <summary>
|
||||
/// Outputs a string to console starting with [INFO] with
|
||||
/// a DarkGray background and White foreground
|
||||
/// Blue text
|
||||
/// </summary>
|
||||
public static void Info(string text)
|
||||
{
|
||||
|
91
Aki.Helper/PreCheckHelper.cs
Normal file
91
Aki.Helper/PreCheckHelper.cs
Normal file
@ -0,0 +1,91 @@
|
||||
using Microsoft.Win32;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.IO;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace SPT_AKI_Installer.Aki.Helper
|
||||
{
|
||||
public class PreCheckHelper
|
||||
{
|
||||
private const string registryInstall = @"Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\EscapeFromTarkov";
|
||||
|
||||
/// <summary>
|
||||
/// gets the original EFT game path
|
||||
/// </summary>
|
||||
/// <returns>Path or null</returns>
|
||||
public string DetectOriginalGamePath()
|
||||
{
|
||||
// We can't detect the installed path on non-Windows
|
||||
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
return null;
|
||||
|
||||
var uninstallStringValue = Registry.LocalMachine.OpenSubKey(registryInstall, false)
|
||||
?.GetValue("UninstallString");
|
||||
var info = (uninstallStringValue is string key) ? new FileInfo(key) : null;
|
||||
return info?.DirectoryName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// checks path is not null, out = gamePath
|
||||
/// </summary>
|
||||
/// <param name="gamePath"></param>
|
||||
public void GameCheck(out string gamePath)
|
||||
{
|
||||
string Path = DetectOriginalGamePath();
|
||||
|
||||
if (Path == null)
|
||||
{
|
||||
LogHelper.Error("EFT IS NOT INSTALLED!");
|
||||
LogHelper.Error("Press enter to close the app");
|
||||
Console.ReadKey();
|
||||
Environment.Exit(0);
|
||||
}
|
||||
gamePath = Path;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks version of EFT installed, Then checks that matches the Zip, out = patch version number 0.12.12.*here*
|
||||
/// </summary>
|
||||
/// <param name="gamePath"></param>
|
||||
/// <param name="targetPath"></param>
|
||||
/// <param name="patchRef"></param>
|
||||
/// <returns>bool</returns>
|
||||
public bool PatcherCheck(string gamePath,string targetPath, out string patchRef)
|
||||
{
|
||||
StringHelper stringHelper = new StringHelper();
|
||||
FileVersionInfo version = FileVersionInfo.GetVersionInfo(Path.Join(gamePath + "/EscapeFromTarkov.exe"));
|
||||
|
||||
string versionCheck = stringHelper.Splitter(version.ProductVersion, '-', '.', 2);
|
||||
LogHelper.Info($"GAME VERSION IS: {version.ProductVersion}");
|
||||
string patcherRef = FileHelper.FindFile(targetPath, versionCheck);
|
||||
|
||||
if (patcherRef != null)
|
||||
{
|
||||
patchRef = patcherRef;
|
||||
return true;
|
||||
}
|
||||
patchRef = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks Aki Zip is 2.3.1 currently
|
||||
/// </summary>
|
||||
/// <param name="targetPath"></param>
|
||||
/// <param name="akiRef"></param>
|
||||
/// <returns>bool</returns>
|
||||
public bool AkiCheck(string targetPath,out string akiRef)
|
||||
{
|
||||
string aki = FileHelper.FindFile(targetPath, "2.3.1");
|
||||
|
||||
if (aki != null)
|
||||
{
|
||||
akiRef = aki;
|
||||
return true;
|
||||
}
|
||||
akiRef = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.IO;
|
||||
using System.Diagnostics;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace SPT_AKI_Installer.Aki.Helper
|
||||
{
|
||||
|
@ -6,7 +6,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace SPT_AKI_Installer.Aki.Helper
|
||||
{
|
||||
internal class StatusHelper
|
||||
{
|
||||
}
|
||||
public class StatusHelper
|
||||
{
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
namespace SPT_AKI_Installer.Aki.Helper
|
||||
{
|
||||
public static class StringHelper
|
||||
public class StringHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// string to split, changes oldChar to newChar
|
||||
@ -10,7 +10,7 @@
|
||||
/// <param name="newChar"></param>
|
||||
/// <param name="amount"></param>
|
||||
/// <returns>returns the string at a position using amount</returns>
|
||||
public static string Splitter(string toSplit, char oldChar, char newChar, int amount)
|
||||
public string Splitter(string toSplit, char oldChar, char newChar, int amount)
|
||||
{
|
||||
return toSplit.Replace(oldChar, newChar).Split(newChar)[^amount];
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user