summaryrefslogtreecommitdiff
path: root/src/remote/activitypub/renderer/note.ts
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2018-11-02 08:59:40 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2018-11-02 08:59:40 +0900
commit80b5fda292efd70cc749910e3672d50c9a70a72e (patch)
treea8f287c9c60a532112801d084fcb7d5b8c4e3650 /src/remote/activitypub/renderer/note.ts
parentFix bug (diff)
downloadmisskey-80b5fda292efd70cc749910e3672d50c9a70a72e.tar.gz
misskey-80b5fda292efd70cc749910e3672d50c9a70a72e.tar.bz2
misskey-80b5fda292efd70cc749910e3672d50c9a70a72e.zip
Remote custom emojis (#3074)
* Remote custom emojis * んほおおおおお
Diffstat (limited to 'src/remote/activitypub/renderer/note.ts')
-rw-r--r--src/remote/activitypub/renderer/note.ts37
1 files changed, 32 insertions, 5 deletions
diff --git a/src/remote/activitypub/renderer/note.ts b/src/remote/activitypub/renderer/note.ts
index b3ce1c03e4..a2c591de2e 100644
--- a/src/remote/activitypub/renderer/note.ts
+++ b/src/remote/activitypub/renderer/note.ts
@@ -1,12 +1,16 @@
import renderDocument from './document';
import renderHashtag from './hashtag';
import renderMention from './mention';
+import renderEmoji from './emoji';
import config from '../../../config';
import DriveFile, { IDriveFile } from '../../../models/drive-file';
import Note, { INote } from '../../../models/note';
import User from '../../../models/user';
import toHtml from '../misc/get-note-html';
import parseMfm from '../../../mfm/parse';
+import getEmojiNames from '../misc/get-emoji-names';
+import Emoji, { IEmoji } from '../../../models/emoji';
+import { unique } from '../../../prelude/array';
export default async function renderNote(note: INote, dive = true): Promise<any> {
const promisedFiles: Promise<IDriveFile[]> = note.fileIds
@@ -75,10 +79,6 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
const hashtagTags = (note.tags || []).map(tag => renderHashtag(tag));
const mentionTags = mentionedUsers.map(u => renderMention(u));
- const tag = [
- ...hashtagTags,
- ...mentionTags,
- ];
const files = await promisedFiles;
@@ -108,12 +108,24 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
}).join('');
}
+ const content = toHtml(Object.assign({}, note, { text }));
+
+ const emojiNames = unique(getEmojiNames(content));
+ const emojis = await getEmojis(emojiNames);
+ const apemojis = emojis.map(emoji => renderEmoji(emoji));
+
+ const tag = [
+ ...hashtagTags,
+ ...mentionTags,
+ ...apemojis,
+ ];
+
return {
id: `${config.url}/notes/${note._id}`,
type: 'Note',
attributedTo,
summary: note.cw,
- content: toHtml(Object.assign({}, note, { text })),
+ content,
_misskey_content: text,
published: note.createdAt.toISOString(),
to,
@@ -124,3 +136,18 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
tag
};
}
+
+async function getEmojis(names: string[]): Promise<IEmoji[]> {
+ if (names == null || names.length < 1) return [];
+
+ const emojis = await Promise.all(
+ names.map(async name => {
+ return await Emoji.findOne({
+ name,
+ host: null
+ });
+ })
+ );
+
+ return emojis.filter(emoji => emoji != null);
+}