Add cache validation func to startup
| @@ -66,6 +66,7 @@ import { init as statsInit, onExit as statsOnExit } from './src/endpoints/stats. | ||
| 66 | 66 | import { checkForNewContent } from './src/endpoints/content-manager.js'; |
| 67 | 67 | import { init as settingsInit } from './src/endpoints/settings.js'; |
| 68 | 68 | import { redirectDeprecatedEndpoints, ServerStartup, setupPrivateEndpoints } from './src/server-startup.js'; |
| 69 | +import { verifyCharactersDiskCache } from './src/endpoints/characters.js'; | |
| 69 | 70 | |
| 70 | 71 | // Unrestrict console logs display limit |
| 71 | 72 | util.inspect.defaultOptions.maxArrayLength = null; |
| @@ -268,6 +269,7 @@ async function preSetupTasks() { | ||
| 268 | 269 | const directories = await getUserDirectoriesList(); |
| 269 | 270 | await checkForNewContent(directories); |
| 270 | 271 | await ensureThumbnailCache(); |
| 272 | + await verifyCharactersDiskCache(directories); | |
| 271 | 273 | cleanUploads(); |
| 272 | 274 | migrateAccessLog(); |
| 273 | 275 | |
| @@ -55,6 +55,34 @@ const diskCache = { | ||
| 55 | 55 | }; |
| 56 | 56 | |
| 57 | 57 | /** |
| 58 | + * Verifies disk cache size and prunes it if necessary. | |
| 59 | + * @param {import('../users.js').UserDirectoryList[]} directoriesList List of user directories | |
| 60 | + * @returns {Promise<void>} | |
| 61 | + */ | |
| 62 | +export async function verifyCharactersDiskCache(directoriesList) { | |
| 63 | + if (!useDiskCache) { | |
| 64 | + return; | |
| 65 | + } | |
| 66 | + | |
| 67 | + const cache = await diskCache.instance(); | |
| 68 | + const validKeys = []; | |
| 69 | + for (const dir of directoriesList) { | |
| 70 | + const files = fs.readdirSync(dir.characters); | |
| 71 | + for (const file of files) { | |
| 72 | + const filePath = path.join(dir.characters, file); | |
| 73 | + const stat = fs.statSync(filePath); | |
| 74 | + validKeys.push(`${filePath}-${stat.mtimeMs}`); | |
| 75 | + } | |
| 76 | + } | |
| 77 | + const cacheKeys = await cache.keys(); | |
| 78 | + for (const key of cacheKeys) { | |
| 79 | + if (!validKeys.includes(key)) { | |
| 80 | + await cache.removeItem(key); | |
| 81 | + } | |
| 82 | + } | |
| 83 | +} | |
| 84 | + | |
| 85 | +/** | |
| 58 | 86 | * Reads the character card from the specified image file. |
| 59 | 87 | * @param {string} inputFile - Path to the image file |
| 60 | 88 | * @param {string} inputFormat - 'png' |