You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.2 KiB
87 lines
2.2 KiB
import { unifiedProfileCache } from "./npubCache"; |
|
import { searchCache } from "./searchCache"; |
|
import { indexEventCache } from "./indexEventCache"; |
|
import { clearRelaySetCache } from "../ndk"; |
|
|
|
/** |
|
* Clears all application caches |
|
* |
|
* Clears: |
|
* - unifiedProfileCache (profile metadata) |
|
* - searchCache (search results) |
|
* - indexEventCache (index events) |
|
* - relaySetCache (relay configuration) |
|
*/ |
|
export function clearAllCaches(): void { |
|
console.log("[CacheManager] Clearing all application caches..."); |
|
|
|
// Clear in-memory caches |
|
unifiedProfileCache.clear(); |
|
searchCache.clear(); |
|
indexEventCache.clear(); |
|
clearRelaySetCache(); |
|
|
|
// Clear localStorage caches |
|
clearLocalStorageCaches(); |
|
|
|
console.log("[CacheManager] All caches cleared successfully"); |
|
} |
|
|
|
/** |
|
* Clears profile-specific caches to force fresh profile data |
|
* This is useful when profile pictures or metadata are stale |
|
*/ |
|
export function clearProfileCaches(): void { |
|
console.log("[CacheManager] Clearing profile-specific caches..."); |
|
|
|
// Clear unified profile cache |
|
unifiedProfileCache.clear(); |
|
|
|
// Clear profile-related search results |
|
// Note: searchCache doesn't have a way to clear specific types, so we clear all |
|
// This is acceptable since profile searches are the most common |
|
searchCache.clear(); |
|
|
|
console.log("[CacheManager] Profile caches cleared successfully"); |
|
} |
|
|
|
/** |
|
* Clears localStorage caches |
|
*/ |
|
function clearLocalStorageCaches(): void { |
|
if (typeof window === "undefined") return; |
|
|
|
const keysToRemove: string[] = []; |
|
|
|
// Find all localStorage keys that start with 'alexandria' |
|
for (let i = 0; i < localStorage.length; i++) { |
|
const key = localStorage.key(i); |
|
if (key && key.startsWith("alexandria")) { |
|
keysToRemove.push(key); |
|
} |
|
} |
|
|
|
// Remove the keys |
|
keysToRemove.forEach((key) => { |
|
localStorage.removeItem(key); |
|
}); |
|
|
|
console.log( |
|
`[CacheManager] Cleared ${keysToRemove.length} localStorage items`, |
|
); |
|
} |
|
|
|
/** |
|
* Gets statistics about all caches |
|
*/ |
|
export function getCacheStats(): { |
|
profileCacheSize: number; |
|
searchCacheSize: number; |
|
indexEventCacheSize: number; |
|
} { |
|
return { |
|
profileCacheSize: unifiedProfileCache.size(), |
|
searchCacheSize: searchCache.size(), |
|
indexEventCacheSize: indexEventCache.size(), |
|
}; |
|
}
|
|
|