Fix #5935
This commit is contained in:
		
							parent
							
								
									a473768bef
								
							
						
					
					
						commit
						d76fceae85
					
				|  | @ -4,6 +4,7 @@ ChangeLog | |||
| unreleased | ||||
| ------------------- | ||||
| ### 🐛Fixes | ||||
| * タイムラインに自分の返信と自分への返信と投稿者自身への返信以外の返信が含まれている問題を修正 | ||||
| * グループがない状態でグループチャットを開始しようとするとフリーズする問題を修正 | ||||
| 
 | ||||
| 12.8.0 (2020/02/13) | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ import { makePaginationQuery } from '../../common/make-pagination-query'; | |||
| import { Notes } from '../../../../models'; | ||||
| import { generateMuteQuery } from '../../common/generate-mute-query'; | ||||
| import { activeUsersChart } from '../../../../services/chart'; | ||||
| import { Brackets } from 'typeorm'; | ||||
| 
 | ||||
| export const meta = { | ||||
| 	desc: { | ||||
|  | @ -77,6 +78,18 @@ export default define(meta, async (ps, user) => { | |||
| 			ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate) | ||||
| 		.andWhere('note.visibility = \'public\'') | ||||
| 		.andWhere('note.replyId IS NULL') | ||||
| 		.andWhere(new Brackets(qb => { qb | ||||
| 			.where(`note.replyId IS NULL`) // 返信ではない
 | ||||
| 			.orWhere('note.replyUserId = :meId', { meId: user.id }) // 返信だけど自分のノートへの返信
 | ||||
| 			.orWhere(new Brackets(qb => { qb // 返信だけど自分の行った返信
 | ||||
| 				.where(`note.replyId IS NOT NULL`) | ||||
| 				.andWhere('note.userId = :meId', { meId: user.id }); | ||||
| 			})) | ||||
| 			.orWhere(new Brackets(qb => { qb // 返信だけど投稿者自身への返信
 | ||||
| 				.where(`note.replyId IS NOT NULL`) | ||||
| 				.andWhere('note.replyUserId = note.userId', { meId: user.id }); | ||||
| 			})); | ||||
| 		})) | ||||
| 		.leftJoinAndSelect('note.user', 'user'); | ||||
| 
 | ||||
| 	if (user) generateMuteQuery(query, user); | ||||
|  |  | |||
|  | @ -124,6 +124,18 @@ export default define(meta, async (ps, user) => { | |||
| 			qb.where(`((note.userId IN (${ followingQuery.getQuery() })) OR (note.userId = :meId))`, { meId: user.id }) | ||||
| 				.orWhere('(note.visibility = \'public\') AND (note.userHost IS NULL)'); | ||||
| 		})) | ||||
| 		.andWhere(new Brackets(qb => { qb | ||||
| 			.where(`note.replyId IS NULL`) // 返信ではない
 | ||||
| 			.orWhere('note.replyUserId = :meId', { meId: user.id }) // 返信だけど自分のノートへの返信
 | ||||
| 			.orWhere(new Brackets(qb => { qb // 返信だけど自分の行った返信
 | ||||
| 				.where(`note.replyId IS NOT NULL`) | ||||
| 				.andWhere('note.userId = :meId', { meId: user.id }); | ||||
| 			})) | ||||
| 			.orWhere(new Brackets(qb => { qb // 返信だけど投稿者自身への返信
 | ||||
| 				.where(`note.replyId IS NOT NULL`) | ||||
| 				.andWhere('note.replyUserId = note.userId', { meId: user.id }); | ||||
| 			})); | ||||
| 		})) | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.setParameters(followingQuery.getParameters()); | ||||
| 
 | ||||
|  |  | |||
|  | @ -93,6 +93,18 @@ export default define(meta, async (ps, user) => { | |||
| 	const query = makePaginationQuery(Notes.createQueryBuilder('note'), | ||||
| 			ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate) | ||||
| 		.andWhere('(note.visibility = \'public\') AND (note.userHost IS NULL)') | ||||
| 		.andWhere(new Brackets(qb => { qb | ||||
| 			.where(`note.replyId IS NULL`) // 返信ではない
 | ||||
| 			.orWhere('note.replyUserId = :meId', { meId: user.id }) // 返信だけど自分のノートへの返信
 | ||||
| 			.orWhere(new Brackets(qb => { qb // 返信だけど自分の行った返信
 | ||||
| 				.where(`note.replyId IS NOT NULL`) | ||||
| 				.andWhere('note.userId = :meId', { meId: user.id }); | ||||
| 			})) | ||||
| 			.orWhere(new Brackets(qb => { qb // 返信だけど投稿者自身への返信
 | ||||
| 				.where(`note.replyId IS NOT NULL`) | ||||
| 				.andWhere('note.replyUserId = note.userId', { meId: user.id }); | ||||
| 			})); | ||||
| 		})) | ||||
| 		.leftJoinAndSelect('note.user', 'user'); | ||||
| 
 | ||||
| 	generateVisibilityQuery(query, user); | ||||
|  |  | |||
|  | @ -110,6 +110,18 @@ export default define(meta, async (ps, user) => { | |||
| 			.where(`note.userId IN (${ followingQuery.getQuery() })`) | ||||
| 			.orWhere('note.userId = :meId', { meId: user.id }); | ||||
| 		})) | ||||
| 		.andWhere(new Brackets(qb => { qb | ||||
| 			.where(`note.replyId IS NULL`) // 返信ではない
 | ||||
| 			.orWhere('note.replyUserId = :meId', { meId: user.id }) // 返信だけど自分のノートへの返信
 | ||||
| 			.orWhere(new Brackets(qb => { qb // 返信だけど自分の行った返信
 | ||||
| 				.where(`note.replyId IS NOT NULL`) | ||||
| 				.andWhere('note.userId = :meId', { meId: user.id }); | ||||
| 			})) | ||||
| 			.orWhere(new Brackets(qb => { qb // 返信だけど投稿者自身への返信
 | ||||
| 				.where(`note.replyId IS NOT NULL`) | ||||
| 				.andWhere('note.replyUserId = note.userId', { meId: user.id }); | ||||
| 			})); | ||||
| 		})) | ||||
| 		.leftJoinAndSelect('note.user', 'user') | ||||
| 		.setParameters(followingQuery.getParameters()); | ||||
| 
 | ||||
|  |  | |||
|  | @ -38,6 +38,12 @@ export default class extends Channel { | |||
| 			}); | ||||
| 		} | ||||
| 
 | ||||
| 		// 関係ない返信は除外
 | ||||
| 		if (note.reply) { | ||||
| 			// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
 | ||||
| 			if (note.reply.userId !== this.user!.id && note.userId !== this.user!.id && note.reply.userId !== note.userId) return; | ||||
| 		} | ||||
| 
 | ||||
| 		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
 | ||||
| 		if (shouldMuteThisNote(note, this.muting)) return; | ||||
| 
 | ||||
|  |  | |||
|  | @ -43,6 +43,12 @@ export default class extends Channel { | |||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		// 関係ない返信は除外
 | ||||
| 		if (note.reply) { | ||||
| 			// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
 | ||||
| 			if (note.reply.userId !== this.user!.id && note.userId !== this.user!.id && note.reply.userId !== note.userId) return; | ||||
| 		} | ||||
| 
 | ||||
| 		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
 | ||||
| 		if (shouldMuteThisNote(note, this.muting)) return; | ||||
| 
 | ||||
|  |  | |||
|  | @ -52,6 +52,12 @@ export default class extends Channel { | |||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		// 関係ない返信は除外
 | ||||
| 		if (note.reply) { | ||||
| 			// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
 | ||||
| 			if (note.reply.userId !== this.user!.id && note.userId !== this.user!.id && note.reply.userId !== note.userId) return; | ||||
| 		} | ||||
| 
 | ||||
| 		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
 | ||||
| 		if (shouldMuteThisNote(note, this.muting)) return; | ||||
| 
 | ||||
|  |  | |||
|  | @ -40,6 +40,12 @@ export default class extends Channel { | |||
| 			}); | ||||
| 		} | ||||
| 
 | ||||
| 		// 関係ない返信は除外
 | ||||
| 		if (note.reply) { | ||||
| 			// 「チャンネル接続主への返信」でもなければ、「チャンネル接続主が行った返信」でもなければ、「投稿者の投稿者自身への返信」でもない場合
 | ||||
| 			if (note.reply.userId !== this.user!.id && note.userId !== this.user!.id && note.reply.userId !== note.userId) return; | ||||
| 		} | ||||
| 
 | ||||
| 		// 流れてきたNoteがミュートしているユーザーが関わるものだったら無視する
 | ||||
| 		if (shouldMuteThisNote(note, this.muting)) return; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue