Browse Source

fix: bug of lost followers

imwald
codytseng 1 year ago
parent
commit
5e3fd93a23
  1. 5
      src/providers/FollowListProvider.tsx
  2. 6
      src/providers/MuteListProvider.tsx
  3. 14
      src/providers/NostrProvider/index.tsx
  4. 6
      src/services/indexed-db.service.ts

5
src/providers/FollowListProvider.tsx

@ -58,9 +58,8 @@ export function FollowListProvider({ children }: { children: React.ReactNode }) @@ -58,9 +58,8 @@ export function FollowListProvider({ children }: { children: React.ReactNode })
}, [accountPubkey])
const updateFollowListEvent = async (event: Event) => {
const isNew = await indexedDb.putReplaceableEvent(event)
if (!isNew) return
setFollowListEvent(event)
const newEvent = await indexedDb.putReplaceableEvent(event)
setFollowListEvent(newEvent)
}
const follow = async (pubkey: string) => {

6
src/providers/MuteListProvider.tsx

@ -47,9 +47,9 @@ export function MuteListProvider({ children }: { children: React.ReactNode }) { @@ -47,9 +47,9 @@ export function MuteListProvider({ children }: { children: React.ReactNode }) {
})
const muteEvent = getLatestEvent(events) as Event | undefined
if (muteEvent) {
await indexedDb.putReplaceableEvent(muteEvent)
setMuteListEvent(muteEvent)
const tags = await extractMuteTags(muteEvent)
const newMuteEvent = await indexedDb.putReplaceableEvent(muteEvent)
setMuteListEvent(newMuteEvent)
const tags = await extractMuteTags(newMuteEvent)
setTags(tags)
}
}

14
src/providers/NostrProvider/index.tsx

@ -403,17 +403,15 @@ export function NostrProvider({ children }: { children: React.ReactNode }) { @@ -403,17 +403,15 @@ export function NostrProvider({ children }: { children: React.ReactNode }) {
}
const updateRelayListEvent = async (relayListEvent: Event) => {
const isNew = await indexedDb.putReplaceableEvent(relayListEvent)
if (!isNew) return
setRelayList(getRelayListFromRelayListEvent(relayListEvent))
const newRelayList = await indexedDb.putReplaceableEvent(relayListEvent)
setRelayList(getRelayListFromRelayListEvent(newRelayList))
}
const updateProfileEvent = async (profileEvent: Event) => {
const isNew = await indexedDb.putReplaceableEvent(profileEvent)
if (!isNew) return
setProfileEvent(profileEvent)
setProfile(getProfileFromProfileEvent(profileEvent))
client.updateProfileCache(profileEvent)
const newProfileEvent = await indexedDb.putReplaceableEvent(profileEvent)
setProfileEvent(newProfileEvent)
setProfile(getProfileFromProfileEvent(newProfileEvent))
client.updateProfileCache(newProfileEvent)
}
return (

6
src/services/indexed-db.service.ts

@ -70,7 +70,7 @@ class IndexedDbService { @@ -70,7 +70,7 @@ class IndexedDbService {
return this.initPromise
}
async putReplaceableEvent(event: Event): Promise<boolean> {
async putReplaceableEvent(event: Event): Promise<Event> {
const storeName = this.getStoreNameByKind(event.kind)
if (!storeName) {
return Promise.reject('store name not found')
@ -87,11 +87,11 @@ class IndexedDbService { @@ -87,11 +87,11 @@ class IndexedDbService {
getRequest.onsuccess = () => {
const oldValue = getRequest.result as TValue<Event> | undefined
if (oldValue && oldValue.value.created_at >= event.created_at) {
return resolve(false)
return resolve(oldValue.value)
}
const putRequest = store.put(this.formatValue(event.pubkey, event))
putRequest.onsuccess = () => {
resolve(true)
resolve(event)
}
putRequest.onerror = (event) => {

Loading…
Cancel
Save