init to refresh messages

This commit is contained in:
padreug 2025-02-11 14:59:27 +01:00
parent 231658b980
commit c7aa88bec6

View file

@ -99,6 +99,12 @@ export const useNostrStore = defineStore('nostr', () => {
} }
}, { deep: true }) }, { deep: true })
// Initialize store if account exists in localStorage
if (account.value) {
console.log('Found existing account, initializing connection...')
init()
}
// Computed // Computed
const isLoggedIn = computed(() => !!account.value) const isLoggedIn = computed(() => !!account.value)
const currentMessages = computed(() => const currentMessages = computed(() =>
@ -252,72 +258,98 @@ export const useNostrStore = defineStore('nostr', () => {
since: 0 // Get all historical messages since: 0 // Get all historical messages
} }
relayPool.value.forEach(relay => { const subscribeToRelay = (relay: any) => {
// Subscribe to received messages return new Promise((resolve) => {
const receivedSub = relay.sub([receivedFilter]) let receivedCount = 0
let sentCount = 0
receivedSub.on('event', async (event: NostrEvent) => { let eoseCount = 0
try {
// Skip if we've already processed this message // Subscribe to received messages
if (processedMessageIds.value.has(event.id)) { const receivedSub = relay.sub([receivedFilter])
return
receivedSub.on('event', async (event: NostrEvent) => {
try {
// Skip if we've already processed this message
if (processedMessageIds.value.has(event.id)) {
return
}
receivedCount++
const decrypted = await window.NostrTools.nip04.decrypt(
account.value!.privkey,
event.pubkey,
event.content
)
const dm: DirectMessage = {
id: event.id,
pubkey: event.pubkey,
content: decrypted,
created_at: event.created_at,
sent: false
}
await addMessage(event.pubkey, dm)
// Load profile if not already loaded
if (!profiles.value.has(event.pubkey)) {
await loadProfiles()
}
} catch (err) {
console.error('Failed to decrypt received message:', err)
} }
})
const decrypted = await window.NostrTools.nip04.decrypt( // Subscribe to sent messages
account.value!.privkey, const sentSub = relay.sub([sentFilter])
event.pubkey,
event.content sentSub.on('event', async (event: NostrEvent) => {
) try {
// Skip if we've already processed this message
if (processedMessageIds.value.has(event.id)) {
return
}
const dm: DirectMessage = { sentCount++
id: event.id, const decrypted = await window.NostrTools.nip04.decrypt(
pubkey: event.pubkey, account.value!.privkey,
content: decrypted, SUPPORT_NPUB,
created_at: event.created_at, event.content
sent: false )
const dm: DirectMessage = {
id: event.id,
pubkey: SUPPORT_NPUB,
content: decrypted,
created_at: event.created_at,
sent: true
}
await addMessage(SUPPORT_NPUB, dm)
} catch (err) {
console.error('Failed to decrypt sent message:', err)
} }
})
await addMessage(event.pubkey, dm) // Listen for end of stored events
receivedSub.on('eose', () => {
// Load profile if not already loaded eoseCount++
if (!profiles.value.has(event.pubkey)) { if (eoseCount >= 2) { // Both subscriptions have finished
await loadProfiles() resolve(true)
} }
} catch (err) { })
console.error('Failed to decrypt received message:', err)
} sentSub.on('eose', () => {
eoseCount++
if (eoseCount >= 2) { // Both subscriptions have finished
resolve(true)
}
})
}) })
}
// Subscribe to sent messages // Wait for all relays to load their historical messages
const sentSub = relay.sub([sentFilter]) await Promise.all(relayPool.value.map(relay => subscribeToRelay(relay)))
sentSub.on('event', async (event: NostrEvent) => {
try {
// Skip if we've already processed this message
if (processedMessageIds.value.has(event.id)) {
return
}
const decrypted = await window.NostrTools.nip04.decrypt(
account.value!.privkey,
SUPPORT_NPUB,
event.content
)
const dm: DirectMessage = {
id: event.id,
pubkey: SUPPORT_NPUB,
content: decrypted,
created_at: event.created_at,
sent: true
}
await addMessage(SUPPORT_NPUB, dm)
} catch (err) {
console.error('Failed to decrypt sent message:', err)
}
})
})
} }
return { return {