From 00c1386b9d30d77adabb7fcb099a7f11a23ac727 Mon Sep 17 00:00:00 2001 From: Thibaut Girka Date: Sun, 8 Jul 2018 20:13:00 +0200 Subject: [Glitch] Fix filters not affecting notifications in web UI Port cfeb3beb4e1c3a05392546e6e4584de537049989 to glitch-soc --- app/javascript/flavours/glitch/actions/notifications.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'app/javascript/flavours/glitch/actions') diff --git a/app/javascript/flavours/glitch/actions/notifications.js b/app/javascript/flavours/glitch/actions/notifications.js index 68c46a732..e88eda78f 100644 --- a/app/javascript/flavours/glitch/actions/notifications.js +++ b/app/javascript/flavours/glitch/actions/notifications.js @@ -3,6 +3,7 @@ import IntlMessageFormat from 'intl-messageformat'; import { fetchRelationships } from './accounts'; import { defineMessages } from 'react-intl'; import { unescapeHTML } from 'flavours/glitch/util/html'; +import { getFilters, regexFromFilters } from 'flavours/glitch/selectors'; export const NOTIFICATIONS_UPDATE = 'NOTIFICATIONS_UPDATE'; @@ -40,19 +41,29 @@ export function updateNotifications(notification, intlMessages, intlLocale) { return (dispatch, getState) => { const showAlert = getState().getIn(['settings', 'notifications', 'alerts', notification.type], true); const playSound = getState().getIn(['settings', 'notifications', 'sounds', notification.type], true); + const filters = getFilters(getState(), { contextType: 'notifications' }); + + let filtered = false; + + if (notification.type === 'mention') { + const regex = regexFromFilters(filters); + const searchIndex = notification.status.spoiler_text + '\n' + unescapeHTML(notification.status.content); + + filtered = regex && regex.test(searchIndex); + } dispatch({ type: NOTIFICATIONS_UPDATE, notification, account: notification.account, status: notification.status, - meta: playSound ? { sound: 'boop' } : undefined, + meta: (playSound && !filtered) ? { sound: 'boop' } : undefined, }); fetchRelatedRelationships(dispatch, [notification]); // Desktop notifications - if (typeof window.Notification !== 'undefined' && showAlert) { + if (typeof window.Notification !== 'undefined' && showAlert && !filtered) { const title = new IntlMessageFormat(intlMessages[`notification.${notification.type}`], intlLocale).format({ name: notification.account.display_name.length > 0 ? notification.account.display_name : notification.account.username }); const body = (notification.status && notification.status.spoiler_text.length > 0) ? notification.status.spoiler_text : unescapeHTML(notification.status ? notification.status.content : ''); -- cgit