diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-05-03 20:03:14 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-05-03 20:03:14 +0900 |
| commit | 15e4cf1243001873edd1860ee61bc96d003214ee (patch) | |
| tree | 697c9880c8d131b06382957e92672d654d883528 /src/models | |
| parent | oops (diff) | |
| download | misskey-15e4cf1243001873edd1860ee61bc96d003214ee.tar.gz misskey-15e4cf1243001873edd1860ee61bc96d003214ee.tar.bz2 misskey-15e4cf1243001873edd1860ee61bc96d003214ee.zip | |
サムネイルを予め生成するように
Diffstat (limited to 'src/models')
| -rw-r--r-- | src/models/drive-file-thumbnail.ts | 61 | ||||
| -rw-r--r-- | src/models/drive-file.ts | 10 |
2 files changed, 68 insertions, 3 deletions
diff --git a/src/models/drive-file-thumbnail.ts b/src/models/drive-file-thumbnail.ts new file mode 100644 index 0000000000..46de24379f --- /dev/null +++ b/src/models/drive-file-thumbnail.ts @@ -0,0 +1,61 @@ +import * as mongo from 'mongodb'; +import monkDb, { nativeDbConn } from '../db/mongodb'; + +const DriveFileThumbnail = monkDb.get<IDriveFileThumbnail>('driveFileThumbnails.files'); +DriveFileThumbnail.createIndex('metadata.originalId', { sparse: true, unique: true }); +export default DriveFileThumbnail; + +export const DriveFileThumbnailChunk = monkDb.get('driveFileThumbnails.chunks'); + +export const getDriveFileThumbnailBucket = async (): Promise<mongo.GridFSBucket> => { + const db = await nativeDbConn(); + const bucket = new mongo.GridFSBucket(db, { + bucketName: 'driveFileThumbnails' + }); + return bucket; +}; + +export type IMetadata = { + originalId: mongo.ObjectID; +}; + +export type IDriveFileThumbnail = { + _id: mongo.ObjectID; + uploadDate: Date; + md5: string; + filename: string; + contentType: string; + metadata: IMetadata; +}; + +/** + * DriveFileThumbnailを物理削除します + */ +export async function deleteDriveFileThumbnail(driveFile: string | mongo.ObjectID | IDriveFileThumbnail) { + let d: IDriveFileThumbnail; + + // Populate + if (mongo.ObjectID.prototype.isPrototypeOf(driveFile)) { + d = await DriveFileThumbnail.findOne({ + _id: driveFile + }); + } else if (typeof driveFile === 'string') { + d = await DriveFileThumbnail.findOne({ + _id: new mongo.ObjectID(driveFile) + }); + } else { + d = driveFile as IDriveFileThumbnail; + } + + if (d == null) return; + + // このDriveFileThumbnailのチャンクをすべて削除 + await DriveFileThumbnailChunk.remove({ + files_id: d._id + }); + + // このDriveFileThumbnailを削除 + await DriveFileThumbnail.remove({ + _id: d._id + }); +} diff --git a/src/models/drive-file.ts b/src/models/drive-file.ts index a8878d1197..2a7e95363a 100644 --- a/src/models/drive-file.ts +++ b/src/models/drive-file.ts @@ -6,6 +6,7 @@ import monkDb, { nativeDbConn } from '../db/mongodb'; import Note, { deleteNote } from './note'; import MessagingMessage, { deleteMessagingMessage } from './messaging-message'; import User from './user'; +import DriveFileThumbnail, { deleteDriveFileThumbnail } from './drive-file-thumbnail'; const DriveFile = monkDb.get<IDriveFile>('driveFiles.files'); DriveFile.createIndex('metadata.uri', { sparse: true, unique: true }); @@ -13,7 +14,7 @@ export default DriveFile; export const DriveFileChunk = monkDb.get('driveFiles.chunks'); -const getGridFSBucket = async (): Promise<mongo.GridFSBucket> => { +export const getDriveFileBucket = async (): Promise<mongo.GridFSBucket> => { const db = await nativeDbConn(); const bucket = new mongo.GridFSBucket(db, { bucketName: 'driveFiles' @@ -21,8 +22,6 @@ const getGridFSBucket = async (): Promise<mongo.GridFSBucket> => { return bucket; }; -export { getGridFSBucket }; - export type IMetadata = { properties: any; userId: mongo.ObjectID; @@ -93,6 +92,11 @@ export async function deleteDriveFile(driveFile: string | mongo.ObjectID | IDriv } } + // このDriveFileのDriveFileThumbnailをすべて削除 + await Promise.all(( + await DriveFileThumbnail.find({ 'metadata.originalId': d._id }) + ).map(x => deleteDriveFileThumbnail(x))); + // このDriveFileのチャンクをすべて削除 await DriveFileChunk.remove({ files_id: d._id |