mirror of
https://github.com/sp-tarkov/patcher.git
synced 2025-02-13 00:50:46 -05:00
adding basic logging
This commit is contained in:
parent
0cfb36a775
commit
869823f6a4
BIN
Patcher/PatchGenerator/Resources/PatchClient.exe
(Stored with Git LFS)
BIN
Patcher/PatchGenerator/Resources/PatchClient.exe
(Stored with Git LFS)
Binary file not shown.
@ -1,4 +1,5 @@
|
|||||||
using System.Diagnostics;
|
using PatcherUtils.Model;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
@ -49,11 +50,13 @@ namespace PatcherUtils
|
|||||||
|
|
||||||
if (outputFile.Exists)
|
if (outputFile.Exists)
|
||||||
{
|
{
|
||||||
|
PatchLogger.LogInfo($"Deleting Existing Resource: {outputFile.Name}");
|
||||||
outputFile.Delete();
|
outputFile.Delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!outputFile.Directory.Exists)
|
if (!outputFile.Directory.Exists)
|
||||||
{
|
{
|
||||||
|
PatchLogger.LogInfo($"Creating Resource Directory: {outputFile.Directory.Name}");
|
||||||
Directory.CreateDirectory(outputFile.Directory.FullName);
|
Directory.CreateDirectory(outputFile.Directory.FullName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,6 +64,7 @@ namespace PatcherUtils
|
|||||||
using (Stream s = assembly.GetManifestResourceStream(ResourceName))
|
using (Stream s = assembly.GetManifestResourceStream(ResourceName))
|
||||||
{
|
{
|
||||||
s.CopyTo(fs);
|
s.CopyTo(fs);
|
||||||
|
PatchLogger.LogInfo($"Resourced streamed out of assembly: {outputFile.Name}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,6 +107,8 @@ namespace PatcherUtils
|
|||||||
};
|
};
|
||||||
|
|
||||||
Process.Start(procInfo);
|
Process.Start(procInfo);
|
||||||
|
|
||||||
|
PatchLogger.LogInfo($"Zip process started");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -115,6 +121,7 @@ namespace PatcherUtils
|
|||||||
if (dir.Exists)
|
if (dir.Exists)
|
||||||
{
|
{
|
||||||
dir.Delete(true);
|
dir.Delete(true);
|
||||||
|
PatchLogger.LogInfo("Temp directory delted");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
30
Patcher/PatcherUtils/Model/PatchLogger.cs
Normal file
30
Patcher/PatcherUtils/Model/PatchLogger.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace PatcherUtils.Model
|
||||||
|
{
|
||||||
|
public static class PatchLogger
|
||||||
|
{
|
||||||
|
private static string LogFilePath = "Patcher.log".FromCwd();
|
||||||
|
private static void LogToFile(string message)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File.AppendAllLines(LogFilePath, new[] { message });
|
||||||
|
}
|
||||||
|
catch(Exception)
|
||||||
|
{
|
||||||
|
//TODO - proper logging at some point or whatever idk... -waffle
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string GetTimestamp()
|
||||||
|
{
|
||||||
|
return DateTime.Now.ToString("MM/dd/yyyy - hh:mm:ss tt]");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void LogInfo(string message) => LogToFile($"{GetTimestamp()}[INFO]: {message}");
|
||||||
|
public static void LogError(string message) => LogToFile($"{GetTimestamp()}[ERROR]: {message}");
|
||||||
|
public static void LogException(Exception ex) => LogToFile($"{GetTimestamp()}[EXCEPTION]: {ex.Message}\n\nStackTrace:\n{ex.StackTrace}");
|
||||||
|
}
|
||||||
|
}
|
@ -72,6 +72,9 @@ namespace PatcherUtils
|
|||||||
/// <returns>True if the hashes match</returns>
|
/// <returns>True if the hashes match</returns>
|
||||||
private bool CompareFileHashes(string SourceFilePath, string TargetFilePath)
|
private bool CompareFileHashes(string SourceFilePath, string TargetFilePath)
|
||||||
{
|
{
|
||||||
|
var sourceInfo = new FileInfo(SourceFilePath);
|
||||||
|
var targetInfo = new FileInfo(TargetFilePath);
|
||||||
|
|
||||||
using (MD5 md5Service = MD5.Create())
|
using (MD5 md5Service = MD5.Create())
|
||||||
using (var sourceStream = File.OpenRead(SourceFilePath))
|
using (var sourceStream = File.OpenRead(SourceFilePath))
|
||||||
using (var targetStream = File.OpenRead(TargetFilePath))
|
using (var targetStream = File.OpenRead(TargetFilePath))
|
||||||
@ -79,7 +82,11 @@ namespace PatcherUtils
|
|||||||
byte[] sourceHash = md5Service.ComputeHash(sourceStream);
|
byte[] sourceHash = md5Service.ComputeHash(sourceStream);
|
||||||
byte[] targetHash = md5Service.ComputeHash(targetStream);
|
byte[] targetHash = md5Service.ComputeHash(targetStream);
|
||||||
|
|
||||||
return Enumerable.SequenceEqual(sourceHash, targetHash);
|
bool matched = Enumerable.SequenceEqual(sourceHash, targetHash);
|
||||||
|
|
||||||
|
PatchLogger.LogInfo($"Hash Check: S({sourceInfo.Name}|{Convert.ToBase64String(sourceHash)}) - T({targetInfo.Name}|{Convert.ToBase64String(targetHash)}) - Match:{matched}");
|
||||||
|
|
||||||
|
return matched;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +109,21 @@ namespace PatcherUtils
|
|||||||
|
|
||||||
if (File.Exists(decodedPath))
|
if (File.Exists(decodedPath))
|
||||||
{
|
{
|
||||||
File.Move(decodedPath, SourceFilePath, true);
|
PatchLogger.LogInfo($"File delta decoded: {SourceFilePath}");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File.Move(decodedPath, SourceFilePath, true);
|
||||||
|
PatchLogger.LogInfo($"Delta applied: {DeltaFilePath}");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
PatchLogger.LogException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PatchLogger.LogError($"Failed to decode file delta: {SourceFilePath}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,9 +139,14 @@ namespace PatcherUtils
|
|||||||
|
|
||||||
string deltaPath = GetDeltaPath(SourceFilePath, SourceFolder, "delta");
|
string deltaPath = GetDeltaPath(SourceFilePath, SourceFolder, "delta");
|
||||||
|
|
||||||
Directory.CreateDirectory(deltaPath.Replace(sourceFileInfo.Name + ".delta", ""));
|
try
|
||||||
|
{
|
||||||
//TODO - don't hardcode FileName
|
Directory.CreateDirectory(deltaPath.Replace(sourceFileInfo.Name + ".delta", ""));
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
PatchLogger.LogException(ex);
|
||||||
|
}
|
||||||
|
|
||||||
Process.Start(new ProcessStartInfo
|
Process.Start(new ProcessStartInfo
|
||||||
{
|
{
|
||||||
@ -129,6 +155,15 @@ namespace PatcherUtils
|
|||||||
CreateNoWindow = true
|
CreateNoWindow = true
|
||||||
})
|
})
|
||||||
.WaitForExit();
|
.WaitForExit();
|
||||||
|
|
||||||
|
if (File.Exists(deltaPath))
|
||||||
|
{
|
||||||
|
PatchLogger.LogInfo($"File created [DELTA]: {deltaPath}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PatchLogger.LogError($"File Create failed [DELTA]: {deltaPath}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -142,9 +177,24 @@ namespace PatcherUtils
|
|||||||
|
|
||||||
string deltaPath = GetDeltaPath(SourceFile, SourceFolder, "del");
|
string deltaPath = GetDeltaPath(SourceFile, SourceFolder, "del");
|
||||||
|
|
||||||
Directory.CreateDirectory(deltaPath.Replace(sourceFileInfo.Name + ".del", ""));
|
try
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(deltaPath.Replace(sourceFileInfo.Name + ".del", ""));
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
PatchLogger.LogException(ex);
|
||||||
|
}
|
||||||
|
|
||||||
File.Create(deltaPath);
|
try
|
||||||
|
{
|
||||||
|
File.Create(deltaPath);
|
||||||
|
PatchLogger.LogInfo($"File Created [DEL]: {deltaPath}");
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
PatchLogger.LogException(ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -158,9 +208,24 @@ namespace PatcherUtils
|
|||||||
|
|
||||||
string deltaPath = GetDeltaPath(TargetFile, TargetFolder, "new");
|
string deltaPath = GetDeltaPath(TargetFile, TargetFolder, "new");
|
||||||
|
|
||||||
Directory.CreateDirectory(deltaPath.Replace(targetSourceInfo.Name + ".new", ""));
|
try
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(deltaPath.Replace(targetSourceInfo.Name + ".new", ""));
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
PatchLogger.LogException(ex);
|
||||||
|
}
|
||||||
|
|
||||||
targetSourceInfo.CopyTo(deltaPath, true);
|
try
|
||||||
|
{
|
||||||
|
targetSourceInfo.CopyTo(deltaPath, true);
|
||||||
|
PatchLogger.LogInfo($"File Created [NEW]: {deltaPath}");
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
PatchLogger.LogException(ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -170,16 +235,32 @@ namespace PatcherUtils
|
|||||||
/// <remarks>Patches are created in the delta folder specified during contruction</remarks>
|
/// <remarks>Patches are created in the delta folder specified during contruction</remarks>
|
||||||
public PatchMessage GeneratePatches()
|
public PatchMessage GeneratePatches()
|
||||||
{
|
{
|
||||||
|
PatchLogger.LogInfo(" ::: Starting patch generation :::");
|
||||||
//get all directory information needed
|
//get all directory information needed
|
||||||
DirectoryInfo sourceDir = new DirectoryInfo(SourceFolder);
|
DirectoryInfo sourceDir = new DirectoryInfo(SourceFolder);
|
||||||
DirectoryInfo targetDir = new DirectoryInfo(TargetFolder);
|
DirectoryInfo targetDir = new DirectoryInfo(TargetFolder);
|
||||||
DirectoryInfo deltaDir = Directory.CreateDirectory(DeltaFolder);
|
DirectoryInfo deltaDir = Directory.CreateDirectory(DeltaFolder);
|
||||||
|
|
||||||
//make sure all directories exist
|
//make sure all directories exist
|
||||||
if (!sourceDir.Exists || !targetDir.Exists || !deltaDir.Exists)
|
if (!sourceDir.Exists)
|
||||||
{
|
{
|
||||||
//One of the directories doesn't exist
|
string message = $"Could not find source directory: {sourceDir.FullName}";
|
||||||
return new PatchMessage("Could not find a directory", PatcherExitCode.MissingDir);
|
PatchLogger.LogError(message);
|
||||||
|
return new PatchMessage(message, PatcherExitCode.MissingDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!targetDir.Exists)
|
||||||
|
{
|
||||||
|
string message = $"Could not find target directory: {targetDir.FullName}";
|
||||||
|
PatchLogger.LogError(message);
|
||||||
|
return new PatchMessage(message, PatcherExitCode.MissingDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!deltaDir.Exists)
|
||||||
|
{
|
||||||
|
string message = $"Could not find delta directory: {deltaDir.FullName}";
|
||||||
|
PatchLogger.LogError(message);
|
||||||
|
return new PatchMessage(message, PatcherExitCode.MissingDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
LazyOperations.ExtractResourcesToTempDir();
|
LazyOperations.ExtractResourcesToTempDir();
|
||||||
@ -188,6 +269,8 @@ namespace PatcherUtils
|
|||||||
|
|
||||||
fileCountTotal = SourceFiles.Count;
|
fileCountTotal = SourceFiles.Count;
|
||||||
|
|
||||||
|
PatchLogger.LogInfo($"Total source files: {fileCountTotal}");
|
||||||
|
|
||||||
AdditionalInfo.Clear();
|
AdditionalInfo.Clear();
|
||||||
AdditionalInfo.Add(new LineItem("Delta Patch", 0));
|
AdditionalInfo.Add(new LineItem("Delta Patch", 0));
|
||||||
AdditionalInfo.Add(new LineItem("New Patch", 0));
|
AdditionalInfo.Add(new LineItem("New Patch", 0));
|
||||||
@ -206,6 +289,7 @@ namespace PatcherUtils
|
|||||||
//if the target file doesn't exist in the source files, the target file needs to be added.
|
//if the target file doesn't exist in the source files, the target file needs to be added.
|
||||||
if (sourceFile == null)
|
if (sourceFile == null)
|
||||||
{
|
{
|
||||||
|
PatchLogger.LogInfo("::: Creating .new file :::");
|
||||||
CreateNewFile(targetFile.FullName);
|
CreateNewFile(targetFile.FullName);
|
||||||
|
|
||||||
newCount++;
|
newCount++;
|
||||||
@ -221,16 +305,25 @@ namespace PatcherUtils
|
|||||||
//if a matching source file was found, check the file hashes and get the delta.
|
//if a matching source file was found, check the file hashes and get the delta.
|
||||||
if (!CompareFileHashes(sourceFile.FullName, targetFile.FullName))
|
if (!CompareFileHashes(sourceFile.FullName, targetFile.FullName))
|
||||||
{
|
{
|
||||||
|
PatchLogger.LogInfo("::: Creating .delta file :::");
|
||||||
CreateDelta(sourceFile.FullName, targetFile.FullName);
|
CreateDelta(sourceFile.FullName, targetFile.FullName);
|
||||||
extension = ".delta";
|
extension = ".delta";
|
||||||
deltaCount++;
|
deltaCount++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
PatchLogger.LogInfo("::: File Exists :::");
|
||||||
existCount++;
|
existCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
SourceFiles.Remove(sourceFile);
|
try
|
||||||
|
{
|
||||||
|
SourceFiles.Remove(sourceFile);
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
PatchLogger.LogException(ex);
|
||||||
|
}
|
||||||
|
|
||||||
filesProcessed++;
|
filesProcessed++;
|
||||||
|
|
||||||
@ -244,7 +337,12 @@ namespace PatcherUtils
|
|||||||
//Any remaining source files do not exist in the target folder and can be removed.
|
//Any remaining source files do not exist in the target folder and can be removed.
|
||||||
//reset progress info
|
//reset progress info
|
||||||
|
|
||||||
if (SourceFiles.Count == 0) return new PatchMessage("Generation Done", PatcherExitCode.Success);
|
if (SourceFiles.Count == 0)
|
||||||
|
{
|
||||||
|
PatchLogger.LogInfo("::: Patch Generation Complete :::");
|
||||||
|
|
||||||
|
return new PatchMessage("Generation Done", PatcherExitCode.Success);
|
||||||
|
}
|
||||||
|
|
||||||
RaiseProgressChanged(0, SourceFiles.Count, "Processing .del files...");
|
RaiseProgressChanged(0, SourceFiles.Count, "Processing .del files...");
|
||||||
filesProcessed = 0;
|
filesProcessed = 0;
|
||||||
@ -252,6 +350,7 @@ namespace PatcherUtils
|
|||||||
|
|
||||||
foreach (FileInfo delFile in SourceFiles)
|
foreach (FileInfo delFile in SourceFiles)
|
||||||
{
|
{
|
||||||
|
PatchLogger.LogInfo("::: Creating .del file :::");
|
||||||
CreateDelFile(delFile.FullName);
|
CreateDelFile(delFile.FullName);
|
||||||
|
|
||||||
delCount++;
|
delCount++;
|
||||||
@ -262,6 +361,8 @@ namespace PatcherUtils
|
|||||||
RaiseProgressChanged(filesProcessed, fileCountTotal, $"{delFile.FullName.Replace(SourceFolder, "...")}.del", AdditionalInfo.ToArray());
|
RaiseProgressChanged(filesProcessed, fileCountTotal, $"{delFile.FullName.Replace(SourceFolder, "...")}.del", AdditionalInfo.ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PatchLogger.LogInfo("::: Patch Generation Complete :::");
|
||||||
|
|
||||||
return new PatchMessage("Generation Done", PatcherExitCode.Success);
|
return new PatchMessage("Generation Done", PatcherExitCode.Success);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,14 +372,25 @@ namespace PatcherUtils
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public PatchMessage ApplyPatches()
|
public PatchMessage ApplyPatches()
|
||||||
{
|
{
|
||||||
|
PatchLogger.LogInfo("::: Starting patch application :::");
|
||||||
|
|
||||||
//get needed directory information
|
//get needed directory information
|
||||||
DirectoryInfo sourceDir = new DirectoryInfo(SourceFolder);
|
DirectoryInfo sourceDir = new DirectoryInfo(SourceFolder);
|
||||||
DirectoryInfo deltaDir = new DirectoryInfo(DeltaFolder);
|
DirectoryInfo deltaDir = new DirectoryInfo(DeltaFolder);
|
||||||
|
|
||||||
//check directories exist
|
//check directories exist
|
||||||
if (!sourceDir.Exists || !deltaDir.Exists)
|
if (!sourceDir.Exists)
|
||||||
{
|
{
|
||||||
return new PatchMessage("One of the supplied directories doesn't exist", PatcherExitCode.MissingDir);
|
string message = $"Could not find source directory: {sourceDir.FullName}";
|
||||||
|
PatchLogger.LogError(message);
|
||||||
|
return new PatchMessage(message, PatcherExitCode.MissingDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!deltaDir.Exists)
|
||||||
|
{
|
||||||
|
string message = $"Could not find delta directory: {deltaDir.FullName}";
|
||||||
|
PatchLogger.LogError(message);
|
||||||
|
return new PatchMessage(message, PatcherExitCode.MissingDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
LazyOperations.ExtractResourcesToTempDir();
|
LazyOperations.ExtractResourcesToTempDir();
|
||||||
@ -291,6 +403,7 @@ namespace PatcherUtils
|
|||||||
newCount = deltaFiles.Where(x => x.Extension == ".new").Count();
|
newCount = deltaFiles.Where(x => x.Extension == ".new").Count();
|
||||||
delCount = deltaFiles.Where(x => x.Extension == ".del").Count();
|
delCount = deltaFiles.Where(x => x.Extension == ".del").Count();
|
||||||
|
|
||||||
|
PatchLogger.LogInfo($"Patch File Counts: DELTA({deltaCount}) - NEW({newCount}) - DEL({delCount})");
|
||||||
|
|
||||||
AdditionalInfo = new List<LineItem>()
|
AdditionalInfo = new List<LineItem>()
|
||||||
{
|
{
|
||||||
@ -317,6 +430,7 @@ namespace PatcherUtils
|
|||||||
return new PatchMessage($"Failed to find matching source file for '{deltaFile.FullName}'", PatcherExitCode.MissingFile);
|
return new PatchMessage($"Failed to find matching source file for '{deltaFile.FullName}'", PatcherExitCode.MissingFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PatchLogger.LogInfo("::: Applying Delta :::");
|
||||||
ApplyDelta(sourceFile.FullName, deltaFile.FullName);
|
ApplyDelta(sourceFile.FullName, deltaFile.FullName);
|
||||||
|
|
||||||
deltaCount--;
|
deltaCount--;
|
||||||
@ -325,15 +439,19 @@ namespace PatcherUtils
|
|||||||
}
|
}
|
||||||
case ".new":
|
case ".new":
|
||||||
{
|
{
|
||||||
if (newCount == 2 || newCount == 1 || newCount == 0)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//copy new file
|
//copy new file
|
||||||
string destination = Path.Join(sourceDir.FullName, deltaFile.FullName.Replace(deltaDir.FullName, "").Replace(".new", ""));
|
string destination = Path.Join(sourceDir.FullName, deltaFile.FullName.Replace(deltaDir.FullName, "").Replace(".new", ""));
|
||||||
|
|
||||||
File.Copy(deltaFile.FullName, destination, true);
|
PatchLogger.LogInfo("::: Adding New File :::");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File.Copy(deltaFile.FullName, destination, true);
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
PatchLogger.LogException(ex);
|
||||||
|
}
|
||||||
|
|
||||||
newCount--;
|
newCount--;
|
||||||
|
|
||||||
@ -344,7 +462,16 @@ namespace PatcherUtils
|
|||||||
//remove unneeded file
|
//remove unneeded file
|
||||||
string delFilePath = Path.Join(sourceDir.FullName, deltaFile.FullName.Replace(deltaDir.FullName, "").Replace(".del", ""));
|
string delFilePath = Path.Join(sourceDir.FullName, deltaFile.FullName.Replace(deltaDir.FullName, "").Replace(".del", ""));
|
||||||
|
|
||||||
File.Delete(delFilePath);
|
PatchLogger.LogInfo("::: Removing Uneeded File :::");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File.Delete(delFilePath);
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
PatchLogger.LogException(ex);
|
||||||
|
}
|
||||||
|
|
||||||
delCount--;
|
delCount--;
|
||||||
|
|
||||||
@ -360,6 +487,7 @@ namespace PatcherUtils
|
|||||||
RaiseProgressChanged(filesProcessed, fileCountTotal, deltaFile.Name, AdditionalInfo.ToArray());
|
RaiseProgressChanged(filesProcessed, fileCountTotal, deltaFile.Name, AdditionalInfo.ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PatchLogger.LogInfo("::: Patching Complete :::");
|
||||||
return new PatchMessage($"Patching Complete. You can delete the patcher.exe file.", PatcherExitCode.Success);
|
return new PatchMessage($"Patching Complete. You can delete the patcher.exe file.", PatcherExitCode.Success);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user