fix: untimely relay sets synchronization
This commit is contained in:
@@ -81,19 +81,17 @@ export function FavoriteRelaysProvider({ children }: { children: React.ReactNode
|
|||||||
setFavoriteRelays(relays)
|
setFavoriteRelays(relays)
|
||||||
|
|
||||||
if (!pubkey) return
|
if (!pubkey) return
|
||||||
const relaySetEvents = await Promise.all(
|
const storedRelaySetEvents = await Promise.all(
|
||||||
relaySetIds.map((id) => indexedDb.getReplaceableEvent(pubkey, kinds.Relaysets, id))
|
relaySetIds.map((id) => indexedDb.getReplaceableEvent(pubkey, kinds.Relaysets, id))
|
||||||
)
|
)
|
||||||
const nonExistingRelaySetIds = relaySetIds.filter((_, index) => {
|
setRelaySetEvents(storedRelaySetEvents.filter(Boolean) as Event[])
|
||||||
return !relaySetEvents[index]
|
|
||||||
})
|
|
||||||
if (nonExistingRelaySetIds.length) {
|
|
||||||
const newRelaySetEvents = await client.fetchEvents(
|
const newRelaySetEvents = await client.fetchEvents(
|
||||||
(relayList?.write ?? []).concat(BIG_RELAY_URLS).slice(0, 5),
|
(relayList?.write ?? []).concat(BIG_RELAY_URLS).slice(0, 5),
|
||||||
{
|
{
|
||||||
kinds: [kinds.Relaysets],
|
kinds: [kinds.Relaysets],
|
||||||
authors: [pubkey],
|
authors: [pubkey],
|
||||||
'#d': nonExistingRelaySetIds
|
'#d': relaySetIds
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
const relaySetEventMap = new Map<string, Event>()
|
const relaySetEventMap = new Map<string, Event>()
|
||||||
@@ -106,23 +104,13 @@ export function FavoriteRelaysProvider({ children }: { children: React.ReactNode
|
|||||||
relaySetEventMap.set(d, event)
|
relaySetEventMap.set(d, event)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
const uniqueNewRelaySetEvents = Array.from(relaySetEventMap.values())
|
||||||
|
setRelaySetEvents(uniqueNewRelaySetEvents)
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
Array.from(relaySetEventMap.values()).map((event) => {
|
uniqueNewRelaySetEvents.map((event) => {
|
||||||
return indexedDb.putReplaceableEvent(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()
|
init()
|
||||||
}, [favoriteRelaysEvent])
|
}, [favoriteRelaysEvent])
|
||||||
|
|||||||
@@ -360,10 +360,7 @@ class IndexedDbService {
|
|||||||
{
|
{
|
||||||
name: StoreNames.FOLLOW_LIST_EVENTS,
|
name: StoreNames.FOLLOW_LIST_EVENTS,
|
||||||
expirationTimestamp: Date.now() - 1000 * 60 * 60 * 24
|
expirationTimestamp: Date.now() - 1000 * 60 * 60 * 24
|
||||||
}, // 1 day
|
} // 1 day
|
||||||
{ name: StoreNames.RELAY_INFO_EVENTS, expirationTimestamp: -1 },
|
|
||||||
{ name: StoreNames.MUTE_LIST_EVENTS, expirationTimestamp: -1 },
|
|
||||||
{ name: StoreNames.MUTE_DECRYPTED_TAGS, expirationTimestamp: -1 }
|
|
||||||
]
|
]
|
||||||
const transaction = this.db!.transaction(
|
const transaction = this.db!.transaction(
|
||||||
stores.map((store) => store.name),
|
stores.map((store) => store.name),
|
||||||
|
|||||||
Reference in New Issue
Block a user