about summary refs log tree commit diff
path: root/src/state/queries/messages
diff options
context:
space:
mode:
authorSamuel Newman <mozzius@protonmail.com>2024-05-17 20:46:01 +0100
committerGitHub <noreply@github.com>2024-05-17 14:46:01 -0500
commitf42f7fa0353a45c6b20e65e1a54b64e1c28b0cd5 (patch)
tree1e1e417dc0985b1d03e6a2a482fafd904539305d /src/state/queries/messages
parentdd0f57e3e3188389bc8ef364e81e4a00405a9a26 (diff)
downloadvoidsky-f42f7fa0353a45c6b20e65e1a54b64e1c28b0cd5.tar.zst
[🐴] don't include blocked convos in unread count (#4082)
* don't include blocked convos in unread count

* Use moderateProfile

* Handle blocked state in chat list

* Fix logic formatting, add todo

---------

Co-authored-by: Eric Bailey <git@esb.lol>
Diffstat (limited to 'src/state/queries/messages')
-rw-r--r--src/state/queries/messages/list-converations.ts24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/state/queries/messages/list-converations.ts b/src/state/queries/messages/list-converations.ts
index 4b4d50c49..3939ab8e3 100644
--- a/src/state/queries/messages/list-converations.ts
+++ b/src/state/queries/messages/list-converations.ts
@@ -1,5 +1,9 @@
 import {useCallback, useMemo} from 'react'
-import {ChatBskyConvoDefs, ChatBskyConvoListConvos} from '@atproto/api'
+import {
+  ChatBskyConvoDefs,
+  ChatBskyConvoListConvos,
+  moderateProfile,
+} from '@atproto/api'
 import {
   InfiniteData,
   QueryClient,
@@ -8,8 +12,9 @@ import {
 } from '@tanstack/react-query'
 
 import {useCurrentConvoId} from '#/state/messages/current-convo-id'
+import {useModerationOpts} from '#/state/preferences/moderation-opts'
 import {DM_SERVICE_HEADERS} from '#/state/queries/messages/const'
-import {useAgent} from '#/state/session'
+import {useAgent, useSession} from '#/state/session'
 import {decrementBadgeCount} from 'lib/notifications/notifications'
 
 export const RQKEY = ['convo-list']
@@ -36,16 +41,29 @@ export function useListConvos({refetchInterval}: {refetchInterval: number}) {
 
 export function useUnreadMessageCount() {
   const {currentConvoId} = useCurrentConvoId()
+  const {currentAccount} = useSession()
   const convos = useListConvos({
     refetchInterval: 30_000,
   })
+  const moderationOpts = useModerationOpts()
 
   const count =
     convos.data?.pages
       .flatMap(page => page.convos)
       .filter(convo => convo.id !== currentConvoId)
       .reduce((acc, convo) => {
-        return acc + (!convo.muted && convo.unreadCount > 0 ? 1 : 0)
+        const otherMember = convo.members.find(
+          member => member.did !== currentAccount?.did,
+        )
+
+        if (!otherMember || !moderationOpts) return acc
+
+        // TODO could shadow this outside this hook and get optimistic block state
+        const moderation = moderateProfile(otherMember, moderationOpts)
+        const shouldIgnore = convo.muted || moderation.blocked
+        const unreadCount = !shouldIgnore && convo.unreadCount > 0 ? 1 : 0
+
+        return acc + unreadCount
       }, 0) ?? 0
 
   return useMemo(() => {