From 388733b4d06cae9a74c0dc6e2ff95fd47407fd12 Mon Sep 17 00:00:00 2001 From: undefined Date: Sat, 15 May 2021 20:11:41 +0800 Subject: [PATCH] core: auto-clean unused files --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/model/storage.ts | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 661a178cf..b05f02ca6 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.26.1", + "version": "2.26.2", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/model/storage.ts b/packages/hydrooj/src/model/storage.ts index 9e31d626f..3e4064bf4 100644 --- a/packages/hydrooj/src/model/storage.ts +++ b/packages/hydrooj/src/model/storage.ts @@ -19,7 +19,7 @@ export class StorageModel { const { metaData, size, etag } = await storage.getMeta(current._id); await StorageModel.coll.updateOne({ path }, { $set: { - meta: metaData, size, etag, lastModified: new Date(), + meta: metaData, size, etag, lastModified: new Date(), autoDelete: null, }, }); return path; @@ -76,7 +76,20 @@ export class StorageModel { } } -bus.on('app/started', () => StorageModel.coll.createIndex({ path: 1 }, { unique: true })); +async function clean() { + let res = await StorageModel.coll.findOneAndDelete({ autoDelete: { $lte: new Date() } }); + while (res.value) { + // eslint-disable-next-line no-await-in-loop + // await storage.del(res.value._id); + // eslint-disable-next-line no-await-in-loop + res = await StorageModel.coll.findOneAndDelete({ autoDelete: { $lte: new Date() } }); + } + setTimeout(clean, 10000); +} +bus.on('app/started', () => { + clean(); + return StorageModel.coll.createIndex({ path: 1 }, { unique: true }); +}); global.Hydro.model.storage = StorageModel; export default StorageModel;