| @@ -19,6 +19,7 @@ class GlobalTimelineChannel extends Channel { | ||||
| 	public static shouldShare = false; | ||||
| 	public static requireCredential = false; | ||||
| 	private withRenotes: boolean; | ||||
| 	private withFiles: boolean; | ||||
|  | ||||
| 	constructor( | ||||
| 		private metaService: MetaService, | ||||
| @@ -38,6 +39,7 @@ class GlobalTimelineChannel extends Channel { | ||||
| 		if (!policies.gtlAvailable) return; | ||||
|  | ||||
| 		this.withRenotes = params.withRenotes ?? true; | ||||
| 		this.withFiles = params.withFiles ?? false; | ||||
|  | ||||
| 		// Subscribe events | ||||
| 		this.subscriber.on('notesStream', this.onNote); | ||||
| @@ -45,6 +47,8 @@ class GlobalTimelineChannel extends Channel { | ||||
|  | ||||
| 	@bindThis | ||||
| 	private async onNote(note: Packed<'Note'>) { | ||||
| 		if (this.withFiles && (note.fileIds == null || note.fileIds.length === 0)) return; | ||||
|  | ||||
| 		if (note.visibility !== 'public') return; | ||||
| 		if (note.channelId != null) return; | ||||
|  | ||||
|   | ||||
| @@ -17,6 +17,7 @@ class HomeTimelineChannel extends Channel { | ||||
| 	public static shouldShare = false; | ||||
| 	public static requireCredential = true; | ||||
| 	private withRenotes: boolean; | ||||
| 	private withFiles: boolean; | ||||
|  | ||||
| 	constructor( | ||||
| 		private noteEntityService: NoteEntityService, | ||||
| @@ -31,12 +32,15 @@ class HomeTimelineChannel extends Channel { | ||||
| 	@bindThis | ||||
| 	public async init(params: any) { | ||||
| 		this.withRenotes = params.withRenotes ?? true; | ||||
| 		this.withFiles = params.withFiles ?? false; | ||||
|  | ||||
| 		this.subscriber.on('notesStream', this.onNote); | ||||
| 	} | ||||
|  | ||||
| 	@bindThis | ||||
| 	private async onNote(note: Packed<'Note'>) { | ||||
| 		if (this.withFiles && (note.fileIds == null || note.fileIds.length === 0)) return; | ||||
|  | ||||
| 		if (note.channelId) { | ||||
| 			if (!this.followingChannels.has(note.channelId)) return; | ||||
| 		} else { | ||||
|   | ||||
| @@ -19,6 +19,7 @@ class HybridTimelineChannel extends Channel { | ||||
| 	public static shouldShare = false; | ||||
| 	public static requireCredential = true; | ||||
| 	private withRenotes: boolean; | ||||
| 	private withFiles: boolean; | ||||
|  | ||||
| 	constructor( | ||||
| 		private metaService: MetaService, | ||||
| @@ -38,6 +39,7 @@ class HybridTimelineChannel extends Channel { | ||||
| 		if (!policies.ltlAvailable) return; | ||||
|  | ||||
| 		this.withRenotes = params.withRenotes ?? true; | ||||
| 		this.withFiles = params.withFiles ?? false; | ||||
|  | ||||
| 		// Subscribe events | ||||
| 		this.subscriber.on('notesStream', this.onNote); | ||||
| @@ -45,6 +47,8 @@ class HybridTimelineChannel extends Channel { | ||||
|  | ||||
| 	@bindThis | ||||
| 	private async onNote(note: Packed<'Note'>) { | ||||
| 		if (this.withFiles && (note.fileIds == null || note.fileIds.length === 0)) return; | ||||
|  | ||||
| 		// チャンネルの投稿ではなく、自分自身の投稿 または | ||||
| 		// チャンネルの投稿ではなく、その投稿のユーザーをフォローしている または | ||||
| 		// チャンネルの投稿ではなく、全体公開のローカルの投稿 または | ||||
|   | ||||
| @@ -18,6 +18,7 @@ class LocalTimelineChannel extends Channel { | ||||
| 	public static shouldShare = false; | ||||
| 	public static requireCredential = false; | ||||
| 	private withRenotes: boolean; | ||||
| 	private withFiles: boolean; | ||||
|  | ||||
| 	constructor( | ||||
| 		private metaService: MetaService, | ||||
| @@ -37,6 +38,7 @@ class LocalTimelineChannel extends Channel { | ||||
| 		if (!policies.ltlAvailable) return; | ||||
|  | ||||
| 		this.withRenotes = params.withRenotes ?? true; | ||||
| 		this.withFiles = params.withFiles ?? false; | ||||
|  | ||||
| 		// Subscribe events | ||||
| 		this.subscriber.on('notesStream', this.onNote); | ||||
| @@ -44,6 +46,8 @@ class LocalTimelineChannel extends Channel { | ||||
|  | ||||
| 	@bindThis | ||||
| 	private async onNote(note: Packed<'Note'>) { | ||||
| 		if (this.withFiles && (note.fileIds == null || note.fileIds.length === 0)) return; | ||||
|  | ||||
| 		if (note.user.host !== null) return; | ||||
| 		if (note.visibility !== 'public') return; | ||||
| 		if (note.channelId != null && !this.followingChannels.has(note.channelId)) return; | ||||
|   | ||||
| @@ -18,8 +18,9 @@ class UserListChannel extends Channel { | ||||
| 	public static shouldShare = false; | ||||
| 	public static requireCredential = false; | ||||
| 	private listId: string; | ||||
| 	public membershipsMap: Record<string, Pick<MiUserListMembership, 'withReplies'> | undefined> = {}; | ||||
| 	private membershipsMap: Record<string, Pick<MiUserListMembership, 'withReplies'> | undefined> = {}; | ||||
| 	private listUsersClock: NodeJS.Timeout; | ||||
| 	private withFiles: boolean; | ||||
|  | ||||
| 	constructor( | ||||
| 		private userListsRepository: UserListsRepository, | ||||
| @@ -37,6 +38,7 @@ class UserListChannel extends Channel { | ||||
| 	@bindThis | ||||
| 	public async init(params: any) { | ||||
| 		this.listId = params.listId as string; | ||||
| 		this.withFiles = params.withFiles ?? false; | ||||
|  | ||||
| 		// Check existence and owner | ||||
| 		const listExist = await this.userListsRepository.exist({ | ||||
| @@ -76,6 +78,8 @@ class UserListChannel extends Channel { | ||||
|  | ||||
| 	@bindThis | ||||
| 	private async onNote(note: Packed<'Note'>) { | ||||
| 		if (this.withFiles && (note.fileIds == null || note.fileIds.length === 0)) return; | ||||
|  | ||||
| 		if (!Object.hasOwn(this.membershipsMap, note.userId)) return; | ||||
|  | ||||
| 		if (['followers', 'specified'].includes(note.visibility)) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 syuilo
					syuilo