Add cache validation func to startup

9c7d3d740028f76b8a93a2bfeb9daba08c2b1fc7

Cohee <18619528+Cohee1207@users.noreply.github.com>

2 files changed, +30 -0Showing whitespace changes
server.js+2 -0
@@ -66,6 +66,7 @@ import { init as statsInit, onExit as statsOnExit } from './src/endpoints/stats.
66import { checkForNewContent } from './src/endpoints/content-manager.js';66import { checkForNewContent } from './src/endpoints/content-manager.js';
67import { init as settingsInit } from './src/endpoints/settings.js';67import { init as settingsInit } from './src/endpoints/settings.js';
68import { redirectDeprecatedEndpoints, ServerStartup, setupPrivateEndpoints } from './src/server-startup.js';68import { redirectDeprecatedEndpoints, ServerStartup, setupPrivateEndpoints } from './src/server-startup.js';
69import { verifyCharactersDiskCache } from './src/endpoints/characters.js';
6970
70// Unrestrict console logs display limit71// Unrestrict console logs display limit
71util.inspect.defaultOptions.maxArrayLength = null;72util.inspect.defaultOptions.maxArrayLength = null;
@@ -268,6 +269,7 @@ async function preSetupTasks() {
268 const directories = await getUserDirectoriesList();269 const directories = await getUserDirectoriesList();
269 await checkForNewContent(directories);270 await checkForNewContent(directories);
270 await ensureThumbnailCache();271 await ensureThumbnailCache();
272 await verifyCharactersDiskCache(directories);
271 cleanUploads();273 cleanUploads();
272 migrateAccessLog();274 migrateAccessLog();
273275
src/endpoints/characters.js+28 -0
@@ -55,6 +55,34 @@ const diskCache = {
55};55};
5656
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 */
62export 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 * Reads the character card from the specified image file.86 * Reads the character card from the specified image file.
59 * @param {string} inputFile - Path to the image file87 * @param {string} inputFile - Path to the image file
60 * @param {string} inputFormat - 'png'88 * @param {string} inputFormat - 'png'