diff options
| author | Hazelnoot <acomputerdog@gmail.com> | 2025-03-03 16:31:24 +0000 |
|---|---|---|
| committer | Hazelnoot <acomputerdog@gmail.com> | 2025-03-03 16:31:24 +0000 |
| commit | 7d61bf73040f7f3d85365c7f44c283beaee7be6c (patch) | |
| tree | 682e24b7f39489a3abca9de9a91cd52b28fe28dc /packages/backend/src | |
| parent | merge: Bump develop version (!928) (diff) | |
| parent | small change to comment (diff) | |
| download | sharkey-7d61bf73040f7f3d85365c7f44c283beaee7be6c.tar.gz sharkey-7d61bf73040f7f3d85365c7f44c283beaee7be6c.tar.bz2 sharkey-7d61bf73040f7f3d85365c7f44c283beaee7be6c.zip | |
merge: fix: always clone the note before hideNote (!931)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/931
Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Hazelnoot <acomputerdog@gmail.com>
Diffstat (limited to 'packages/backend/src')
| -rw-r--r-- | packages/backend/src/server/api/stream/channel.ts | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/packages/backend/src/server/api/stream/channel.ts b/packages/backend/src/server/api/stream/channel.ts index 7a6193ccfc..5189c86de8 100644 --- a/packages/backend/src/server/api/stream/channel.ts +++ b/packages/backend/src/server/api/stream/channel.ts @@ -82,6 +82,11 @@ export default abstract class Channel { return false; } + /** + * This function modifies {@link note}, please make sure it has been shallow cloned. + * See Dakkar's comment of {@link assignMyReaction} for more + * @param note The note to change + */ protected async hideNote(note: Packed<'Note'>): Promise<void> { if (note.renote) { await this.hideNote(note.renote); @@ -122,7 +127,6 @@ export default abstract class Channel { public onMessage?(type: string, body: JsonValue): void; public async assignMyReaction(note: Packed<'Note'>): Promise<Packed<'Note'>> { - let changed = false; // StreamingApiServerService creates a single EventEmitter per server process, // so a new note arriving from redis gets de-serialised once per server process, // and then that single object is passed to all active channels on each connection. @@ -133,7 +137,6 @@ export default abstract class Channel { if (note.renote && Object.keys(note.renote.reactions).length > 0) { const myReaction = await this.noteEntityService.populateMyReaction(note.renote, this.user.id); if (myReaction) { - changed = true; clonedNote.renote = { ...note.renote }; clonedNote.renote.myReaction = myReaction; } @@ -141,7 +144,6 @@ export default abstract class Channel { if (note.renote?.reply && Object.keys(note.renote.reply.reactions).length > 0) { const myReaction = await this.noteEntityService.populateMyReaction(note.renote.reply, this.user.id); if (myReaction) { - changed = true; clonedNote.renote = { ...note.renote }; clonedNote.renote.reply = { ...note.renote.reply }; clonedNote.renote.reply.myReaction = myReaction; @@ -151,12 +153,11 @@ export default abstract class Channel { if (this.user && note.reply && Object.keys(note.reply.reactions).length > 0) { const myReaction = await this.noteEntityService.populateMyReaction(note.reply, this.user.id); if (myReaction) { - changed = true; clonedNote.reply = { ...note.reply }; clonedNote.reply.myReaction = myReaction; } } - return changed ? clonedNote : note; + return clonedNote; } } |