This commit is contained in:
parent
e69554f810
commit
0f67a544bd
2 changed files with 33 additions and 6 deletions
|
@ -8,11 +8,11 @@ import MessagingMessage, { deleteMessagingMessage } from './messaging-message';
|
|||
import User from './user';
|
||||
|
||||
const DriveFile = monkDb.get<IDriveFile>('driveFiles.files');
|
||||
|
||||
DriveFile.createIndex('metadata.uri', { sparse: true, unique: true });
|
||||
|
||||
export default DriveFile;
|
||||
|
||||
export const DriveFileChunk = monkDb.get('driveFiles.chunks');
|
||||
|
||||
const getGridFSBucket = async (): Promise<mongo.GridFSBucket> => {
|
||||
const db = await nativeDbConn();
|
||||
const bucket = new mongo.GridFSBucket(db, {
|
||||
|
@ -93,7 +93,7 @@ export async function deleteDriveFile(driveFile: string | mongo.ObjectID | IDriv
|
|||
}
|
||||
|
||||
// このDriveFileのチャンクをすべて削除
|
||||
await monkDb.get('driveFiles.chunks').remove({
|
||||
await DriveFileChunk.remove({
|
||||
files_id: d._id
|
||||
});
|
||||
|
||||
|
|
|
@ -10,12 +10,12 @@ import * as debug from 'debug';
|
|||
import fileType = require('file-type');
|
||||
import prominence = require('prominence');
|
||||
|
||||
import DriveFile, { IMetadata, getGridFSBucket, IDriveFile } from '../../models/drive-file';
|
||||
import DriveFile, { IMetadata, getGridFSBucket, IDriveFile, DriveFileChunk } from '../../models/drive-file';
|
||||
import DriveFolder from '../../models/drive-folder';
|
||||
import { pack } from '../../models/drive-file';
|
||||
import event, { publishDriveStream } from '../../publishers/stream';
|
||||
import getAcct from '../../acct/render';
|
||||
import { IUser } from '../../models/user';
|
||||
import { IUser, isLocalUser } from '../../models/user';
|
||||
|
||||
const gm = _gm.subClass({
|
||||
imageMagick: true
|
||||
|
@ -207,7 +207,34 @@ const addFile = async (
|
|||
|
||||
// If usage limit exceeded
|
||||
if (usage + size > user.driveCapacity) {
|
||||
if (isLocalUser(user)) {
|
||||
throw 'no-free-space';
|
||||
} else {
|
||||
//#region (アバターまたはバナーを含まず)最も古いファイルを削除する
|
||||
const oldFile = await DriveFile.findOne({
|
||||
_id: {
|
||||
$nin: [user.avatarId, user.bannerId]
|
||||
}
|
||||
}, {
|
||||
sort: {
|
||||
_id: 1
|
||||
}
|
||||
});
|
||||
|
||||
if (oldFile) {
|
||||
// チャンクをすべて削除
|
||||
DriveFileChunk.remove({
|
||||
files_id: oldFile._id
|
||||
});
|
||||
|
||||
DriveFile.update({ _id: oldFile._id }, {
|
||||
$set: {
|
||||
'metadata.deletedAt': new Date()
|
||||
}
|
||||
});
|
||||
}
|
||||
//#endregion
|
||||
}
|
||||
}
|
||||
})()
|
||||
]);
|
||||
|
|
Loading…
Reference in a new issue