mirror of
https://github.com/dergigi/boris.git
synced 2026-02-16 20:45:01 +01:00
1. Fix cache name mismatch: imageCacheService now uses 'boris-images' to match the Service Worker cache name 2. Remove cross-origin restriction: Cache ALL images, not just cross-origin ones. This ensures article images from any source are cached by the Service Worker 3. Update comments to clarify Service Worker caching behavior Images should now be properly cached when loaded via <img> tags.
75 lines
1.8 KiB
TypeScript
75 lines
1.8 KiB
TypeScript
/**
|
|
* Image Cache Service
|
|
*
|
|
* Utility functions for managing the Service Worker's image cache
|
|
* Service Worker automatically caches images on fetch
|
|
*/
|
|
|
|
// Must match the cache name in src/sw.ts
|
|
const CACHE_NAME = 'boris-images'
|
|
|
|
/**
|
|
* Clear all cached images
|
|
*/
|
|
export async function clearImageCache(): Promise<void> {
|
|
try {
|
|
await caches.delete(CACHE_NAME)
|
|
} catch (err) {
|
|
console.error('Failed to clear image cache:', err)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get cache statistics by inspecting Cache API directly
|
|
*/
|
|
export async function getImageCacheStatsAsync(): Promise<{
|
|
totalSizeMB: number
|
|
itemCount: number
|
|
items: Array<{ url: string, sizeMB: number }>
|
|
}> {
|
|
try {
|
|
const cache = await caches.open(CACHE_NAME)
|
|
const requests = await cache.keys()
|
|
|
|
let totalSize = 0
|
|
const items: Array<{ url: string, sizeMB: number }> = []
|
|
|
|
for (const request of requests) {
|
|
const response = await cache.match(request)
|
|
if (response) {
|
|
const blob = await response.blob()
|
|
const sizeMB = blob.size / (1024 * 1024)
|
|
totalSize += blob.size
|
|
items.push({ url: request.url, sizeMB })
|
|
}
|
|
}
|
|
|
|
return {
|
|
totalSizeMB: totalSize / (1024 * 1024),
|
|
itemCount: requests.length,
|
|
items
|
|
}
|
|
} catch (err) {
|
|
console.error('Failed to get cache stats:', err)
|
|
return { totalSizeMB: 0, itemCount: 0, items: [] }
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Synchronous wrapper for cache stats (returns approximate values)
|
|
* For real-time stats, use getImageCacheStatsAsync
|
|
*/
|
|
export function getImageCacheStats(): {
|
|
totalSizeMB: number
|
|
itemCount: number
|
|
items: Array<{ url: string, sizeMB: number, lastAccessed: Date }>
|
|
} {
|
|
// Return placeholder - actual stats require async Cache API access
|
|
// Component should use getImageCacheStatsAsync for real values
|
|
return {
|
|
totalSizeMB: 0,
|
|
itemCount: 0,
|
|
items: []
|
|
}
|
|
}
|