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/services/drive/add-file.ts | |
| parent | oops (diff) | |
| download | misskey-15e4cf1243001873edd1860ee61bc96d003214ee.tar.gz misskey-15e4cf1243001873edd1860ee61bc96d003214ee.tar.bz2 misskey-15e4cf1243001873edd1860ee61bc96d003214ee.zip | |
サムネイルを予め生成するように
Diffstat (limited to 'src/services/drive/add-file.ts')
| -rw-r--r-- | src/services/drive/add-file.ts | 49 |
1 files changed, 45 insertions, 4 deletions
diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts index 279cdf0bc7..e7f3572c74 100644 --- a/src/services/drive/add-file.ts +++ b/src/services/drive/add-file.ts @@ -10,12 +10,14 @@ import * as debug from 'debug'; import fileType = require('file-type'); import prominence = require('prominence'); -import DriveFile, { IMetadata, getGridFSBucket, IDriveFile, DriveFileChunk } from '../../models/drive-file'; +import DriveFile, { IMetadata, getDriveFileBucket, 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, isLocalUser } from '../../models/user'; +import DriveFileThumbnail, { getDriveFileThumbnailBucket, DriveFileThumbnailChunk } from '../../models/drive-file-thumbnail'; +import genThumbnail from '../../drive/gen-thumbnail'; const gm = _gm.subClass({ imageMagick: true @@ -30,8 +32,8 @@ const tmpFile = (): Promise<[string, any]> => new Promise((resolve, reject) => { }); }); -const addToGridFS = (name: string, readable: stream.Readable, type: string, metadata: any): Promise<any> => - getGridFSBucket() +const writeChunks = (name: string, readable: stream.Readable, type: string, metadata: any) => + getDriveFileBucket() .then(bucket => new Promise((resolve, reject) => { const writeStream = bucket.openUploadStream(name, { contentType: type, metadata }); writeStream.once('finish', resolve); @@ -39,6 +41,20 @@ const addToGridFS = (name: string, readable: stream.Readable, type: string, meta readable.pipe(writeStream); })); +const writeThumbnailChunks = (name: string, readable: stream.Readable, originalId) => + getDriveFileThumbnailBucket() + .then(bucket => new Promise((resolve, reject) => { + const writeStream = bucket.openUploadStream(name, { + contentType: 'image/jpeg', + metadata: { + originalId + } + }); + writeStream.once('finish', resolve); + writeStream.on('error', reject); + readable.pipe(writeStream); + })); + const addFile = async ( user: IUser, path: string, @@ -232,6 +248,20 @@ const addFile = async ( 'metadata.deletedAt': new Date() } }); + + //#region サムネイルもあれば削除 + const thumbnail = await DriveFileThumbnail.findOne({ + 'metadata.originalId': oldFile._id + }); + + if (thumbnail) { + DriveFileThumbnailChunk.remove({ + files_id: thumbnail._id + }); + + DriveFileThumbnail.remove({ _id: thumbnail._id }); + } + //#endregion } //#endregion } @@ -263,7 +293,18 @@ const addFile = async ( metadata.uri = uri; } - return addToGridFS(detectedName, readable, mime, metadata); + const file = await (writeChunks(detectedName, readable, mime, metadata) as Promise<IDriveFile>); + + try { + const thumb = await genThumbnail(file); + if (thumb) { + await writeThumbnailChunks(detectedName, thumb, file._id); + } + } catch (e) { + // noop + } + + return file; }; /** |