diff options
| author | rinsuki <428rinsuki+git@gmail.com> | 2019-11-01 05:43:54 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2019-11-01 05:43:54 +0900 |
| commit | 0c1d3e186b7b1b3d19ed6580decbbbab7e30ecd9 (patch) | |
| tree | 12125bcff1ad387f57973baf110f377ae624b23c /src | |
| parent | Update webpack.config.ts (#5567) (diff) | |
| download | sharkey-0c1d3e186b7b1b3d19ed6580decbbbab7e30ecd9.tar.gz sharkey-0c1d3e186b7b1b3d19ed6580decbbbab7e30ecd9.tar.bz2 sharkey-0c1d3e186b7b1b3d19ed6580decbbbab7e30ecd9.zip | |
新規投稿のMFMをHTMLに変換する際、リモートユーザーへのメンションのリンク先を(できれば)urlに (#5562)
* 新規投稿のMFMをHTMLに変換する際、リモートユーザーへのメンションのリンク先を(できれば)urlに
Fix #2467
Related #5560
* remove unnecessary import
* Update src/services/note/create.ts
Co-Authored-By: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
* Apply suggestions from code review
Co-Authored-By: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/mfm/toHtml.ts | 2 | ||||
| -rw-r--r-- | src/models/entities/note.ts | 1 | ||||
| -rw-r--r-- | src/services/note/create.ts | 20 |
3 files changed, 15 insertions, 8 deletions
diff --git a/src/mfm/toHtml.ts b/src/mfm/toHtml.ts index 8289288d3b..a44e70830c 100644 --- a/src/mfm/toHtml.ts +++ b/src/mfm/toHtml.ts @@ -135,7 +135,7 @@ export function toHtml(tokens: MfmForest | null, mentionedRemoteUsers: IMentione break; default: const remoteUserInfo = mentionedRemoteUsers.find(remoteUser => remoteUser.username === username && remoteUser.host === host); - a.href = remoteUserInfo ? remoteUserInfo.uri : `${config.url}/${acct}`; + a.href = remoteUserInfo ? (remoteUserInfo.url ? remoteUserInfo.url : remoteUserInfo.uri) : `${config.url}/${acct}`; a.className = 'u-url mention'; break; } diff --git a/src/models/entities/note.ts b/src/models/entities/note.ts index 33a6d2bc27..d67faae829 100644 --- a/src/models/entities/note.ts +++ b/src/models/entities/note.ts @@ -228,6 +228,7 @@ export class Note { export type IMentionedRemoteUsers = { uri: string; + url?: string; username: string; host: string; }[]; diff --git a/src/services/note/create.ts b/src/services/note/create.ts index 9d5c0a58d5..5d9492e6ab 100644 --- a/src/services/note/create.ts +++ b/src/services/note/create.ts @@ -16,11 +16,11 @@ import { registerOrFetchInstanceDoc } from '../register-or-fetch-instance-doc'; import extractMentions from '../../misc/extract-mentions'; import extractEmojis from '../../misc/extract-emojis'; import extractHashtags from '../../misc/extract-hashtags'; -import { Note } from '../../models/entities/note'; +import { Note, IMentionedRemoteUsers } from '../../models/entities/note'; import { Mutings, Users, NoteWatchings, Followings, Notes, Instances, UserProfiles } from '../../models'; import { DriveFile } from '../../models/entities/drive-file'; import { App } from '../../models/entities/app'; -import { Not, getConnection } from 'typeorm'; +import { Not, getConnection, In } from 'typeorm'; import { User, ILocalUser, IRemoteUser } from '../../models/entities/user'; import { genId } from '../../misc/gen-id'; import { notesChart, perUserNotesChart, activeUsersChart, instanceChart } from '../chart'; @@ -383,11 +383,17 @@ async function insertNote(user: User, data: Option, tags: string[], emojis: stri // Append mentions data if (mentionedUsers.length > 0) { insert.mentions = mentionedUsers.map(u => u.id); - insert.mentionedRemoteUsers = JSON.stringify(mentionedUsers.filter(u => Users.isRemoteUser(u)).map(u => ({ - uri: (u as IRemoteUser).uri, - username: u.username, - host: u.host - }))); + const profiles = await UserProfiles.find({ userId: In(insert.mentions) }); + insert.mentionedRemoteUsers = JSON.stringify(mentionedUsers.filter(u => Users.isRemoteUser(u)).map(u => { + const profile = profiles.find(p => p.userId == u.id); + const url = profile != null ? profile.url : null; + return { + uri: u.uri, + url: url == null ? undefined : url, + username: u.username, + host: u.host + } as IMentionedRemoteUsers[0]; + })); } // 投稿を作成 |