fix: untimely relay sets synchronization

This commit is contained in:
codytseng
2025-04-05 22:47:16 +08:00
parent 2b9de01905
commit 328477a1f3
2 changed files with 27 additions and 42 deletions

View File

@@ -81,19 +81,17 @@ export function FavoriteRelaysProvider({ children }: { children: React.ReactNode
setFavoriteRelays(relays)
if (!pubkey) return
const relaySetEvents = await Promise.all(
const storedRelaySetEvents = await Promise.all(
relaySetIds.map((id) => indexedDb.getReplaceableEvent(pubkey, kinds.Relaysets, id))
)
const nonExistingRelaySetIds = relaySetIds.filter((_, index) => {
return !relaySetEvents[index]
})
if (nonExistingRelaySetIds.length) {
setRelaySetEvents(storedRelaySetEvents.filter(Boolean) as Event[])
const newRelaySetEvents = await client.fetchEvents(
(relayList?.write ?? []).concat(BIG_RELAY_URLS).slice(0, 5),
{
kinds: [kinds.Relaysets],
authors: [pubkey],
'#d': nonExistingRelaySetIds
'#d': relaySetIds
}
)
const relaySetEventMap = new Map<string, Event>()
@@ -106,23 +104,13 @@ export function FavoriteRelaysProvider({ children }: { children: React.ReactNode
relaySetEventMap.set(d, event)
}
})
const uniqueNewRelaySetEvents = Array.from(relaySetEventMap.values())
setRelaySetEvents(uniqueNewRelaySetEvents)
await Promise.all(
Array.from(relaySetEventMap.values()).map((event) => {
uniqueNewRelaySetEvents.map((event) => {
return indexedDb.putReplaceableEvent(event)
})
)
nonExistingRelaySetIds.forEach((id) => {
const event = relaySetEventMap.get(id)
if (event) {
const index = relaySetIds.indexOf(id)
if (index !== -1) {
relaySetEvents[index] = event
}
}
})
}
setRelaySetEvents(relaySetEvents.filter(Boolean) as Event[])
}
init()
}, [favoriteRelaysEvent])

View File

@@ -360,10 +360,7 @@ class IndexedDbService {
{
name: StoreNames.FOLLOW_LIST_EVENTS,
expirationTimestamp: Date.now() - 1000 * 60 * 60 * 24
}, // 1 day
{ name: StoreNames.RELAY_INFO_EVENTS, expirationTimestamp: -1 },
{ name: StoreNames.MUTE_LIST_EVENTS, expirationTimestamp: -1 },
{ name: StoreNames.MUTE_DECRYPTED_TAGS, expirationTimestamp: -1 }
} // 1 day
]
const transaction = this.db!.transaction(
stores.map((store) => store.name),