From e04a488ea459b36b44c776ea02eb37cc772a4186 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Tue, 5 Oct 2021 17:39:38 -0500 Subject: [PATCH] Pleroma: mark notifications read in case Markers don't work --- app/soapbox/actions/notifications.js | 15 +++++++++++++++ app/soapbox/utils/features.js | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/soapbox/actions/notifications.js b/app/soapbox/actions/notifications.js index 0c8f8ab83..9e569625c 100644 --- a/app/soapbox/actions/notifications.js +++ b/app/soapbox/actions/notifications.js @@ -19,6 +19,7 @@ import { import { unescapeHTML } from '../utils/html'; import { getFilters, regexFromFilters } from '../selectors'; import { isLoggedIn } from 'soapbox/utils/auth'; +import { parseVersion, PLEROMA } from 'soapbox/utils/features'; export const NOTIFICATIONS_UPDATE = 'NOTIFICATIONS_UPDATE'; export const NOTIFICATIONS_UPDATE_NOOP = 'NOTIFICATIONS_UPDATE_NOOP'; @@ -284,13 +285,23 @@ export function setFilter(filterType) { }; } +// Of course Markers don't work properly in Pleroma. +// https://git.pleroma.social/pleroma/pleroma/-/issues/2769 +export function markReadPleroma(max_id) { + return (dispatch, getState) => { + return api(getState).post('/api/v1/pleroma/notifications/read', { max_id }); + }; +} + export function markReadNotifications() { return (dispatch, getState) => { if (!isLoggedIn(getState)) return; const state = getState(); + const instance = state.get('instance'); const topNotificationId = state.getIn(['notifications', 'items'], ImmutableOrderedMap()).first(ImmutableMap()).get('id'); const lastReadId = state.getIn(['notifications', 'lastRead']); + const v = parseVersion(instance.get('version')); if (!(topNotificationId && topNotificationId > lastReadId)) return; @@ -301,5 +312,9 @@ export function markReadNotifications() { }; dispatch(saveMarker(marker)); + + if (v.software === PLEROMA) { + dispatch(markReadPleroma(topNotificationId)); + } }; } diff --git a/app/soapbox/utils/features.js b/app/soapbox/utils/features.js index a8a2ec7cd..f81a87d65 100644 --- a/app/soapbox/utils/features.js +++ b/app/soapbox/utils/features.js @@ -7,8 +7,8 @@ import { createSelector } from 'reselect'; const any = arr => arr.some(Boolean); // For uglification -const MASTODON = 'Mastodon'; -const PLEROMA = 'Pleroma'; +export const MASTODON = 'Mastodon'; +export const PLEROMA = 'Pleroma'; export const getFeatures = createSelector([ instance => parseVersion(instance.get('version')),