From e7890c015348bc17660cce10e6ec56c09a5182ba Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 27 Aug 2025 16:53:54 +0200 Subject: [PATCH] [Glitch] Fix streaming and handling of `quoted_update` notifications Port a6a0d982ef7ecb1209f9feadf129923cd3562a04 to glitch-soc Signed-off-by: Claire --- .../glitch/actions/notification_groups.ts | 22 ++++++++++++++----- .../flavours/glitch/actions/notifications.js | 2 +- .../glitch/api_types/notifications.ts | 2 +- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/notification_groups.ts b/app/javascript/flavours/glitch/actions/notification_groups.ts index ea4f7e3d5d..b145898494 100644 --- a/app/javascript/flavours/glitch/actions/notification_groups.ts +++ b/app/javascript/flavours/glitch/actions/notification_groups.ts @@ -30,9 +30,20 @@ import { importFetchedAccounts, importFetchedStatuses } from './importer'; import { NOTIFICATIONS_FILTER_SET } from './notifications'; import { saveSettings } from './settings'; +function notificationTypeForFilter(type: NotificationType) { + if (type === 'quoted_update') return 'update'; + else return type; +} + +function notificationTypeForQuickFilter(type: NotificationType) { + if (type === 'quoted_update') return 'update'; + else if (type === 'quote') return 'mention'; + else return type; +} + function excludeAllTypesExcept(filter: string) { return allNotificationTypes.filter( - (item) => item !== filter && !(item === 'quote' && filter === 'mention'), + (item) => notificationTypeForQuickFilter(item) !== filter, ); } @@ -157,16 +168,17 @@ export const processNewNotificationForGroups = createAppAsyncThunk( const showInColumn = activeFilter === 'all' - ? notificationShows[notification.type] !== false - : activeFilter === notification.type || - (activeFilter === 'mention' && notification.type === 'quote'); + ? notificationShows[notificationTypeForFilter(notification.type)] !== + false + : activeFilter === notificationTypeForQuickFilter(notification.type); if (!showInColumn) return; if ( (notification.type === 'mention' || + notification.type === 'quote' || notification.type === 'update' || - notification.type === 'quote') && + notification.type === 'quoted_update') && notification.status?.filtered ) { const filters = notification.status.filtered.filter((result) => diff --git a/app/javascript/flavours/glitch/actions/notifications.js b/app/javascript/flavours/glitch/actions/notifications.js index cbfddc750f..558390b9cf 100644 --- a/app/javascript/flavours/glitch/actions/notifications.js +++ b/app/javascript/flavours/glitch/actions/notifications.js @@ -31,7 +31,7 @@ export function updateNotifications(notification, intlMessages, intlLocale) { let filtered = false; - if (['mention', 'status', 'quote'].includes(notification.type) && notification.status.filtered) { + if (['mention', 'quote', 'status'].includes(notification.type) && notification.status.filtered) { const filters = notification.status.filtered.filter(result => result.filter.context.includes('notifications')); if (filters.some(result => result.filter.filter_action === 'hide')) { diff --git a/app/javascript/flavours/glitch/api_types/notifications.ts b/app/javascript/flavours/glitch/api_types/notifications.ts index a5cb12d7ca..c4556fa8e5 100644 --- a/app/javascript/flavours/glitch/api_types/notifications.ts +++ b/app/javascript/flavours/glitch/api_types/notifications.ts @@ -7,7 +7,7 @@ import type { ApiReportJSON } from './reports'; import type { ApiStatusJSON } from './statuses'; // See app/model/notification.rb -export const allNotificationTypes = [ +export const allNotificationTypes: NotificationType[] = [ 'follow', 'follow_request', 'favourite',