Spaces:
Sleeping
Sleeping
| class ThumbnailCache { | |
| private cache: { [timestamp: number | string]: HTMLImageElement } = {}; | |
| private maxCacheSize: number = 500; // Set a limit to the number of thumbnails | |
| private accessOrder: (number | string)[] = []; // Track access order | |
| public setThumbnail(timestamp: number | string, img: HTMLImageElement) { | |
| if (this.accessOrder.length >= this.maxCacheSize) { | |
| // Remove the least recently used thumbnail | |
| const oldestTimestamp = this.accessOrder.shift(); | |
| if (oldestTimestamp !== undefined) { | |
| delete this.cache[oldestTimestamp]; | |
| } | |
| } | |
| this.cache[timestamp] = img; | |
| this.accessOrder.push(timestamp); // Add to the end to indicate recent use | |
| } | |
| public getThumbnail( | |
| timestamp: number | string | |
| ): HTMLImageElement | undefined { | |
| const img = this.cache[timestamp]; | |
| if (img) { | |
| // Update access order when thumbnail is accessed | |
| this.accessOrder = this.accessOrder.filter((t) => t !== timestamp); | |
| this.accessOrder.push(timestamp); // Move to the end (most recently used) | |
| } | |
| return img; | |
| } | |
| public clearCache() { | |
| this.cache = {}; | |
| this.accessOrder = []; | |
| } | |
| public clearCacheButFallback() { | |
| const fallback = this.getThumbnail("fallback"); | |
| this.cache = {}; | |
| this.accessOrder = []; | |
| this.setThumbnail("fallback", fallback!); | |
| } | |
| } | |
| export default ThumbnailCache; | |