From e6e676d40912cd5399f722c84b7eda2074b84096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Mon, 16 Mar 2026 13:00:36 +0100 Subject: [PATCH] nicolium: allow filtering self-reposts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- .../nicolium/src/features/preferences/index.tsx | 17 +++++++++++++++++ packages/nicolium/src/locales/en.json | 1 + .../nicolium/src/schemas/frontend-settings.ts | 1 + packages/nicolium/src/stores/timelines.ts | 4 ++++ packages/nicolium/src/utils/timeline-filter.ts | 4 ++++ 5 files changed, 27 insertions(+) diff --git a/packages/nicolium/src/features/preferences/index.tsx b/packages/nicolium/src/features/preferences/index.tsx index 9b474c801..820b22850 100644 --- a/packages/nicolium/src/features/preferences/index.tsx +++ b/packages/nicolium/src/features/preferences/index.tsx @@ -312,6 +312,23 @@ const Preferences = () => { /> + + } + > + + + ; reblogIds: Array; isConnectedTop?: boolean; @@ -126,6 +127,7 @@ const processPage = (statuses: Array): Array => { type: 'status', id: status.reblog.id, originalId: status.id, + accountId: status.reblog.account.id, rebloggedBy: [status.account.id], reblogIds: [status.id], isConnectedTop, @@ -143,6 +145,7 @@ const processPage = (statuses: Array): Array => { type: 'status', id: status.id, originalId: status.id, + accountId: status.account.id, rebloggedBy: [], reblogIds: [], isConnectedTop, @@ -347,6 +350,7 @@ const useTimelinesStore = create()( type: 'status', id: status.id, originalId: status.id, + accountId: status.account.id, rebloggedBy: [], reblogIds: [], isReply: status.in_reply_to_id !== null, diff --git a/packages/nicolium/src/utils/timeline-filter.ts b/packages/nicolium/src/utils/timeline-filter.ts index 9f737c430..75afd6059 100644 --- a/packages/nicolium/src/utils/timeline-filter.ts +++ b/packages/nicolium/src/utils/timeline-filter.ts @@ -8,6 +8,10 @@ type StatusEntry = Extract; const isEntryFiltered = (entry: StatusEntry, filters: TimelineFilters): boolean => (filters?.showDirect === false && entry.isDirect) || (filters?.showReblogs === false && entry.isReblog) || + (filters?.showSelfReblogs === false && + entry.isReblog && + entry.rebloggedBy.length === 1 && + entry.rebloggedBy[0] === entry.accountId) || (filters?.showReplies === false && entry.isReply) || (filters?.showQuotes === false && entry.isQuote) || (filters?.showNonMedia === false && !entry.hasMedia);