From 20e77196f28178c869402985761bd4c2fa74bf0a Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sun, 22 Apr 2018 10:44:17 +0900
Subject: [PATCH] =?UTF-8?q?AP:=20=E6=8A=95=E7=A5=A8=E3=82=92=E3=83=AC?=
 =?UTF-8?q?=E3=83=B3=E3=83=80=E3=83=AA=E3=83=B3=E3=82=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../desktop/views/components/notes.note.vue    |  2 +-
 src/client/docs/api/entities/note.yaml         |  6 ------
 src/client/docs/api/entities/post.yaml         |  6 ------
 src/models/messaging-message.ts                |  1 -
 src/models/note.ts                             |  1 -
 src/remote/activitypub/kernel/delete/note.ts   |  1 -
 src/remote/activitypub/misc/get-note-html.ts   | 18 ++++++++++++++++++
 src/remote/activitypub/renderer/note.ts        |  3 ++-
 .../api/endpoints/messaging/messages/create.ts |  3 ---
 src/services/note/create.ts                    |  2 --
 10 files changed, 21 insertions(+), 22 deletions(-)
 create mode 100644 src/remote/activitypub/misc/get-note-html.ts

diff --git a/src/client/app/desktop/views/components/notes.note.vue b/src/client/app/desktop/views/components/notes.note.vue
index 1352fc4ee..ae2793db9 100644
--- a/src/client/app/desktop/views/components/notes.note.vue
+++ b/src/client/app/desktop/views/components/notes.note.vue
@@ -36,7 +36,7 @@
 				</p>
 				<div class="text">
 					<a class="reply" v-if="p.reply">%fa:reply%</a>
-					<mk-note-html v-if="p.textHtml" :text="p.text" :i="os.i" :class="$style.text"/>
+					<mk-note-html v-if="p.text" :text="p.text" :i="os.i" :class="$style.text"/>
 					<a class="rp" v-if="p.renote">RP:</a>
 				</div>
 				<div class="media" v-if="p.media.length > 0">
diff --git a/src/client/docs/api/entities/note.yaml b/src/client/docs/api/entities/note.yaml
index 718d331d1..6fd26543b 100644
--- a/src/client/docs/api/entities/note.yaml
+++ b/src/client/docs/api/entities/note.yaml
@@ -29,12 +29,6 @@ props:
     desc:
       ja: "投稿の本文 (ローカルの場合Markdown風のフォーマット)"
       en: "The text of this note (in Markdown like format if local)"
-  - name: "textHtml"
-    type: "string"
-    optional: true
-    desc:
-      ja: "投稿の本文 (HTML) (投稿時は無視)"
-      en: "The text of this note (in HTML. Ignored when posting.)"
   - name: "mediaIds"
     type: "id(DriveFile)[]"
     optional: true
diff --git a/src/client/docs/api/entities/post.yaml b/src/client/docs/api/entities/post.yaml
index 718d331d1..6fd26543b 100644
--- a/src/client/docs/api/entities/post.yaml
+++ b/src/client/docs/api/entities/post.yaml
@@ -29,12 +29,6 @@ props:
     desc:
       ja: "投稿の本文 (ローカルの場合Markdown風のフォーマット)"
       en: "The text of this note (in Markdown like format if local)"
-  - name: "textHtml"
-    type: "string"
-    optional: true
-    desc:
-      ja: "投稿の本文 (HTML) (投稿時は無視)"
-      en: "The text of this note (in HTML. Ignored when posting.)"
   - name: "mediaIds"
     type: "id(DriveFile)[]"
     optional: true
diff --git a/src/models/messaging-message.ts b/src/models/messaging-message.ts
index 9d62fab4f..a6a50fc8c 100644
--- a/src/models/messaging-message.ts
+++ b/src/models/messaging-message.ts
@@ -12,7 +12,6 @@ export interface IMessagingMessage {
 	_id: mongo.ObjectID;
 	createdAt: Date;
 	text: string;
-	textHtml: string;
 	userId: mongo.ObjectID;
 	recipientId: mongo.ObjectID;
 	isRead: boolean;
diff --git a/src/models/note.ts b/src/models/note.ts
index d4b16afa4..02801b62d 100644
--- a/src/models/note.ts
+++ b/src/models/note.ts
@@ -38,7 +38,6 @@ export type INote = {
 	poll: any; // todo
 	text: string;
 	tags: string[];
-	textHtml: string;
 	cw: string;
 	userId: mongo.ObjectID;
 	appId: mongo.ObjectID;
diff --git a/src/remote/activitypub/kernel/delete/note.ts b/src/remote/activitypub/kernel/delete/note.ts
index 64c342d39..b2868f69a 100644
--- a/src/remote/activitypub/kernel/delete/note.ts
+++ b/src/remote/activitypub/kernel/delete/note.ts
@@ -22,7 +22,6 @@ export default async function(actor: IRemoteUser, uri: string): Promise<void> {
 		$set: {
 			deletedAt: new Date(),
 			text: null,
-			textHtml: null,
 			mediaIds: [],
 			poll: null
 		}
diff --git a/src/remote/activitypub/misc/get-note-html.ts b/src/remote/activitypub/misc/get-note-html.ts
new file mode 100644
index 000000000..a63059a38
--- /dev/null
+++ b/src/remote/activitypub/misc/get-note-html.ts
@@ -0,0 +1,18 @@
+import { INote } from "../../../models/note";
+import toHtml from '../../../text/html';
+import parse from '../../../text/parse';
+import config from '../../../config';
+
+export default function(note: INote) {
+	if (note.text == null) return null;
+
+	let html = toHtml(parse(note.text));
+
+	if (note.poll != null) {
+		const url = `${config.url}/notes/${note._id}`;
+		// TODO: i18n
+		html += `<p>【投票】<br />${url}</p>`;
+	}
+
+	return html;
+}
diff --git a/src/remote/activitypub/renderer/note.ts b/src/remote/activitypub/renderer/note.ts
index c364b1324..a05c12b38 100644
--- a/src/remote/activitypub/renderer/note.ts
+++ b/src/remote/activitypub/renderer/note.ts
@@ -4,6 +4,7 @@ import config from '../../../config';
 import DriveFile from '../../../models/drive-file';
 import Note, { INote } from '../../../models/note';
 import User from '../../../models/user';
+import toHtml from '../misc/get-note-html';
 
 export default async function renderNote(note: INote, dive = true) {
 	const promisedFiles = note.mediaIds
@@ -48,7 +49,7 @@ export default async function renderNote(note: INote, dive = true) {
 		id: `${config.url}/notes/${note._id}`,
 		type: 'Note',
 		attributedTo,
-		content: note.textHtml,
+		content: toHtml(note),
 		published: note.createdAt.toISOString(),
 		to: 'https://www.w3.org/ns/activitystreams#Public',
 		cc: `${attributedTo}/followers`,
diff --git a/src/server/api/endpoints/messaging/messages/create.ts b/src/server/api/endpoints/messaging/messages/create.ts
index 085e75e6c..0483b602b 100644
--- a/src/server/api/endpoints/messaging/messages/create.ts
+++ b/src/server/api/endpoints/messaging/messages/create.ts
@@ -12,8 +12,6 @@ import { pack } from '../../../../../models/messaging-message';
 import publishUserStream from '../../../../../publishers/stream';
 import { publishMessagingStream, publishMessagingIndexStream } from '../../../../../publishers/stream';
 import pushSw from '../../../../../publishers/push-sw';
-import html from '../../../../../text/html';
-import parse from '../../../../../text/parse';
 import config from '../../../../../config';
 
 /**
@@ -77,7 +75,6 @@ module.exports = (params, user) => new Promise(async (res, rej) => {
 		fileId: file ? file._id : undefined,
 		recipientId: recipient._id,
 		text: text ? text : undefined,
-		textHtml: text ? html(parse(text)) : undefined,
 		userId: user._id,
 		isRead: false
 	});
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index ca01b557d..2380e64ce 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -15,7 +15,6 @@ import Mute from '../../models/mute';
 import pushSw from '../../publishers/push-sw';
 import event from '../../publishers/stream';
 import parse from '../../text/parse';
-import html from '../../text/html';
 import { IApp } from '../../models/app';
 
 export default async (user: IUser, data: {
@@ -63,7 +62,6 @@ export default async (user: IUser, data: {
 		replyId: data.reply ? data.reply._id : null,
 		renoteId: data.renote ? data.renote._id : null,
 		text: data.text,
-		textHtml: tokens === null ? null : html(tokens),
 		poll: data.poll,
 		cw: data.cw,
 		tags,