summaryrefslogtreecommitdiff
path: root/src/services/drive/add-file.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-05-03 20:03:14 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-05-03 20:03:14 +0900
commit15e4cf1243001873edd1860ee61bc96d003214ee (patch)
tree697c9880c8d131b06382957e92672d654d883528 /src/services/drive/add-file.ts
parentoops (diff)
downloadmisskey-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.ts49
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;
};
/**