diff --git a/src/app/notifications.ts b/src/app/notifications.ts index 7ebd300..1f04379 100644 --- a/src/app/notifications.ts +++ b/src/app/notifications.ts @@ -1,6 +1,6 @@ import {derived} from "svelte/store" import {synced, localStorageProvider, throttled} from "@welshman/store" -import {pubkey} from "@welshman/app" +import {pubkey, relaysByUrl} from "@welshman/app" import {prop, spec, identity, now, groupBy} from "@welshman/lib" import type {TrustedEvent} from "@welshman/util" import {EVENT_TIME, MESSAGE, THREAD, COMMENT, getTagValue} from "@welshman/util" @@ -12,7 +12,7 @@ import { makeSpaceChatPath, makeRoomPath, } from "@app/routes" -import {chats, getUrlsForEvent, userRoomsByUrl, repositoryStore} from "@app/state" +import {chats, hasNip29, getUrlsForEvent, userRoomsByUrl, repositoryStore} from "@app/state" // Checked state @@ -31,9 +31,12 @@ export const setChecked = (key: string) => checked.update(state => ({...state, [ export const notifications = derived( throttled( 1000, - derived([pubkey, checked, chats, userRoomsByUrl, repositoryStore, getUrlsForEvent], identity), + derived( + [pubkey, checked, chats, userRoomsByUrl, repositoryStore, getUrlsForEvent, relaysByUrl], + identity, + ), ), - ([$pubkey, $checked, $chats, $userRoomsByUrl, $repository, $getUrlsForEvent]) => { + ([$pubkey, $checked, $chats, $userRoomsByUrl, $repository, $getUrlsForEvent, $relaysByUrl]) => { const hasNotification = (path: string, latestEvent: TrustedEvent | undefined) => { if (!latestEvent || latestEvent.pubkey === $pubkey) { return false @@ -95,11 +98,6 @@ export const notifications = derived( paths.add(calendarPath) } - if (hasNotification(messagesPath, messagesEvents[0])) { - paths.add(spacePath) - paths.add(messagesPath) - } - const commentsByThreadId = groupBy( e => getTagValue("E", e.tags), threadEvents.filter(spec({kind: COMMENT})), @@ -126,16 +124,24 @@ export const notifications = derived( } } - for (const room of rooms) { - const roomPath = makeRoomPath(url, room) - const latestEvent = allMessageEvents.find( - e => - $getUrlsForEvent(e.id).includes(url) && e.tags.find(t => t[0] === "h" && t[1] === room), - ) + if (hasNip29($relaysByUrl.get(url))) { + for (const room of rooms) { + const roomPath = makeRoomPath(url, room) + const latestEvent = allMessageEvents.find( + e => + $getUrlsForEvent(e.id).includes(url) && + e.tags.find(t => t[0] === "h" && t[1] === room), + ) - if (hasNotification(roomPath, latestEvent)) { + if (hasNotification(roomPath, latestEvent)) { + paths.add(spacePath) + paths.add(roomPath) + } + } + } else { + if (hasNotification(messagesPath, messagesEvents[0])) { paths.add(spacePath) - paths.add(roomPath) + paths.add(messagesPath) } } }