fix: deleted rooms persisting in navigation
This commit is contained in:
@@ -122,6 +122,7 @@
|
||||
repository.removeEvent(thunk.event.id)
|
||||
pushToast({theme: "error", message})
|
||||
} else {
|
||||
await removeRoomMembership(url, h)
|
||||
goto(makeSpacePath(url))
|
||||
}
|
||||
},
|
||||
|
||||
+24
-5
@@ -5,7 +5,7 @@ import {derived, readable, writable} from "svelte/store"
|
||||
import * as nip19 from "nostr-tools/nip19"
|
||||
import {
|
||||
on,
|
||||
gt,
|
||||
gte,
|
||||
max,
|
||||
spec,
|
||||
call,
|
||||
@@ -596,6 +596,9 @@ export const splitRoomId = (id: string) => id.split("'")
|
||||
export const hasNip29 = (relay?: RelayProfile) =>
|
||||
Boolean(relay?.supported_nips?.map?.(String)?.includes?.("29"))
|
||||
|
||||
const getRoomDeleteId = (event: TrustedEvent) =>
|
||||
getTagValue("h", event.tags) || getTagValue("d", event.tags)
|
||||
|
||||
export const roomMetaEventsByIdByUrl = deriveEventsByIdByUrl({
|
||||
tracker,
|
||||
repository,
|
||||
@@ -605,12 +608,25 @@ export const roomMetaEventsByIdByUrl = deriveEventsByIdByUrl({
|
||||
export const roomsByUrl = derived(roomMetaEventsByIdByUrl, roomMetaEventsByIdByUrl => {
|
||||
const result = new Map<string, Room[]>()
|
||||
|
||||
// Build a global set of deleted rooms from the repository directly so that
|
||||
// deletes are visible even before the tracker has mapped them to a URL.
|
||||
const deletedByH = new Map<string, number>()
|
||||
|
||||
for (const event of repository.query([{kinds: [ROOM_DELETE]}])) {
|
||||
const h = getRoomDeleteId(event)
|
||||
|
||||
if (h) {
|
||||
deletedByH.set(h, max([deletedByH.get(h), event.created_at]))
|
||||
}
|
||||
}
|
||||
|
||||
for (const [url, events] of roomMetaEventsByIdByUrl.entries()) {
|
||||
const [metaEvents, deleteEvents] = partition(spec({kind: ROOM_META}), events.values())
|
||||
const deletedByH = new Map<string, number>()
|
||||
|
||||
for (const event of deleteEvents) {
|
||||
for (const h of getTagValues("h", event.tags)) {
|
||||
const h = getRoomDeleteId(event)
|
||||
|
||||
if (h) {
|
||||
deletedByH.set(h, max([deletedByH.get(h), event.created_at]))
|
||||
}
|
||||
}
|
||||
@@ -620,7 +636,7 @@ export const roomsByUrl = derived(roomMetaEventsByIdByUrl, roomMetaEventsByIdByU
|
||||
for (const event of metaEvents) {
|
||||
const meta = tryCatch(() => readRoomMeta(event))
|
||||
|
||||
if (!meta || gt(deletedByH.get(meta.h), meta.event.created_at)) {
|
||||
if (!meta || gte(deletedByH.get(meta.h), meta.event.created_at)) {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -651,7 +667,10 @@ export const loadRoom = call(() => {
|
||||
|
||||
await load({
|
||||
relays: [url],
|
||||
filters: [{kinds: [ROOM_META], "#d": [h]}],
|
||||
filters: [
|
||||
{kinds: [ROOM_META], "#d": [h]},
|
||||
{kinds: [ROOM_DELETE], "#h": [h]},
|
||||
],
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user