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 @@
+ style="background-image: url({person.picture})" />
-

{displayPerson(getPerson())}

+

{displayPerson(person)}

{#if $user && $user.pubkey !== pubkey} {/if}
-

{@html renderContent(getPerson().about || '')}

+

{@html renderContent(person.about || '')}

{#if $user?.pubkey === pubkey} @@ -87,6 +103,10 @@
+
+
{person?.petnames?.length} following
+
{followersCount} followers
+
@@ -95,8 +115,8 @@ {:else if activeTab === 'likes'} {:else if activeTab === 'network'} -{#if $people[pubkey]} - +{#if person} + {:else}
Unable to show network for this person. diff --git a/src/views/person/Likes.svelte b/src/views/person/Likes.svelte index 4cb09a22..5e6e8680 100644 --- a/src/views/person/Likes.svelte +++ b/src/views/person/Likes.svelte @@ -12,7 +12,7 @@ const [since, until] = cursor.step() const filter = {kinds: [7], authors: [pubkey], since, until} - await relay.loadEventsContext( + await relay.loadNotesContext( await relay.pool.loadEvents(filter), {loadParents: true} ) diff --git a/src/views/person/Network.svelte b/src/views/person/Network.svelte index d3136e58..8c0bdaa1 100644 --- a/src/views/person/Network.svelte +++ b/src/views/person/Network.svelte @@ -13,7 +13,7 @@ const authors = getTagValues(person.petnames) const filter = {since, until, kinds: [1], authors} - await relay.loadEventsContext( + await relay.loadNotesContext( await relay.pool.loadEvents(filter), {loadParents: true} ) diff --git a/src/views/person/Notes.svelte b/src/views/person/Notes.svelte index a22da9ba..f25420f1 100644 --- a/src/views/person/Notes.svelte +++ b/src/views/person/Notes.svelte @@ -5,7 +5,7 @@ export let pubkey - const cursor = new Cursor(timedelta(3, 'days')) + const cursor = new Cursor(timedelta(1, 'days')) const loadNotes = async () => { const [since, until] = cursor.step()