Skip to content

Commit 62736e7

Browse files
committed
Merge branch 'dev/v3.10.x' into freezed
2 parents e2781a1 + 9f587fd commit 62736e7

File tree

4 files changed

+38
-2
lines changed

4 files changed

+38
-2
lines changed

Assets/PatchKit Patcher/Scripts/AppUpdater/AppUpdaterRepairStrategy.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Linq;
33
using System.Collections.Generic;
44
using PatchKit.Logging;
5+
using PatchKit.Unity.Patcher.AppData;
56
using PatchKit.Unity.Patcher.Cancellation;
67
using PatchKit.Unity.Patcher.Debug;
78
using PatchKit.Unity.Patcher.AppData.Local;
@@ -76,6 +77,30 @@ ICheckVersionIntegrityCommand checkVersionIntegrityCommand
7677

7778
FileIntegrity[] filesIntegrity = checkVersionIntegrityCommand.Results.Files;
7879

80+
var contentSummary = _context.App.RemoteMetaData.GetContentSummary(installedVersionId);
81+
82+
foreach (var invalidVersionIdFile in filesIntegrity.Where(x =>
83+
x.Status == FileIntegrityStatus.InvalidVersion).ToArray())
84+
{
85+
var fileName = invalidVersionIdFile.FileName;
86+
var file = contentSummary.Files.First(x => x.Path == fileName);
87+
88+
var localPath = _context.App.LocalDirectory.Path.PathCombine(file.Path);
89+
90+
string actualFileHash = HashCalculator.ComputeFileHash(localPath);
91+
if (actualFileHash != file.Hash)
92+
{
93+
FileOperations.Delete(localPath);
94+
_context.App.LocalMetaData.RegisterEntry(fileName, installedVersionId);
95+
invalidVersionIdFile.Status = FileIntegrityStatus.MissingData;
96+
}
97+
else
98+
{
99+
_context.App.LocalMetaData.RegisterEntry(fileName, installedVersionId);
100+
invalidVersionIdFile.Status = FileIntegrityStatus.Ok;
101+
}
102+
}
103+
79104
Pack1Meta.FileEntry[] brokenFiles = filesIntegrity
80105
// Filter only files with invalid size, hash or missing entirely
81106
.Where(f => f.Status == FileIntegrityStatus.InvalidHash

Assets/PatchKit Patcher/Scripts/AppUpdater/AppUpdaterStrategyResolver.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,9 @@ public StrategyType Resolve([NotNull] AppUpdaterContext context)
7070
{
7171
_logger.LogDebug("Resolving best strategy for updating...");
7272

73-
if (context.App.IsFullyInstalled() || context.App.IsInstallationBroken())
73+
bool isInstallationBroken = context.App.IsInstallationBroken();
74+
75+
if (context.App.IsFullyInstalled() || isInstallationBroken)
7476
{
7577
int installedVersionId = context.App.GetInstalledVersionId();
7678
_logger.LogTrace("installedVersionId = " + installedVersionId);
@@ -82,6 +84,11 @@ public StrategyType Resolve([NotNull] AppUpdaterContext context)
8284
{
8385
_logger.LogDebug("Installed version is the same as the latest version. Using empty strategy.");
8486

87+
if (isInstallationBroken)
88+
{
89+
return StrategyType.Repair;
90+
}
91+
8592
return StrategyType.Empty;
8693
}
8794

Assets/PatchKit Patcher/Scripts/AppUpdater/Commands/FileIntegrity.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public FileIntegrity(string fileName, FileIntegrityStatus status, string message
1313

1414
public readonly string Message;
1515

16-
public FileIntegrityStatus Status { get; private set; }
16+
public FileIntegrityStatus Status { get; set; }
1717

1818
public static FileIntegrity WithMessage<T>(T expectedValue, T actualValue, FileIntegrityStatus status, string filePath)
1919
{

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
1414
### Changed
1515
- Patcher will timeout if the downloading stopped sooner than after 5 minutes
1616

17+
## [3.10.1p3]
18+
### Fixed
19+
- Fix repairing files with invalid version id
20+
1721
## [3.10.1p2]
1822
### Fixed
1923
- Slow download performance due to small buffer size

0 commit comments

Comments
 (0)