shallow clone
This commit is contained in:
		
							parent
							
								
									75d77ddba1
								
							
						
					
					
						commit
						17088c383f
					
				|  | @ -9,8 +9,8 @@ import { isUserRelated } from '@/misc/is-user-related.js'; | |||
| import { isRenotePacked, isQuotePacked } from '@/misc/is-renote.js'; | ||||
| import type { Packed } from '@/misc/json-schema.js'; | ||||
| import type { JsonObject, JsonValue } from '@/misc/json-value.js'; | ||||
| import type Connection from './Connection.js'; | ||||
| import { NoteEntityService } from '@/core/entities/NoteEntityService.js'; | ||||
| import type Connection from './Connection.js'; | ||||
| 
 | ||||
| /** | ||||
|  * Stream channel | ||||
|  | @ -103,14 +103,41 @@ export default abstract class Channel { | |||
| 
 | ||||
| 	public onMessage?(type: string, body: JsonValue): void; | ||||
| 
 | ||||
| 	public async assignMyReaction(note: Packed<'Note'>, noteEntityService: NoteEntityService) { | ||||
| 		if (this.user && Object.keys(note.reactions).length > 0) { | ||||
| 			const myReaction = await noteEntityService.populateMyReaction(note, this.user.id); | ||||
| 			note.myReaction = myReaction; | ||||
| 	public async assignMyReaction(note: Packed<'Note'>, noteEntityService: NoteEntityService): Promise<Packed<'Note'>> { | ||||
| 		let changed = false; | ||||
| 		const clonedNote = { ...note }; | ||||
| 		if (this.user && isRenotePacked(note) && !isQuotePacked(note)) { | ||||
| 			if (note.renote && Object.keys(note.renote.reactions).length > 0) { | ||||
| 				const myReaction = await noteEntityService.populateMyReaction(note.renote, this.user.id); | ||||
| 				if (myReaction) { | ||||
| 					changed = true; | ||||
| 					clonedNote.renote = { ...note.renote }; | ||||
| 					clonedNote.renote.myReaction = myReaction; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if (this.user && note.renote?.reply && Object.keys(note.renote.reply.reactions).length > 0) { | ||||
| 			const myReaction = await 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; | ||||
| 			} | ||||
| 		} | ||||
| 		if (this.user && note.reply && Object.keys(note.reply.reactions).length > 0) { | ||||
| 			const myReaction = await noteEntityService.populateMyReaction(note.reply, this.user.id); | ||||
| 			if (myReaction) { | ||||
| 				changed = true; | ||||
| 				clonedNote.reply = { ...note.reply }; | ||||
| 				clonedNote.reply.myReaction = myReaction; | ||||
| 			} | ||||
| 		} | ||||
| 		return changed ? clonedNote : note; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| export type MiChannelService<T extends boolean> = { | ||||
| 	shouldShare: boolean; | ||||
| 	requireCredential: T; | ||||
|  |  | |||
|  | @ -55,24 +55,11 @@ class GlobalTimelineChannel extends Channel { | |||
| 
 | ||||
| 		if (this.isNoteMutedOrBlocked(note)) return; | ||||
| 
 | ||||
| 		const reactionsToFetch = []; | ||||
| 		if (this.user && isRenotePacked(note) && !isQuotePacked(note)) { | ||||
| 			if (note.renote) { | ||||
| 				reactionsToFetch.push(this.assignMyReaction(note.renote, this.noteEntityService)); | ||||
| 				if (note.renote.reply) { | ||||
| 					reactionsToFetch.push(this.assignMyReaction(note.renote.reply, this.noteEntityService)); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if (this.user && note.reply) { | ||||
| 			reactionsToFetch.push(this.assignMyReaction(note.reply, this.noteEntityService)); | ||||
| 		} | ||||
| 		const clonedNote = await this.assignMyReaction(note, this.noteEntityService); | ||||
| 
 | ||||
| 		await Promise.all(reactionsToFetch); | ||||
| 		this.connection.cacheNote(clonedNote); | ||||
| 
 | ||||
| 		this.connection.cacheNote(note); | ||||
| 
 | ||||
| 		this.send('note', note); | ||||
| 		this.send('note', clonedNote); | ||||
| 	} | ||||
| 
 | ||||
| 	@bindThis | ||||
|  |  | |||
|  | @ -79,24 +79,11 @@ class HomeTimelineChannel extends Channel { | |||
| 
 | ||||
| 		if (this.isNoteMutedOrBlocked(note)) return; | ||||
| 
 | ||||
| 		const reactionsToFetch = []; | ||||
| 		if (this.user && isRenotePacked(note) && !isQuotePacked(note)) { | ||||
| 			if (note.renote) { | ||||
| 				reactionsToFetch.push(this.assignMyReaction(note.renote, this.noteEntityService)); | ||||
| 				if (note.renote.reply) { | ||||
| 					reactionsToFetch.push(this.assignMyReaction(note.renote.reply, this.noteEntityService)); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if (this.user && note.reply) { | ||||
| 			reactionsToFetch.push(this.assignMyReaction(note.reply, this.noteEntityService)); | ||||
| 		} | ||||
| 		const clonedNote = await this.assignMyReaction(note, this.noteEntityService); | ||||
| 
 | ||||
| 		await Promise.all(reactionsToFetch); | ||||
| 		this.connection.cacheNote(clonedNote); | ||||
| 
 | ||||
| 		this.connection.cacheNote(note); | ||||
| 
 | ||||
| 		this.send('note', note); | ||||
| 		this.send('note', clonedNote); | ||||
| 	} | ||||
| 
 | ||||
| 	@bindThis | ||||
|  |  | |||
|  | @ -93,24 +93,11 @@ class HybridTimelineChannel extends Channel { | |||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		const reactionsToFetch = []; | ||||
| 		if (this.user && isRenotePacked(note) && !isQuotePacked(note)) { | ||||
| 			if (note.renote) { | ||||
| 				reactionsToFetch.push(this.assignMyReaction(note.renote, this.noteEntityService)); | ||||
| 				if (note.renote.reply) { | ||||
| 					reactionsToFetch.push(this.assignMyReaction(note.renote.reply, this.noteEntityService)); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if (this.user && note.reply) { | ||||
| 			reactionsToFetch.push(this.assignMyReaction(note.reply, this.noteEntityService)); | ||||
| 		} | ||||
| 		const clonedNote = await this.assignMyReaction(note, this.noteEntityService); | ||||
| 
 | ||||
| 		await Promise.all(reactionsToFetch); | ||||
| 		this.connection.cacheNote(clonedNote); | ||||
| 
 | ||||
| 		this.connection.cacheNote(note); | ||||
| 
 | ||||
| 		this.send('note', note); | ||||
| 		this.send('note', clonedNote); | ||||
| 	} | ||||
| 
 | ||||
| 	@bindThis | ||||
|  |  | |||
|  | @ -65,24 +65,11 @@ class LocalTimelineChannel extends Channel { | |||
| 
 | ||||
| 		if (this.isNoteMutedOrBlocked(note)) return; | ||||
| 
 | ||||
| 		const reactionsToFetch = []; | ||||
| 		if (this.user && isRenotePacked(note) && !isQuotePacked(note)) { | ||||
| 			if (note.renote) { | ||||
| 				reactionsToFetch.push(this.assignMyReaction(note.renote, this.noteEntityService)); | ||||
| 				if (note.renote.reply) { | ||||
| 					reactionsToFetch.push(this.assignMyReaction(note.renote.reply, this.noteEntityService)); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if (this.user && note.reply) { | ||||
| 			reactionsToFetch.push(this.assignMyReaction(note.reply, this.noteEntityService)); | ||||
| 		} | ||||
| 		const clonedNote = await this.assignMyReaction(note, this.noteEntityService); | ||||
| 
 | ||||
| 		await Promise.all(reactionsToFetch); | ||||
| 		this.connection.cacheNote(clonedNote); | ||||
| 
 | ||||
| 		this.connection.cacheNote(note); | ||||
| 
 | ||||
| 		this.send('note', note); | ||||
| 		this.send('note', clonedNote); | ||||
| 	} | ||||
| 
 | ||||
| 	@bindThis | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue