diff --git a/src/providers/FavoriteRelaysProvider.tsx b/src/providers/FavoriteRelaysProvider.tsx index cfada827..2b56db30 100644 --- a/src/providers/FavoriteRelaysProvider.tsx +++ b/src/providers/FavoriteRelaysProvider.tsx @@ -81,48 +81,36 @@ 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] + 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': relaySetIds + } + ) + const relaySetEventMap = new Map() + newRelaySetEvents.forEach((event) => { + const d = getReplaceableEventIdentifier(event) + if (!d) return + + const old = relaySetEventMap.get(d) + if (!old || old.created_at < event.created_at) { + relaySetEventMap.set(d, event) + } }) - if (nonExistingRelaySetIds.length) { - const newRelaySetEvents = await client.fetchEvents( - (relayList?.write ?? []).concat(BIG_RELAY_URLS).slice(0, 5), - { - kinds: [kinds.Relaysets], - authors: [pubkey], - '#d': nonExistingRelaySetIds - } - ) - const relaySetEventMap = new Map() - newRelaySetEvents.forEach((event) => { - const d = getReplaceableEventIdentifier(event) - if (!d) return - - const old = relaySetEventMap.get(d) - if (!old || old.created_at < event.created_at) { - relaySetEventMap.set(d, event) - } + const uniqueNewRelaySetEvents = Array.from(relaySetEventMap.values()) + setRelaySetEvents(uniqueNewRelaySetEvents) + await Promise.all( + uniqueNewRelaySetEvents.map((event) => { + return indexedDb.putReplaceableEvent(event) }) - await Promise.all( - Array.from(relaySetEventMap.values()).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]) diff --git a/src/services/indexed-db.service.ts b/src/services/indexed-db.service.ts index 9768351f..7117c291 100644 --- a/src/services/indexed-db.service.ts +++ b/src/services/indexed-db.service.ts @@ -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),