Merge abel stuff
This commit is contained in:
@@ -93,12 +93,12 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
CurrentOwnerToken = null;
|
||||
}
|
||||
|
||||
public async Task DownloadFiles(GameObjectHandler? gameObject, List<FileReplacementData> fileReplacementDto, CancellationToken ct, bool skipDownscale = false)
|
||||
public async Task DownloadFiles(GameObjectHandler? gameObject, List<FileReplacementData> fileReplacementDto, CancellationToken ct, bool skipDownscale = false, bool skipDecimation = false)
|
||||
{
|
||||
Mediator.Publish(new HaltScanMessage(nameof(DownloadFiles)));
|
||||
try
|
||||
{
|
||||
await DownloadFilesInternal(gameObject, fileReplacementDto, ct, skipDownscale).ConfigureAwait(false);
|
||||
await DownloadFilesInternal(gameObject, fileReplacementDto, ct, skipDownscale, skipDecimation).ConfigureAwait(false);
|
||||
}
|
||||
catch
|
||||
{
|
||||
@@ -458,7 +458,8 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
IReadOnlyDictionary<string, long> rawSizeLookup,
|
||||
string downloadLabel,
|
||||
CancellationToken ct,
|
||||
bool skipDownscale)
|
||||
bool skipDownscale,
|
||||
bool skipDecimation)
|
||||
{
|
||||
SetStatus(downloadStatusKey, DownloadStatus.Decompressing);
|
||||
MarkTransferredFiles(downloadStatusKey, 1);
|
||||
@@ -617,7 +618,7 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
yield return items.GetRange(i, Math.Min(chunkSize, items.Count - i));
|
||||
}
|
||||
|
||||
private async Task DownloadFilesInternal(GameObjectHandler? gameObjectHandler, List<FileReplacementData> fileReplacement, CancellationToken ct, bool skipDownscale)
|
||||
private async Task DownloadFilesInternal(GameObjectHandler? gameObjectHandler, List<FileReplacementData> fileReplacement, CancellationToken ct, bool skipDownscale, bool skipDecimation)
|
||||
{
|
||||
var objectName = gameObjectHandler?.Name ?? "Unknown";
|
||||
|
||||
@@ -729,13 +730,13 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
Task batchTask = batchChunks.Length == 0
|
||||
? Task.CompletedTask
|
||||
: Parallel.ForEachAsync(batchChunks, new ParallelOptions { MaxDegreeOfParallelism = workerDop, CancellationToken = ct },
|
||||
async (chunk, token) => await ProcessBatchChunkAsync(chunk, replacementLookup, rawSizeLookup, token, skipDownscale).ConfigureAwait(false));
|
||||
async (chunk, token) => await ProcessBatchChunkAsync(chunk, replacementLookup, rawSizeLookup, token, skipDownscale, skipDecimation).ConfigureAwait(false));
|
||||
|
||||
// direct downloads
|
||||
Task directTask = directDownloads.Count == 0
|
||||
? Task.CompletedTask
|
||||
: Parallel.ForEachAsync(directDownloads, new ParallelOptions { MaxDegreeOfParallelism = workerDop, CancellationToken = ct },
|
||||
async (d, token) => await ProcessDirectAsync(d, replacementLookup, rawSizeLookup, token, skipDownscale).ConfigureAwait(false));
|
||||
async (d, token) => await ProcessDirectAsync(d, replacementLookup, rawSizeLookup, token, skipDownscale, skipDecimation).ConfigureAwait(false));
|
||||
|
||||
await Task.WhenAll(batchTask, directTask).ConfigureAwait(false);
|
||||
|
||||
@@ -751,7 +752,8 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
Dictionary<string, (string Extension, string GamePath)> replacementLookup,
|
||||
IReadOnlyDictionary<string, long> rawSizeLookup,
|
||||
CancellationToken ct,
|
||||
bool skipDownscale)
|
||||
bool skipDownscale,
|
||||
bool skipDecimation)
|
||||
{
|
||||
var statusKey = chunk.StatusKey;
|
||||
|
||||
@@ -784,7 +786,7 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
return;
|
||||
}
|
||||
|
||||
await DecompressBlockFileAsync(statusKey, blockFile, replacementLookup, rawSizeLookup, fi.Name, ct, skipDownscale).ConfigureAwait(false);
|
||||
await DecompressBlockFileAsync(statusKey, blockFile, replacementLookup, rawSizeLookup, fi.Name, ct, skipDownscale, skipDecimation).ConfigureAwait(false);
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
@@ -806,7 +808,8 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
Dictionary<string, (string Extension, string GamePath)> replacementLookup,
|
||||
IReadOnlyDictionary<string, long> rawSizeLookup,
|
||||
CancellationToken ct,
|
||||
bool skipDownscale)
|
||||
bool skipDownscale,
|
||||
bool skipDecimation)
|
||||
{
|
||||
var progress = CreateInlineProgress(bytes =>
|
||||
{
|
||||
@@ -816,7 +819,7 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
|
||||
if (!ShouldUseDirectDownloads() || string.IsNullOrEmpty(directDownload.DirectDownloadUrl))
|
||||
{
|
||||
await ProcessDirectAsQueuedFallbackAsync(directDownload, replacementLookup, rawSizeLookup, progress, ct, skipDownscale).ConfigureAwait(false);
|
||||
await ProcessDirectAsQueuedFallbackAsync(directDownload, replacementLookup, rawSizeLookup, progress, ct, skipDownscale, skipDecimation).ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -864,7 +867,7 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
}
|
||||
|
||||
await _fileCompactor.WriteAllBytesAsync(finalFilename, decompressedBytes, ct).ConfigureAwait(false);
|
||||
PersistFileToStorage(directDownload.Hash, finalFilename, repl.GamePath, skipDownscale);
|
||||
PersistFileToStorage(directDownload.Hash, finalFilename, repl.GamePath, skipDownscale, skipDecimation);
|
||||
|
||||
MarkTransferredFiles(directDownload.DirectDownloadUrl!, 1);
|
||||
SetStatus(directDownload.DirectDownloadUrl!, DownloadStatus.Completed);
|
||||
@@ -891,7 +894,7 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
|
||||
try
|
||||
{
|
||||
await ProcessDirectAsQueuedFallbackAsync(directDownload, replacementLookup, rawSizeLookup, progress, ct, skipDownscale).ConfigureAwait(false);
|
||||
await ProcessDirectAsQueuedFallbackAsync(directDownload, replacementLookup, rawSizeLookup, progress, ct, skipDownscale, skipDecimation).ConfigureAwait(false);
|
||||
|
||||
if (!expectedDirectDownloadFailure && failureCount >= 3 && !_disableDirectDownloads)
|
||||
{
|
||||
@@ -921,7 +924,8 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
IReadOnlyDictionary<string, long> rawSizeLookup,
|
||||
IProgress<long> progress,
|
||||
CancellationToken ct,
|
||||
bool skipDownscale)
|
||||
bool skipDownscale,
|
||||
bool skipDecimation)
|
||||
{
|
||||
if (string.IsNullOrEmpty(directDownload.DirectDownloadUrl))
|
||||
throw new InvalidOperationException("Direct download fallback requested without a direct download URL.");
|
||||
@@ -946,7 +950,7 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
if (!File.Exists(blockFile))
|
||||
throw new FileNotFoundException("Block file missing after direct download fallback.", blockFile);
|
||||
|
||||
await DecompressBlockFileAsync(statusKey, blockFile, replacementLookup, rawSizeLookup, $"fallback-{directDownload.Hash}", ct, skipDownscale)
|
||||
await DecompressBlockFileAsync(statusKey, blockFile, replacementLookup, rawSizeLookup, $"fallback-{directDownload.Hash}", ct, skipDownscale, skipDecimation)
|
||||
.ConfigureAwait(false);
|
||||
}
|
||||
finally
|
||||
@@ -973,7 +977,7 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
return await response.Content.ReadFromJsonAsync<List<DownloadFileDto>>(cancellationToken: ct).ConfigureAwait(false) ?? [];
|
||||
}
|
||||
|
||||
private void PersistFileToStorage(string fileHash, string filePath, string gamePath, bool skipDownscale)
|
||||
private void PersistFileToStorage(string fileHash, string filePath, string gamePath, bool skipDownscale, bool skipDecimation)
|
||||
{
|
||||
var fi = new FileInfo(filePath);
|
||||
|
||||
@@ -1005,7 +1009,7 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
() => _textureMetadataHelper.DetermineMapKind(gamePath, filePath));
|
||||
}
|
||||
|
||||
if (!skipDownscale && _modelDecimationService.ShouldScheduleDecimation(fileHash, filePath, gamePath))
|
||||
if (!skipDecimation && _modelDecimationService.ShouldScheduleDecimation(fileHash, filePath, gamePath))
|
||||
{
|
||||
_modelDecimationService.ScheduleDecimation(fileHash, filePath, gamePath);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user