metadata garbage collection

This commit is contained in:
Jill 2024-02-17 14:22:50 +03:00
parent 5c5c1c2abe
commit 8c7a27d7c6
Signed by: oat
GPG Key ID: 33489AA58A955108
1 changed files with 20 additions and 1 deletions

View File

@ -20,6 +20,10 @@ let levels = {
metadata: [],
};
function getAllLevels() {
return [...levels.nlw.regular, ...levels.nlw.platformer, ...levels.nlw.pending, ...levels.ids.regular];
}
async function exists(f) {
try {
await fs.stat(f);
@ -89,6 +93,7 @@ const metadataFetchQueue = new PQueue({ concurrency: 10, interval: 500, interval
metadataFetchQueue.on('empty', async () => {
console.log('metadata fetch queue empty, idling');
await metadataSanityCheck();
await metadataGarbageCollect();
});
// hopefully will prevent cross-sheet duplicate fighting
@ -106,7 +111,7 @@ function getMetadata(level) {
}
async function loadupMetadataQueue() {
const list = [...levels.nlw.regular, ...levels.nlw.platformer, ...levels.nlw.pending, ...levels.ids.regular];
const list = getAllLevels();
const noMetadata = list.filter(l => getMetadata(l) === undefined);
if (noMetadata.length === 0) {
@ -160,6 +165,20 @@ async function metadataSanityCheck() {
}
}
async function metadataGarbageCollect() {
const metadata = [];
for (const level of getAllLevels()) {
const data = getMetadata(level);
if (data && metadata.findIndex(m => m.name === data.name && m.creator === data.creator) === -1) metadata.push(data);
}
if (metadata.length < levels.metadata.length) {
console.log(`garbage collecting metadata (${levels.metadata.length - metadata.length} levels)`);
levels.metadata = levels.metadata.filter(m => metadata.indexOf(m) !== -1);
await saveCache();
}
}
await loadCache();
//await loadupMetadataQueue();