Files
harmonia/Harmonia.Core/Caching/AudioImageMemoryCache.cs

44 lines
1.2 KiB
C#

using Harmonia.Core.Imaging;
using Harmonia.Core.Models;
using Microsoft.Extensions.Caching.Memory;
namespace Harmonia.Core.Caching;
public class AudioImageMemoryCache(IAudioImageExtractor audioImageExtractor) : MemoryCache<Song, SongPictureInfo>, IAudioImageCache
{
protected override int MaxConcurrentRequests => 8;
protected override MemoryCacheOptions Options => new()
{
SizeLimit = 2000000000,
CompactionPercentage = 0.2,
};
protected override TimeSpan SlidingExpiration => TimeSpan.FromSeconds(600);
protected override object? GetKey(Song key)
{
if (string.IsNullOrWhiteSpace(key.ImageHash) == false)
{
return key.ImageHash;
}
else if (string.IsNullOrWhiteSpace(key.ImageName) == false)
{
return key.ImageName;
}
return null;
}
protected override ValueTask<SongPictureInfo?> FetchAsync(Song key, CancellationToken cancellationToken)
{
SongPictureInfo? songPictureInfo = audioImageExtractor.ExtractImage(key.FileName);
return ValueTask.FromResult(songPictureInfo);
}
protected override long GetEntrySize(SongPictureInfo entry)
{
return entry.Size;
}
}