From adc3c16ef3bd53a4f1bb84ab7ca0fcc64384fe8f Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Tue, 24 Jul 2018 05:04:43 +0900
Subject: [PATCH] wip

---
 cli/clean-cached-remote-files.js        |  4 ++--
 src/models/drive-file.ts                |  7 ++++---
 src/remote/activitypub/models/person.ts |  8 ++++----
 src/server/file/send-drive-file.ts      |  2 +-
 src/services/drive/add-file.ts          | 16 +++++++++++-----
 5 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/cli/clean-cached-remote-files.js b/cli/clean-cached-remote-files.js
index a9c38a4cdf..5b388c73b4 100644
--- a/cli/clean-cached-remote-files.js
+++ b/cli/clean-cached-remote-files.js
@@ -9,7 +9,7 @@ const q = {
 	'metadata._user.host': {
 		$ne: null
 	},
-	'metadata.isMetaOnly': false
+	'metadata.withoutChunks': false
 };
 
 async function main() {
@@ -57,7 +57,7 @@ async function main() {
 
 					DriveFile.update({ _id: file._id }, {
 						$set: {
-							'metadata.isMetaOnly': true
+							'metadata.withoutChunks': true
 						}
 					})
 				]).then(async () => {
diff --git a/src/models/drive-file.ts b/src/models/drive-file.ts
index 3a0390f792..0b7212665d 100644
--- a/src/models/drive-file.ts
+++ b/src/models/drive-file.ts
@@ -31,8 +31,9 @@ export type IMetadata = {
 	comment: string;
 	uri?: string;
 	url?: string;
+	src?: string;
 	deletedAt?: Date;
-	isMetaOnly?: boolean;
+	withoutChunks?: boolean;
 	isSensitive?: boolean;
 };
 
@@ -155,9 +156,9 @@ export const pack = (
 
 	_target = Object.assign(_target, _file.metadata);
 
+	_target.url = _file.metadata.url ? _file.metadata.url : `${config.drive_url}/${_target.id}/${encodeURIComponent(_target.name)}`;
 	_target.src = _file.metadata.url;
-	_target.url = _file.metadata.isMetaOnly ? _file.metadata.url : `${config.drive_url}/${_target.id}/${encodeURIComponent(_target.name)}`;
-	_target.isRemote = _file.metadata.isMetaOnly;
+	_target.isRemote = _file.metadata.withoutChunks;
 
 	if (_target.properties == null) _target.properties = {};
 
diff --git a/src/remote/activitypub/models/person.ts b/src/remote/activitypub/models/person.ts
index eee4aa1bfa..4ff8d23be7 100644
--- a/src/remote/activitypub/models/person.ts
+++ b/src/remote/activitypub/models/person.ts
@@ -152,8 +152,8 @@ export async function createPerson(value: any, resolver?: Resolver): Promise<IUs
 
 	const avatarId = avatar ? avatar._id : null;
 	const bannerId = banner ? banner._id : null;
-	const avatarUrl = avatar && avatar.metadata.isMetaOnly ? avatar.metadata.url : null;
-	const bannerUrl = banner && banner.metadata.isMetaOnly ? banner.metadata.url : null;
+	const avatarUrl = avatar && avatar.metadata.url ? avatar.metadata.url : null;
+	const bannerUrl = banner && banner.metadata.url ? banner.metadata.url : null;
 
 	await User.update({ _id: user._id }, {
 		$set: {
@@ -243,8 +243,8 @@ export async function updatePerson(value: string | IObject, resolver?: Resolver)
 			sharedInbox: person.sharedInbox,
 			avatarId: avatar ? avatar._id : null,
 			bannerId: banner ? banner._id : null,
-			avatarUrl: avatar && avatar.metadata.isMetaOnly ? avatar.metadata.url : null,
-			bannerUrl: banner && banner.metadata.isMetaOnly ? banner.metadata.url : null,
+			avatarUrl: avatar && avatar.metadata.url ? avatar.metadata.url : null,
+			bannerUrl: banner && banner.metadata.url ? banner.metadata.url : null,
 			description: htmlToMFM(person.summary),
 			followersCount,
 			followingCount,
diff --git a/src/server/file/send-drive-file.ts b/src/server/file/send-drive-file.ts
index e04400317f..1a76b0e41f 100644
--- a/src/server/file/send-drive-file.ts
+++ b/src/server/file/send-drive-file.ts
@@ -37,7 +37,7 @@ export default async function(ctx: Koa.Context) {
 		return;
 	}
 
-	if (file.metadata.isMetaOnly) {
+	if (file.metadata.withoutChunks) {
 		ctx.status = 204;
 		return;
 	}
diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts
index a1b9686956..4f379a25be 100644
--- a/src/services/drive/add-file.ts
+++ b/src/services/drive/add-file.ts
@@ -35,6 +35,8 @@ async function save(readable: stream.Readable, name: string, type: string, hash:
 			await minio.putObject(config.drive.bucket, obj, readable);
 
 			Object.assign(metadata, {
+				storage: 'object-storage',
+				withoutChunks: true,
 				obj: id,
 				url: `${ config.drive.config.secure ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? ':' + config.drive.config.port : '' }/${ config.drive.bucket }/${ obj }`
 			});
@@ -97,7 +99,7 @@ export default async function(
 	comment: string = null,
 	folderId: mongodb.ObjectID = null,
 	force: boolean = false,
-	metaOnly: boolean = false,
+	isLink: boolean = false,
 	url: string = null,
 	uri: string = null,
 	sensitive = false
@@ -165,7 +167,7 @@ export default async function(
 	}
 
 	//#region Check drive usage
-	if (!metaOnly) {
+	if (!isLink) {
 		const usage = await DriveFile
 			.aggregate([{
 				$match: {
@@ -277,19 +279,23 @@ export default async function(
 		folderId: folder !== null ? folder._id : null,
 		comment: comment,
 		properties: properties,
-		isMetaOnly: metaOnly,
+		withoutChunks: isLink,
 		isSensitive: sensitive
 	} as IMetadata;
 
 	if (url !== null) {
-		metadata.url = url;
+		metadata.src = url;
+
+		if (isLink) {
+			metadata.url = url;
+		}
 	}
 
 	if (uri !== null) {
 		metadata.uri = uri;
 	}
 
-	const driveFile = metaOnly
+	const driveFile = isLink
 		? await DriveFile.insert({
 			length: 0,
 			uploadDate: new Date(),