Emoji support in profile (#3514)

* Emoji in profile

* Add emojis to fields
This commit is contained in:
MeiMei
2018-12-06 10:02:04 +09:00
committed by syuilo
parent fe891da886
commit 4522568749
41 changed files with 261 additions and 70 deletions

View File

@@ -164,7 +164,7 @@ export async function resolveNote(value: string | IObject, resolver?: Resolver):
return await createNote(uri, resolver);
}
async function extractEmojis(tags: ITag[], host_: string) {
export async function extractEmojis(tags: ITag[], host_: string) {
const host = toUnicode(host_.toLowerCase());
if (!tags) return [];

View File

@@ -12,10 +12,11 @@ import Meta from '../../../models/meta';
import htmlToMFM from '../../../mfm/html-to-mfm';
import usersChart from '../../../chart/users';
import { URL } from 'url';
import { resolveNote } from './note';
import { resolveNote, extractEmojis } from './note';
import registerInstance from '../../../services/register-instance';
import Instance from '../../../models/instance';
import getDriveFileUrl from '../../../misc/get-drive-file-url';
import { IEmoji } from '../../../models/emoji';
const log = debug('misskey:activitypub');
@@ -234,6 +235,21 @@ export async function createPerson(uri: string, resolver?: Resolver): Promise<IU
user.bannerColor = bannerColor;
//#endregion
//#region カスタム絵文字取得
const emojis = await extractEmojis(person.tag, host).catch(e => {
console.log(`extractEmojis: ${e}`);
return [] as IEmoji[];
});
const emojiNames = emojis.map(emoji => emoji.name);
await User.update({ _id: user._id }, {
$set: {
emojis: emojiNames
}
});
//#endregion
await updateFeatured(user._id).catch(err => console.log(err));
return user;
@@ -301,6 +317,14 @@ export async function updatePerson(uri: string, resolver?: Resolver, hint?: obje
: resolveImage(exist, img).catch(() => null)
)));
// カスタム絵文字取得
const emojis = await extractEmojis(person.tag, exist.host).catch(e => {
console.log(`extractEmojis: ${e}`);
return [] as IEmoji[];
});
const emojiNames = emojis.map(emoji => emoji.name);
// Update user
await User.update({ _id: exist._id }, {
$set: {
@@ -314,6 +338,7 @@ export async function updatePerson(uri: string, resolver?: Resolver, hint?: obje
bannerUrl: getDriveFileUrl(banner, false),
avatarColor: avatar && avatar.metadata.properties.avgColor ? avatar.metadata.properties.avgColor : null,
bannerColor: banner && banner.metadata.properties.avgColor ? banner.metadata.properties.avgColor : null,
emojis: emojiNames,
description: htmlToMFM(person.summary),
followersCount,
followingCount,

View File

@@ -137,7 +137,7 @@ export default async function renderNote(note: INote, dive = true): Promise<any>
};
}
async function getEmojis(names: string[]): Promise<IEmoji[]> {
export async function getEmojis(names: string[]): Promise<IEmoji[]> {
if (names == null || names.length < 1) return [];
const emojis = await Promise.all(

View File

@@ -5,6 +5,8 @@ import { ILocalUser } from '../../../models/user';
import toHtml from '../../../mfm/html';
import parse from '../../../mfm/parse';
import DriveFile from '../../../models/drive-file';
import { getEmojis } from './note';
import renderEmoji from './emoji';
export default async (user: ILocalUser) => {
const id = `${config.url}/users/${user._id}`;
@@ -36,6 +38,13 @@ export default async (user: ILocalUser) => {
value: `<a href="https://discordapp.com/users/${user.discord.id}" rel="me nofollow noopener" target="_blank"><span>@${user.discord.username}#${user.discord.discriminator}</span></a>`
});
const emojis = await getEmojis(user.emojis);
const apemojis = emojis.map(emoji => renderEmoji(emoji));
const tag = [
...apemojis,
];
return {
type: user.isBot ? 'Service' : 'Person',
id,
@@ -51,6 +60,7 @@ export default async (user: ILocalUser) => {
summary: toHtml(parse(user.description)),
icon: user.avatarId && renderImage(avatar),
image: user.bannerId && renderImage(banner),
tag,
manuallyApprovesFollowers: user.isLocked,
publicKey: renderKey(user),
isCat: user.isCat,