diff --git a/README.md b/README.md index 2f231338..626c9e83 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,15 @@ If you like Coracle and want to support its development, you can donate sats via ## 0.2.6 -- [x] Add support for at-mentions +- [x] Add support for at-mentions in note and reply composition - [x] Improve cleanup on logout - [x] Move add note button to be available everywhere - [x] Fix reporting relay along with tags - [x] Add support for bech32 keys - [x] Add second order follows to network tab - [x] Add favicon and social media preview image +- [x] Extract urls in person bios +- [x] Add follow/follower counts ## 0.2.5 diff --git a/src/relay/pool.js b/src/relay/pool.js index 2e0f5c61..b87737e5 100644 --- a/src/relay/pool.js +++ b/src/relay/pool.js @@ -166,13 +166,15 @@ const loadEvents = async filter => { return events } -const listenForEvents = async (key, filter, onEvent) => { +const listenForEvents = async (key, filter, onEvent, {shouldProcess = true} = {}) => { if (listenForEvents.subs[key]) { listenForEvents.subs[key].unsub() } listenForEvents.subs[key] = await sub(filter, e => { - db.events.process(e) + if (shouldProcess) { + db.events.process(e) + } if (onEvent) { onEvent(e) diff --git a/src/routes/Person.svelte b/src/routes/Person.svelte index 154d32a4..03af44b6 100644 --- a/src/routes/Person.svelte +++ b/src/routes/Person.svelte @@ -17,29 +17,45 @@ export let pubkey export let activeTab - let sub = null + let subs = [] let following = $user && find(t => t[1] === pubkey, $user.petnames) + let followers = new Set() + let followersCount = 0 + let person + + $: { + person = $people[pubkey] || {pubkey} + } onMount(async () => { - sub = await relay.pool.listenForEvents( + subs.push(await relay.pool.listenForEvents( 'routes/Person', - [{kinds: [0, 1, 5, 7], authors: [pubkey], since: now()}], - when(propEq('kind', 1), relay.loadNotesContext) - ) + [{kinds: [1, 5, 7], authors: [pubkey], since: now()}, + {kinds: [0, 3, 12165], authors: [pubkey]}], + when(propEq('kind', 1), relay.loadNoteContext) + )) + + subs.push(await relay.pool.listenForEvents( + 'routes/Person/followers', + [{kinds: [3], '#p': [pubkey]}], + e => { + followers.add(e.pubkey) + followersCount = followers.size + }, + {shouldProcess: false}, + )) }) onDestroy(() => { - if (sub) { + for (const sub of subs) { sub.unsub() } }) - const getPerson = () => $people[pubkey] || {pubkey} - const setActiveTab = tab => navigate(`/people/${pubkey}/${tab}`) const follow = () => { - relay.cmd.addPetname($user, pubkey, getPerson().name) + relay.cmd.addPetname($user, pubkey, person.name) following = true } @@ -51,7 +67,7 @@ } const openAdvanced = () => { - modal.set({form: 'person/settings', person: getPerson()}) + modal.set({form: 'person/settings', person}) } @@ -60,15 +76,15 @@
{@html renderContent(getPerson().about || '')}
+{@html renderContent(person.about || '')}