From 8e1e222b756df4f2efa4287b006aa90c9872539d Mon Sep 17 00:00:00 2001 From: Oleg Zhuk Date: Mon, 9 Sep 2024 11:01:39 +0200 Subject: [PATCH 1/2] VCST-1785: Error while Generating Thumbnail Due to Duplicate File Names with Encoded Characters fix: Error while Generating Thumbnail Due to Duplicate File Names with Encoded Characters. --- .../BlobImagesChangesProvider.cs | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/VirtoCommerce.ImageToolsModule.Data/ThumbnailGeneration/BlobImagesChangesProvider.cs b/src/VirtoCommerce.ImageToolsModule.Data/ThumbnailGeneration/BlobImagesChangesProvider.cs index 32c9ec3..065943e 100644 --- a/src/VirtoCommerce.ImageToolsModule.Data/ThumbnailGeneration/BlobImagesChangesProvider.cs +++ b/src/VirtoCommerce.ImageToolsModule.Data/ThumbnailGeneration/BlobImagesChangesProvider.cs @@ -93,18 +93,38 @@ protected virtual async Task> ReadBlobFo var searchResults = await _storageProvider.SearchAsync(folderPath, null); - result.AddRange(searchResults.Results.Where(item => _supportedImageExtensions.Contains(Path.GetExtension(item.Name).ToLowerInvariant())).Select(x => KeyValuePair.Create(x.Url, x))); + // Add files that are images, has supported extension into the result + foreach (var blobInfo in searchResults.Results + .Where(item => IsSupportedImage(item)) + .Select(x => KeyValuePair.Create(x.Url, x))) + { + result.TryAdd(blobInfo.Key, blobInfo.Value); + } - await Parallel.ForEachAsync(searchResults.Results.Where(x => x.Type == "folder"), async (blobFolder, token) => + // Enumerate all folders and read them recursively + await Parallel.ForEachAsync(searchResults.Results.Where(x => IsFolder(x)), async (blobFolder, token) => { - var folderResult = await ReadBlobFolderAsync(blobFolder.RelativeUrl, new CancellationTokenWrapper(token)); + var folderItems = await ReadBlobFolderAsync(blobFolder.RelativeUrl, new CancellationTokenWrapper(token)); - result.AddRange(folderResult); + foreach (var folderItem in folderItems) + { + result.TryAdd(folderItem.Key, folderItem.Value); + } }); return result; } + protected virtual bool IsFolder(BlobEntry x) + { + return string.Equals(x.Type, "folder", StringComparison.OrdinalIgnoreCase); + } + + protected virtual bool IsSupportedImage(BlobEntry item) + { + return _supportedImageExtensions.Contains(Path.GetExtension(item.Name), StringComparer.OrdinalIgnoreCase); + } + protected virtual async Task GetItemStateAsync( BlobEntry blobInfo, DateTime? changedSince, From 539b5d8796ff5fc3f1c3c435864eb46e2d22a290 Mon Sep 17 00:00:00 2001 From: artem-dudarev Date: Mon, 9 Sep 2024 11:55:40 +0200 Subject: [PATCH 2/2] Refactoring --- .../BlobImagesChangesProvider.cs | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/VirtoCommerce.ImageToolsModule.Data/ThumbnailGeneration/BlobImagesChangesProvider.cs b/src/VirtoCommerce.ImageToolsModule.Data/ThumbnailGeneration/BlobImagesChangesProvider.cs index 065943e..07898a8 100644 --- a/src/VirtoCommerce.ImageToolsModule.Data/ThumbnailGeneration/BlobImagesChangesProvider.cs +++ b/src/VirtoCommerce.ImageToolsModule.Data/ThumbnailGeneration/BlobImagesChangesProvider.cs @@ -93,36 +93,34 @@ protected virtual async Task> ReadBlobFo var searchResults = await _storageProvider.SearchAsync(folderPath, null); - // Add files that are images, has supported extension into the result - foreach (var blobInfo in searchResults.Results - .Where(item => IsSupportedImage(item)) - .Select(x => KeyValuePair.Create(x.Url, x))) + // Add supported images + foreach (var imageBlob in searchResults.Results.Where(IsSupportedImage)) { - result.TryAdd(blobInfo.Key, blobInfo.Value); + result.TryAdd(imageBlob.Url, imageBlob); } - // Enumerate all folders and read them recursively - await Parallel.ForEachAsync(searchResults.Results.Where(x => IsFolder(x)), async (blobFolder, token) => + // Add images from child folders recursively + await Parallel.ForEachAsync(searchResults.Results.Where(IsFolder), async (folderBlob, token) => { - var folderItems = await ReadBlobFolderAsync(blobFolder.RelativeUrl, new CancellationTokenWrapper(token)); + var childFolderImages = await ReadBlobFolderAsync(folderBlob.RelativeUrl, new CancellationTokenWrapper(token)); - foreach (var folderItem in folderItems) + foreach (var imageBlob in childFolderImages.Values) { - result.TryAdd(folderItem.Key, folderItem.Value); + result.TryAdd(imageBlob.Url, imageBlob); } }); return result; } - protected virtual bool IsFolder(BlobEntry x) + protected virtual bool IsSupportedImage(BlobEntry blobEntry) { - return string.Equals(x.Type, "folder", StringComparison.OrdinalIgnoreCase); + return _supportedImageExtensions.Contains(Path.GetExtension(blobEntry.Name), StringComparer.OrdinalIgnoreCase); } - protected virtual bool IsSupportedImage(BlobEntry item) + protected virtual bool IsFolder(BlobEntry blobEntry) { - return _supportedImageExtensions.Contains(Path.GetExtension(item.Name), StringComparer.OrdinalIgnoreCase); + return blobEntry.Type.EqualsIgnoreCase("folder"); } protected virtual async Task GetItemStateAsync(