From abfbb068d7c48cdd2b26f35da7233d8ae789998a Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 4 May 2018 13:24:08 +0900 Subject: [PATCH] :v: --- cli/clean-drive.js | 86 ++++++++++++++++++++++++++++------------------ package.json | 2 ++ 2 files changed, 54 insertions(+), 34 deletions(-) diff --git a/cli/clean-drive.js b/cli/clean-drive.js index f0c23b3b29..14eb002795 100644 --- a/cli/clean-drive.js +++ b/cli/clean-drive.js @@ -1,3 +1,5 @@ +const chalk = require('chalk'); +const log = require('single-line-log').stdout; const sequential = require('promise-sequential'); const { default: DriveFile, deleteDriveFile } = require('../built/models/drive-file'); const { default: Note } = require('../built/models/note'); @@ -12,45 +14,61 @@ async function main() { let prev; for (let i = 0; i < count; i++) { - promiseGens.push(() => new Promise(async (res, rej) => { - const file = await DriveFile.findOne(prev ? { - _id: { $gt: prev._id } - } : {}, { - sort: { - _id: 1 - } + promiseGens.push(() => { + const promise = new Promise(async (res, rej) => { + const file = await DriveFile.findOne(prev ? { + _id: { $gt: prev._id } + } : {}, { + sort: { + _id: 1 + } + }); + + prev = file; + + if (file == null) return res(); + + log(chalk`scanning: {bold ${file._id}} ...`); + + const attachingUsersCount = await User.count({ + $or: [{ + avatarId: file._id + }, { + bannerId: file._id + }] + }, { limit: 1 }); + if (attachingUsersCount !== 0) return res(); + + const attachingNotesCount = await Note.count({ + mediaIds: file._id + }, { limit: 1 }); + if (attachingNotesCount !== 0) return res(); + + const attachingMessagesCount = await MessagingMessage.count({ + fileId: file._id + }, { limit: 1 }); + if (attachingMessagesCount !== 0) return res(); + + deleteDriveFile(file).then(res).catch(rej); }); - prev = file; + promise.then(x => { + if (prev) { + if (x == null) { + log(chalk`{green skipped: {bold ${prev._id}}}`); + } else { + log(chalk`{red deleted: {bold ${prev._id}}}`); + } + } + log.clear(); + console.log(); + }); - console.log(`scanning ${file._id}`); - - const attachingUsersCount = await User.count({ - $or: [{ - avatarId: file._id - }, { - bannerId: file._id - }] - }, { limit: 1 }); - if (attachingUsersCount !== 0) return res(); - - const attachingNotesCount = await Note.count({ - mediaIds: file._id - }, { limit: 1 }); - if (attachingNotesCount !== 0) return res(); - - const attachingMessagesCount = await MessagingMessage.count({ - fileId: file._id - }, { limit: 1 }); - if (attachingMessagesCount !== 0) return res(); - - console.log(`deleting ${file._id}`); - - deleteDriveFile(file).then(res).catch(rej); - })); + return promise; + }); } return await sequential(promiseGens); } -main().then(console.dir).catch(console.error); +main().then().catch(console.error); diff --git a/package.json b/package.json index 0688c19016..1d6cf4b9e8 100644 --- a/package.json +++ b/package.json @@ -76,6 +76,7 @@ "@types/request-promise-native": "1.0.14", "@types/rimraf": "2.0.2", "@types/seedrandom": "2.4.27", + "@types/single-line-log": "^1.1.0", "@types/speakeasy": "2.0.2", "@types/tmp": "0.0.33", "@types/uuid": "3.4.3", @@ -180,6 +181,7 @@ "s-age": "1.1.2", "sass-loader": "7.0.1", "seedrandom": "2.4.3", + "single-line-log": "^1.1.2", "speakeasy": "2.0.0", "style-loader": "0.21.0", "stylus": "0.54.5",