isChannelRelatedの条件に誤りがあった

This commit is contained in:
samunohito 2024-06-12 07:49:54 +09:00
parent efee424096
commit 491541fed1
2 changed files with 25 additions and 19 deletions

View file

@ -14,12 +14,7 @@ import { Packed } from '@/misc/json-schema.js';
* @param channelIds ID一覧 * @param channelIds ID一覧
*/ */
export function isChannelRelated(note: MiNote | Packed<'Note'>, channelIds: Set<string>): boolean { export function isChannelRelated(note: MiNote | Packed<'Note'>, channelIds: Set<string>): boolean {
if (!note.channelId) { if (note.channelId && channelIds.has(note.channelId)) {
// チャンネル投稿じゃなければ無条件でOK
return true;
}
if (channelIds.has(note.channelId)) {
return true; return true;
} }
@ -27,7 +22,7 @@ export function isChannelRelated(note: MiNote | Packed<'Note'>, channelIds: Set<
return true; return true;
} }
// NOTE: リプライはchannelIdのチェックだけでOKなはずなので見てない // NOTE: リプライはchannelIdのチェックだけでOKなはずなので見てない(チャンネルのノートにチャンネル外からのリプライまたはその逆はないはずなので)
return false; return false;
} }

View file

@ -53,18 +53,29 @@ class HybridTimelineChannel extends Channel {
if (this.withFiles && (note.fileIds == null || note.fileIds.length === 0)) return; if (this.withFiles && (note.fileIds == null || note.fileIds.length === 0)) return;
// チャンネルの投稿ではなく、自分自身の投稿 または if (!note.channelId) {
// チャンネルの投稿ではなく、その投稿のユーザーをフォローしている または // 以下の条件に該当するートのみ後続処理に通すので、以下のif文は該当しないートをすべて弾くようにする
// チャンネルの投稿ではなく、全体公開のローカルの投稿 または // - 自分自身の投稿
// フォローしているチャンネルの投稿 または // - その投稿のユーザーをフォローしている
// ミュートしていないチャンネルの投稿(リノート・引用リノートもチェック対象)の場合だけ // - 全体公開のローカルの投稿
if (!( if (!(
(note.channelId == null && isMe) || isMe ||
(note.channelId == null && Object.hasOwn(this.following, note.userId)) || Object.hasOwn(this.following, note.userId) ||
(note.channelId == null && (note.user.host == null && note.visibility === 'public')) || (note.user.host == null && note.visibility === 'public')
(note.channelId != null && this.followingChannels.has(note.channelId)) || )) {
(note.channelId != null && isChannelRelated(note, this.mutingChannels)) return;
)) return; }
} else {
// 以下の条件に該当するートのみ後続処理に通すので、以下のif文は該当しないートをすべて弾くようにする
// - ミュートしていないチャンネルの投稿(リノート・引用リノートもチェック対象)
// - フォローしているチャンネルの投稿
if (isChannelRelated(note, this.mutingChannels)) {
return;
}
if (!this.followingChannels.has(note.channelId)) {
return;
}
}
if (note.visibility === 'followers') { if (note.visibility === 'followers') {
if (!isMe && !Object.hasOwn(this.following, note.userId)) return; if (!isMe && !Object.hasOwn(this.following, note.userId)) return;