improve zura performance
This commit is contained in:
		| @@ -387,14 +387,14 @@ public sealed class CachedPlayer : DisposableMediatorSubscriberBase | |||||||
|  |  | ||||||
|         Task.Run(async () => |         Task.Run(async () => | ||||||
|         { |         { | ||||||
|             List<FileReplacementData> toDownloadReplacements; |  | ||||||
|  |  | ||||||
|             Dictionary<string, string> moddedPaths = new(StringComparer.Ordinal); |             Dictionary<string, string> moddedPaths = new(StringComparer.Ordinal); | ||||||
|  |  | ||||||
|             if (updateModdedPaths) |             if (updateModdedPaths) | ||||||
|             { |             { | ||||||
|                 int attempts = 0; |                 int attempts = 0; | ||||||
|                 while ((toDownloadReplacements = TryCalculateModdedDictionary(charaData, out moddedPaths)).Count > 0 && attempts++ <= 10) |                 List<FileReplacementData> toDownloadReplacements = TryCalculateModdedDictionary(charaData, out moddedPaths, downloadToken); | ||||||
|  |  | ||||||
|  |                 while ((toDownloadReplacements.Count > 0 && attempts++ <= 10 && !downloadToken.IsCancellationRequested)) | ||||||
|                 { |                 { | ||||||
|                     _downloadManager.CancelDownload(); |                     _downloadManager.CancelDownload(); | ||||||
|                     Logger.LogDebug("Downloading missing files for player {name}, {kind}", PlayerName, updatedData); |                     Logger.LogDebug("Downloading missing files for player {name}, {kind}", PlayerName, updatedData); | ||||||
| @@ -411,7 +411,9 @@ public sealed class CachedPlayer : DisposableMediatorSubscriberBase | |||||||
|                         return; |                         return; | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     if (TryCalculateModdedDictionary(charaData, out moddedPaths).All(c => _downloadManager.ForbiddenTransfers.Any(f => string.Equals(f.Hash, c.Hash, StringComparison.Ordinal)))) |                     toDownloadReplacements = TryCalculateModdedDictionary(charaData, out moddedPaths, downloadToken); | ||||||
|  |  | ||||||
|  |                     if (toDownloadReplacements.All(c => _downloadManager.ForbiddenTransfers.Any(f => string.Equals(f.Hash, c.Hash, StringComparison.Ordinal)))) | ||||||
|                     { |                     { | ||||||
|                         break; |                         break; | ||||||
|                     } |                     } | ||||||
| @@ -573,26 +575,28 @@ public sealed class CachedPlayer : DisposableMediatorSubscriberBase | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private List<FileReplacementData> TryCalculateModdedDictionary(CharacterData charaData, out Dictionary<string, string> moddedDictionary) |     private List<FileReplacementData> TryCalculateModdedDictionary(CharacterData charaData, out Dictionary<string, string> moddedDictionary, CancellationToken token) | ||||||
|     { |     { | ||||||
|         List<FileReplacementData> missingFiles = new(); |         List<FileReplacementData> missingFiles = new(); | ||||||
|         moddedDictionary = new Dictionary<string, string>(StringComparer.Ordinal); |         moddedDictionary = new Dictionary<string, string>(StringComparer.Ordinal); | ||||||
|         try |         try | ||||||
|         { |         { | ||||||
|             foreach (var item in charaData.FileReplacements.SelectMany(k => k.Value.Where(v => string.IsNullOrEmpty(v.FileSwapPath))).ToList()) |             var replacementList = charaData.FileReplacements.SelectMany(k => k.Value.Where(v => string.IsNullOrEmpty(v.FileSwapPath))).DistinctBy(p => p.Hash).ToList(); | ||||||
|  |             foreach (var item in replacementList) | ||||||
|             { |             { | ||||||
|                 foreach (var gamePath in item.GamePaths) |                 token.ThrowIfCancellationRequested(); | ||||||
|  |                 var fileCache = _fileDbManager.GetFileCacheByHash(item.Hash); | ||||||
|  |                 if (fileCache != null) | ||||||
|                 { |                 { | ||||||
|                     var fileCache = _fileDbManager.GetFileCacheByHash(item.Hash); |                     foreach (var gamePath in item.GamePaths) | ||||||
|                     if (fileCache != null) |  | ||||||
|                     { |                     { | ||||||
|                         moddedDictionary[gamePath] = fileCache.ResolvedFilepath; |                         moddedDictionary[gamePath] = fileCache.ResolvedFilepath; | ||||||
|                     } |                     } | ||||||
|                     else |                 } | ||||||
|                     { |                 else | ||||||
|                         Logger.LogTrace("Missing file: {hash}", item.Hash); |                 { | ||||||
|                         missingFiles.Add(item); |                     Logger.LogTrace("Missing file: {hash}", item.Hash); | ||||||
|                     } |                     missingFiles.Add(item); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 rootdarkarchon
					rootdarkarchon