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/services/note/create.ts | |
| 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/services/note/create.ts')
| -rw-r--r-- | src/services/note/create.ts | 20 |
1 files changed, 13 insertions, 7 deletions
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]; + })); } // 投稿を作成 |