mirror of
https://github.com/velopack/velopack.git
synced 2025-10-25 15:19:22 +00:00
* Add helper method GetLocalPackagePath for IVelopackLocator
This commit is contained in:
committed by
Caelan Sayler
parent
5265003d2e
commit
a508f9f440
20
src/Velopack/Locators/VelopackLocatorExtensions.cs
Normal file
20
src/Velopack/Locators/VelopackLocatorExtensions.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace Velopack.Locators
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// An interface describing where Velopack can find key folders and files.
|
||||||
|
/// </summary>
|
||||||
|
internal static class VelopackLocatorExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Get the file path that should be used for storing <paramref name="velopackAsset"/> in the local
|
||||||
|
/// <see cref="IVelopackLocator.PackagesDir"/>
|
||||||
|
/// </summary>
|
||||||
|
public static string GetLocalPackagePath(this IVelopackLocator locator, VelopackAsset velopackAsset)
|
||||||
|
{
|
||||||
|
return Path.Combine(locator.PackagesDir!, Utility.GetSafeFilename(velopackAsset.FileName));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -229,9 +229,8 @@ namespace Velopack
|
|||||||
using var _mut = AcquireUpdateLock();
|
using var _mut = AcquireUpdateLock();
|
||||||
|
|
||||||
var appTempDir = Locator.AppTempDir!;
|
var appTempDir = Locator.AppTempDir!;
|
||||||
var appPackageDir = Locator.PackagesDir!;
|
|
||||||
|
|
||||||
var completeFile = Path.Combine(appPackageDir, Utility.GetSafeFilename(targetRelease.FileName));
|
var completeFile = Locator.GetLocalPackagePath(targetRelease);
|
||||||
var incompleteFile = completeFile + ".partial";
|
var incompleteFile = completeFile + ".partial";
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -239,7 +238,7 @@ namespace Velopack
|
|||||||
if (File.Exists(completeFile)) {
|
if (File.Exists(completeFile)) {
|
||||||
Log.Info($"Package already exists on disk: '{completeFile}', verifying checksum...");
|
Log.Info($"Package already exists on disk: '{completeFile}', verifying checksum...");
|
||||||
try {
|
try {
|
||||||
VerifyPackageChecksum(targetRelease);
|
VerifyPackageChecksum(targetRelease, completeFile);
|
||||||
Log.Info("Package checksum verified, skipping download.");
|
Log.Info("Package checksum verified, skipping download.");
|
||||||
return;
|
return;
|
||||||
} catch (ChecksumFailedException ex) {
|
} catch (ChecksumFailedException ex) {
|
||||||
@@ -260,7 +259,7 @@ namespace Velopack
|
|||||||
$"Only full update will be available.");
|
$"Only full update will be available.");
|
||||||
} else {
|
} else {
|
||||||
using var _1 = Utility.GetTempDirectory(out var deltaStagingDir, appTempDir);
|
using var _1 = Utility.GetTempDirectory(out var deltaStagingDir, appTempDir);
|
||||||
string basePackagePath = Path.Combine(appPackageDir, Utility.GetSafeFilename(updates.BaseRelease.FileName));
|
string basePackagePath = Locator.GetLocalPackagePath(updates.BaseRelease);
|
||||||
if (!File.Exists(basePackagePath))
|
if (!File.Exists(basePackagePath))
|
||||||
throw new Exception($"Unable to find base package {basePackagePath} for delta update.");
|
throw new Exception($"Unable to find base package {basePackagePath} for delta update.");
|
||||||
EasyZip.ExtractZipToDirectory(Log, basePackagePath, deltaStagingDir);
|
EasyZip.ExtractZipToDirectory(Log, basePackagePath, deltaStagingDir);
|
||||||
@@ -333,14 +332,13 @@ namespace Velopack
|
|||||||
var releasesToDownload = updates.DeltasToTarget.OrderBy(d => d.Version).ToArray();
|
var releasesToDownload = updates.DeltasToTarget.OrderBy(d => d.Version).ToArray();
|
||||||
|
|
||||||
var appTempDir = Locator.AppTempDir!;
|
var appTempDir = Locator.AppTempDir!;
|
||||||
var appPackageDir = Locator.PackagesDir!;
|
|
||||||
var updateExe = Locator.UpdateExePath!;
|
var updateExe = Locator.UpdateExePath!;
|
||||||
|
|
||||||
// downloading accounts for 0%-50% of progress
|
// downloading accounts for 0%-50% of progress
|
||||||
double current = 0;
|
double current = 0;
|
||||||
double toIncrement = 100.0 / releasesToDownload.Count();
|
double toIncrement = 100.0 / releasesToDownload.Count();
|
||||||
await releasesToDownload.ForEachAsync(async x => {
|
await releasesToDownload.ForEachAsync(async x => {
|
||||||
var targetFile = Path.Combine(appPackageDir, x.FileName);
|
var targetFile = Locator.GetLocalPackagePath(x);
|
||||||
double component = 0;
|
double component = 0;
|
||||||
Log.Debug($"Downloading delta version {x.Version}");
|
Log.Debug($"Downloading delta version {x.Version}");
|
||||||
await Source.DownloadReleaseEntry(Log, x, targetFile, p => {
|
await Source.DownloadReleaseEntry(Log, x, targetFile, p => {
|
||||||
@@ -351,7 +349,7 @@ namespace Velopack
|
|||||||
progress(Utility.CalculateProgress(progressOfStep, 0, 50));
|
progress(Utility.CalculateProgress(progressOfStep, 0, 50));
|
||||||
}
|
}
|
||||||
}, cancelToken).ConfigureAwait(false);
|
}, cancelToken).ConfigureAwait(false);
|
||||||
VerifyPackageChecksum(x);
|
VerifyPackageChecksum(x, targetFile);
|
||||||
cancelToken.ThrowIfCancellationRequested();
|
cancelToken.ThrowIfCancellationRequested();
|
||||||
Log.Debug($"Download complete for delta version {x.Version}");
|
Log.Debug($"Download complete for delta version {x.Version}");
|
||||||
}).ConfigureAwait(false);
|
}).ConfigureAwait(false);
|
||||||
@@ -365,7 +363,7 @@ namespace Velopack
|
|||||||
cancelToken.ThrowIfCancellationRequested();
|
cancelToken.ThrowIfCancellationRequested();
|
||||||
var rel = releasesToDownload[i];
|
var rel = releasesToDownload[i];
|
||||||
double baseProgress = i * progressStepSize;
|
double baseProgress = i * progressStepSize;
|
||||||
var packageFile = Path.Combine(appPackageDir, rel.FileName);
|
var packageFile = Locator.GetLocalPackagePath(rel);
|
||||||
builder.ApplyDeltaPackageFast(extractedBasePackage, packageFile, x => {
|
builder.ApplyDeltaPackageFast(extractedBasePackage, packageFile, x => {
|
||||||
var progressOfStep = (int) (baseProgress + (progressStepSize * (x / 100d)));
|
var progressOfStep = (int) (baseProgress + (progressStepSize * (x / 100d)));
|
||||||
progress(Utility.CalculateProgress(progressOfStep, 50, 100));
|
progress(Utility.CalculateProgress(progressOfStep, 50, 100));
|
||||||
@@ -418,9 +416,7 @@ namespace Velopack
|
|||||||
/// <param name="filePathOverride">Optional file path, if not specified the package will be loaded from %pkgdir%/release.OriginalFilename.</param>
|
/// <param name="filePathOverride">Optional file path, if not specified the package will be loaded from %pkgdir%/release.OriginalFilename.</param>
|
||||||
protected internal virtual void VerifyPackageChecksum(VelopackAsset release, string? filePathOverride = null)
|
protected internal virtual void VerifyPackageChecksum(VelopackAsset release, string? filePathOverride = null)
|
||||||
{
|
{
|
||||||
var targetPackage = filePathOverride == null
|
var targetPackage = new FileInfo(filePathOverride ?? Locator.GetLocalPackagePath(release));
|
||||||
? new FileInfo(Path.Combine(Locator.PackagesDir!, release.FileName))
|
|
||||||
: new FileInfo(filePathOverride);
|
|
||||||
|
|
||||||
if (!targetPackage.Exists) {
|
if (!targetPackage.Exists) {
|
||||||
throw new ChecksumFailedException(targetPackage.FullName, "File doesn't exist.");
|
throw new ChecksumFailedException(targetPackage.FullName, "File doesn't exist.");
|
||||||
|
|||||||
Reference in New Issue
Block a user