summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/stream/channel.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/server/api/stream/channel.ts')
-rw-r--r--packages/backend/src/server/api/stream/channel.ts26
1 files changed, 25 insertions, 1 deletions
diff --git a/packages/backend/src/server/api/stream/channel.ts b/packages/backend/src/server/api/stream/channel.ts
index 204ea9f705..3a82865577 100644
--- a/packages/backend/src/server/api/stream/channel.ts
+++ b/packages/backend/src/server/api/stream/channel.ts
@@ -61,6 +61,21 @@ export default abstract class Channel {
return this.connection.subscriber;
}
+ /**
+ * Checks if a note is visible to the current user *excluding* blocks and mutes.
+ */
+ protected isNoteVisibleToMe(note: Packed<'Note'>): boolean {
+ if (note.visibility === 'public') return true;
+ if (note.visibility === 'home') return true;
+ if (!this.user) return false;
+ if (this.user.id === note.userId) return true;
+ if (note.visibility === 'followers') {
+ return this.following[note.userId] != null;
+ }
+ if (!note.visibleUserIds) return false;
+ return note.visibleUserIds.includes(this.user.id);
+ }
+
/*
* ミュートとブロックされてるを処理する
*/
@@ -69,7 +84,7 @@ export default abstract class Channel {
if (note.user.requireSigninToViewContents && !this.user) return true;
// 流れてきたNoteがインスタンスミュートしたインスタンスが関わる
- if (isInstanceMuted(note, new Set<string>(this.userProfile?.mutedInstances ?? [])) && !this.following[note.userId]) return true;
+ if (isInstanceMuted(note, this.userMutedInstances) && !this.following[note.userId]) return true;
// 流れてきたNoteがミュートしているユーザーが関わる
if (isUserRelated(note, this.userIdsWhoMeMuting)) return true;
@@ -82,6 +97,15 @@ export default abstract class Channel {
// If it's a boost (pure renote) then we need to check the target as well
if (isPackedPureRenote(note) && note.renote && this.isNoteMutedOrBlocked(note.renote)) return true;
+ // Hide silenced notes
+ if (note.user.isSilenced || note.user.instance?.isSilenced) {
+ if (this.user == null) return true;
+ if (this.user.id === note.userId) return false;
+ if (this.following[note.userId] == null) return true;
+ }
+
+ // TODO muted threads
+
return false;
}