using Harmonia.Core.Imaging; using Harmonia.Core.Models; namespace Harmonia.Core.Caching; public class AudioImageMemoryCache(IAudioImageExtractor audioImageExtractor) : MemoryCache, IAudioImageCache { protected override long? SizeLimit => 2000000000; protected override double 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 SongPictureInfo? Fetch(Song key) { return audioImageExtractor.ExtractImage(key.FileName); } protected override void AddToCache(object key, SongPictureInfo entry) { base.AddToCache(key, entry); } protected override long GetEntrySize(SongPictureInfo entry) { return entry.Size; } }