summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/stream
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-10-09 17:48:09 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-10-09 17:48:09 +0900
commit6ff98846e62eec3e6a4c88d658c7e98971195b34 (patch)
treee1915719210d6ac73e80dbf16c7224dc746116ba /packages/backend/src/server/api/stream
parentfix (diff)
downloadsharkey-6ff98846e62eec3e6a4c88d658c7e98971195b34.tar.gz
sharkey-6ff98846e62eec3e6a4c88d658c7e98971195b34.tar.bz2
sharkey-6ff98846e62eec3e6a4c88d658c7e98971195b34.zip
fix(backend): 「ファイル付きのみ」のTLでファイル無しの新着ノートが表示される
Fix #11939
Diffstat (limited to 'packages/backend/src/server/api/stream')
-rw-r--r--packages/backend/src/server/api/stream/channels/global-timeline.ts4
-rw-r--r--packages/backend/src/server/api/stream/channels/home-timeline.ts4
-rw-r--r--packages/backend/src/server/api/stream/channels/hybrid-timeline.ts4
-rw-r--r--packages/backend/src/server/api/stream/channels/local-timeline.ts4
-rw-r--r--packages/backend/src/server/api/stream/channels/user-list.ts6
5 files changed, 21 insertions, 1 deletions
diff --git a/packages/backend/src/server/api/stream/channels/global-timeline.ts b/packages/backend/src/server/api/stream/channels/global-timeline.ts
index 552506fbbe..03f2dff62b 100644
--- a/packages/backend/src/server/api/stream/channels/global-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/global-timeline.ts
@@ -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;
diff --git a/packages/backend/src/server/api/stream/channels/home-timeline.ts b/packages/backend/src/server/api/stream/channels/home-timeline.ts
index e377246f34..24be590504 100644
--- a/packages/backend/src/server/api/stream/channels/home-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/home-timeline.ts
@@ -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 {
diff --git a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
index 348be9c7e4..d5f5d54e46 100644
--- a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts
@@ -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;
+
// チャンネルの投稿ではなく、自分自身の投稿 または
// チャンネルの投稿ではなく、その投稿のユーザーをフォローしている または
// チャンネルの投稿ではなく、全体公開のローカルの投稿 または
diff --git a/packages/backend/src/server/api/stream/channels/local-timeline.ts b/packages/backend/src/server/api/stream/channels/local-timeline.ts
index 849cbfa560..94c22f8915 100644
--- a/packages/backend/src/server/api/stream/channels/local-timeline.ts
+++ b/packages/backend/src/server/api/stream/channels/local-timeline.ts
@@ -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;
diff --git a/packages/backend/src/server/api/stream/channels/user-list.ts b/packages/backend/src/server/api/stream/channels/user-list.ts
index 03f7760d8e..240822d9ab 100644
--- a/packages/backend/src/server/api/stream/channels/user-list.ts
+++ b/packages/backend/src/server/api/stream/channels/user-list.ts
@@ -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)) {