diff --git a/packages/backend/src/core/NoteEditService.ts b/packages/backend/src/core/NoteEditService.ts index 1a34fa1154eb67010ed62519b83a9791f5ddef10..21d775801935019ed60fec450a1bdfa5000eeafd 100644 --- a/packages/backend/src/core/NoteEditService.ts +++ b/packages/backend/src/core/NoteEditService.ts @@ -525,7 +525,9 @@ export class NoteEditService implements OnApplicationShutdown { // Pack the note const noteObj = await this.noteEntityService.pack(note); - this.globalEventService.publishNotesStream(noteObj); + this.globalEventService.publishNoteStream(note.id, 'updated', { + updatedAt: note.updatedAt!, + }); this.roleService.addNoteToRoleTimeline(noteObj); diff --git a/packages/backend/src/server/api/stream/types.ts b/packages/backend/src/server/api/stream/types.ts index 90e0a61f26b12a610cb1f1119cb6863847e23b54..9bdab19de47becf7bce29e499c640a577d1bb428 100644 --- a/packages/backend/src/server/api/stream/types.ts +++ b/packages/backend/src/server/api/stream/types.ts @@ -142,6 +142,9 @@ export interface NoteStreamTypes { reaction: string; userId: MiUser['id']; }; + updated: { + updatedAt: Date; + } } type NoteStreamEventTypes = { [key in keyof NoteStreamTypes]: { diff --git a/packages/frontend/src/scripts/use-note-capture.ts b/packages/frontend/src/scripts/use-note-capture.ts index c6185325706539a2a126de00c9ac90ffef935a3c..088e1d6c8374f01d6838df8030e326e20d7ff9d2 100644 --- a/packages/frontend/src/scripts/use-note-capture.ts +++ b/packages/frontend/src/scripts/use-note-capture.ts @@ -7,6 +7,7 @@ import { onUnmounted, Ref } from 'vue'; import * as Misskey from 'misskey-js'; import { useStream } from '@/stream.js'; import { $i } from '@/account.js'; +import * as os from '@/os.js'; export function useNoteCapture(props: { rootEl: Ref<HTMLElement>; @@ -16,7 +17,7 @@ export function useNoteCapture(props: { const note = props.note; const connection = $i ? useStream() : null; - function onStreamNoteUpdated(noteData): void { + async function onStreamNoteUpdated(noteData): void { const { type, id, body } = noteData; if (id !== note.value.id) return; @@ -75,6 +76,22 @@ export function useNoteCapture(props: { props.isDeletedRef.value = true; break; } + + case "updated": { + const editedNote = await os.api("notes/show", { + noteId: id, + }); + + const keys = new Set<string>(); + Object.keys(editedNote) + .concat(Object.keys(note.value)) + .forEach((key) => keys.add(key)); + keys.forEach((key) => { + note.value[key] = editedNote[key]; + }); + break; + } + } }