95 lines
2.9 KiB
C#
Raw Normal View History

2023-05-11 23:11:39 -04:00
using SPTInstaller.Aki.Helper;
using SPTInstaller.Interfaces;
using SPTInstaller.Models;
2022-07-09 00:33:55 -04:00
using System;
2022-07-09 13:08:41 -04:00
using System.IO;
2022-07-09 00:33:55 -04:00
using System.Linq;
using System.Threading.Tasks;
2023-05-11 23:11:39 -04:00
namespace SPTInstaller.Installer_Tasks
2022-07-09 00:33:55 -04:00
{
2023-05-11 23:11:39 -04:00
public class SetupClientTask : InstallerTaskBase
2022-07-09 00:33:55 -04:00
{
private InternalData _data;
2023-05-11 23:11:39 -04:00
public SetupClientTask(InternalData data) : base("Setup Client")
2022-07-09 00:33:55 -04:00
{
_data = data;
}
2023-05-11 23:11:39 -04:00
public override async Task<IResult> TaskOperation()
2022-07-09 00:33:55 -04:00
{
var targetInstallDirInfo = new DirectoryInfo(_data.TargetInstallPath);
2022-07-09 13:08:41 -04:00
var patcherOutputDir = new DirectoryInfo(Path.Join(_data.TargetInstallPath, "patcher"));
var patcherEXE = new FileInfo(Path.Join(_data.TargetInstallPath, "patcher.exe"));
2022-07-09 13:08:41 -04:00
2023-05-11 23:11:39 -04:00
var progress = new Progress<double>((d) => { SetStatus("", (int)Math.Floor(d)); });
if (_data.PatchNeeded)
2022-07-09 13:08:41 -04:00
{
// extract patcher files
2023-05-11 23:11:39 -04:00
SetStatus("Extrating Patcher", 0);
2022-07-09 13:08:41 -04:00
2023-05-11 23:11:39 -04:00
var extractPatcherResult = ZipHelper.Decompress(_data.PatcherZipInfo, patcherOutputDir, progress);
2022-07-09 13:08:41 -04:00
if (!extractPatcherResult.Succeeded)
{
return extractPatcherResult;
}
2022-07-09 13:08:41 -04:00
// copy patcher files to install directory
2023-05-11 23:11:39 -04:00
SetStatus("Copying Patcher", 0);
2022-07-09 13:08:41 -04:00
var patcherDirInfo = patcherOutputDir.GetDirectories("Patcher*", SearchOption.TopDirectoryOnly).First();
2022-07-09 13:08:41 -04:00
2023-05-11 23:11:39 -04:00
var copyPatcherResult = FileHelper.CopyDirectoryWithProgress(patcherDirInfo, targetInstallDirInfo, progress);
if (!copyPatcherResult.Succeeded)
{
return copyPatcherResult;
}
// run patcher
SetStatus("Running Patcher");
2023-05-11 23:11:39 -04:00
// TODO: indeterminate progress indicator
//StartDrawingIndeterminateProgress();
var patchingResult = ProcessHelper.PatchClientFiles(patcherEXE, targetInstallDirInfo);
if (!patchingResult.Succeeded)
{
return patchingResult;
}
2022-07-09 13:08:41 -04:00
}
// extract release files
2023-05-11 23:11:39 -04:00
SetStatus("Extracting Release", 0);
2022-07-09 13:08:41 -04:00
2023-05-11 23:11:39 -04:00
var extractReleaseResult = ZipHelper.Decompress(_data.AkiZipInfo, targetInstallDirInfo, progress);
2022-07-09 13:08:41 -04:00
2022-07-09 13:14:03 -04:00
if (!extractReleaseResult.Succeeded)
2022-07-09 13:08:41 -04:00
{
return extractReleaseResult;
2022-07-09 13:08:41 -04:00
}
// cleanup temp files
SetStatus("Cleanup");
2023-05-11 23:11:39 -04:00
// TODO: indeterminate progress indicator
//StartDrawingIndeterminateProgress();
2022-07-09 13:08:41 -04:00
if(_data.PatchNeeded)
{
patcherOutputDir.Delete(true);
patcherEXE.Delete();
}
2022-07-09 13:08:41 -04:00
2023-05-11 23:11:39 -04:00
return Result.FromSuccess("SPT is Setup. Happy Playing!");
2022-07-09 00:33:55 -04:00
}
}
}