diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Caching/ImageCache.cs b/src/Snap.Hutao/Snap.Hutao/Core/Caching/ImageCache.cs index 5fcf38ef..960dd0fd 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Caching/ImageCache.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Caching/ImageCache.cs @@ -3,6 +3,8 @@ using Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient; using Snap.Hutao.Core.IO; +using Snap.Hutao.Core.IO.Hashing; +using Snap.Hutao.Core.Logging; using System.Collections.Concurrent; using System.Collections.Frozen; using System.IO; @@ -104,12 +106,12 @@ internal sealed partial class ImageCache : IImageCache, IImageCacheFilePathOpera { if (concurrentTasks.TryAdd(fileName, taskCompletionSource.Task)) { - logger.LogDebug("Begin downloading image file from '{Uri}' to '{File}'", uri, filePath); + logger.LogColorizedInformation("Begin to download file from '{Uri}' to '{File}'", (uri, ConsoleColor.Cyan), (filePath, ConsoleColor.Cyan)); await DownloadFileAsync(uri, filePath).ConfigureAwait(false); } else if (concurrentTasks.TryGetValue(fileName, out Task? task)) { - logger.LogDebug("Waiting for a queued image download task to complete for '{Uri}'", uri); + logger.LogDebug("Waiting for a queued image download task to complete for '{Uri}'", (uri, ConsoleColor.Cyan)); await task.ConfigureAwait(false); } @@ -132,10 +134,7 @@ internal sealed partial class ImageCache : IImageCache, IImageCacheFilePathOpera private static string GetCacheFileName(Uri uri) { - string url = uri.ToString(); - byte[] chars = Encoding.UTF8.GetBytes(url); - byte[] hash = SHA1.HashData(chars); - return System.Convert.ToHexString(hash); + return Hash.SHA1HexString(uri.ToString()); } private static bool IsFileInvalid(string file, bool treatNullFileAsInvalid = true) diff --git a/src/Snap.Hutao/Snap.Hutao/Core/IO/Hashing/Hash.cs b/src/Snap.Hutao/Snap.Hutao/Core/IO/Hashing/Hash.cs new file mode 100644 index 00000000..49d67a36 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Core/IO/Hashing/Hash.cs @@ -0,0 +1,20 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using System.Security.Cryptography; +using System.Text; + +namespace Snap.Hutao.Core.IO.Hashing; + +internal static class Hash +{ + public static string SHA1HexString(string input) + { + return HashCore(BitConverter.ToString, SHA1.HashData, Encoding.UTF8.GetBytes, input); + } + + private static TResult HashCore(Func resultConverter, Func hashMethod, Func bytesConverter, TInput input) + { + return resultConverter(hashMethod(bytesConverter(input))); + } +}