*  Fix #4632

* Fix #4795
This commit is contained in:
MeiMei 2019-04-25 04:07:39 +09:00 committed by syuilo
parent 878cd18144
commit ee5720df2c
3 changed files with 31 additions and 3 deletions

View file

@ -247,7 +247,7 @@ export async function resolveNote(value: string | IObject, resolver?: Resolver):
// リモートサーバーからフェッチしてきて登録 // リモートサーバーからフェッチしてきて登録
// ここでuriの代わりに添付されてきたNote Objectが指定されていると、サーバーフェッチを経ずにートが生成されるが // ここでuriの代わりに添付されてきたNote Objectが指定されていると、サーバーフェッチを経ずにートが生成されるが
// 添付されてきたNote Objectは偽装されている可能性があるため、常にuriを指定してサーバーフェッチを行う。 // 添付されてきたNote Objectは偽装されている可能性があるため、常にuriを指定してサーバーフェッチを行う。
return await createNote(uri, resolver).catch(e => { return await createNote(uri, resolver, true).catch(e => {
if (e.name === 'duplicated') { if (e.name === 'duplicated') {
return fetchNote(uri).then(note => { return fetchNote(uri).then(note => {
if (note == null) { if (note == null) {

View file

@ -101,6 +101,32 @@ async function fetchAny(uri: string) {
// /@user のような正規id以外で取得できるURIが指定されていた場合、ここで初めて正規URIが確定する // /@user のような正規id以外で取得できるURIが指定されていた場合、ここで初めて正規URIが確定する
// これはDBに存在する可能性があるため再度DB検索 // これはDBに存在する可能性があるため再度DB検索
if (uri !== object.id) { if (uri !== object.id) {
if (object.id.startsWith(config.url + '/')) {
const parts = object.id.split('/');
const id = parts.pop();
const type = parts.pop();
if (type === 'notes') {
const note = await Notes.findOne(id);
if (note) {
return {
type: 'Note',
object: await Notes.pack(note, null, { detail: true })
};
}
} else if (type === 'users') {
const user = await Users.findOne(id);
if (user) {
return {
type: 'User',
object: await Users.pack(user, null, { detail: true })
};
}
}
}
const [user, note] = await Promise.all([ const [user, note] = await Promise.all([
Users.findOne({ uri: object.id }), Users.findOne({ uri: object.id }),
Notes.findOne({ uri: object.id }) Notes.findOne({ uri: object.id })
@ -120,7 +146,7 @@ async function fetchAny(uri: string) {
} }
if (['Note', 'Question', 'Article'].includes(object.type)) { if (['Note', 'Question', 'Article'].includes(object.type)) {
const note = await createNote(object.id); const note = await createNote(object.id, undefined, true);
return { return {
type: 'Note', type: 'Note',
object: await Notes.pack(note!, null, { detail: true }) object: await Notes.pack(note!, null, { detail: true })

View file

@ -240,7 +240,9 @@ export default async (user: User, data: Option, silent = false) => new Promise<N
(noteObj as any).isFirstNote = true; (noteObj as any).isFirstNote = true;
} }
if (!silent) {
publishNotesStream(noteObj); publishNotesStream(noteObj);
}
const nm = new NotificationManager(user, note); const nm = new NotificationManager(user, note);
const nmRelatedPromises = []; const nmRelatedPromises = [];