Browse Source

Improve home feed refresh

master
buttercat1791 2 years ago committed by limina1
parent
commit
b4f5d22c17
  1. 20
      src/lib/ArticleHeader.svelte
  2. 2
      src/lib/Toc.svelte
  3. 6
      src/lib/cards/Editor.svelte
  4. 2
      src/lib/components/Login.svelte
  5. 2
      src/lib/components/Toc.svelte
  6. 4
      src/lib/consts.ts
  7. 8
      src/lib/defaultShareButton.svelte
  8. 4
      src/lib/ndk.ts
  9. 51
      src/routes/+page.svelte

20
src/lib/ArticleHeader.svelte

@ -5,10 +5,20 @@
import { idList } from "$lib/stores"; import { idList } from "$lib/stores";
import { Card, Button, Modal, Tooltip } from "flowbite-svelte"; import { Card, Button, Modal, Tooltip } from "flowbite-svelte";
import { ClipboardCheckOutline, ClipboardCleanOutline, CodeOutline, ShareNodesOutline } from "flowbite-svelte-icons"; import { ClipboardCheckOutline, ClipboardCleanOutline, CodeOutline, ShareNodesOutline } from "flowbite-svelte-icons";
import { ndk } from "./ndk";
export let event: NDKEvent; export let event: NDKEvent;
const title: string = JSON.parse(event.content).title;
const href: string = neventEncode(event); let title: string;
let href: string;
try {
const relays = $ndk.activeUser?.relayUrls ?? standardRelays;
title = JSON.parse(event.content).title;
href = neventEncode(event, relays);
} catch (e) {
console.warn(e);
}
const handleSendEvents = () => { const handleSendEvents = () => {
$idList = []; $idList = [];
@ -50,7 +60,8 @@
} }
</script> </script>
<Card class='ArticleBox card-leather w-lg'> {#if title != null && href != null}
<Card class='ArticleBox card-leather w-lg'>
<div class='flex flex-col space-y-4'> <div class='flex flex-col space-y-4'>
<a href="/{href}" on:click={handleSendEvents}> <a href="/{href}" on:click={handleSendEvents}>
<h2>{title}</h2> <h2>{title}</h2>
@ -79,4 +90,5 @@
<Modal class='modal-leather' title='Event JSON' bind:open={jsonModalOpen} autoclose outsideclose size='sm'> <Modal class='modal-leather' title='Event JSON' bind:open={jsonModalOpen} autoclose outsideclose size='sm'>
<code>{JSON.stringify(event.rawEvent())}</code> <code>{JSON.stringify(event.rawEvent())}</code>
</Modal> </Modal>
</Card> </Card>
{/if}

2
src/lib/Toc.svelte

@ -4,7 +4,7 @@
export let notes: NDKEvent[] = []; export let notes: NDKEvent[] = [];
// check if notes is empty // check if notes is empty
if (notes.length === 0) { if (notes.length === 0) {
console.log('notes is empty'); console.debug('notes is empty');
} }
</script> </script>

6
src/lib/cards/Editor.svelte

@ -47,15 +47,15 @@
let relays = await event.publish(); let relays = await event.publish();
relays.forEach((relay) => { relays.forEach((relay) => {
relay.once('published', () => { relay.once('published', () => {
console.log('published to', relay); console.debug('published to', relay);
}); });
relay.once('publish:failed', (relay, err) => { relay.once('publish:failed', (relay, err) => {
console.log('publish failed to', relay, err); console.debug('publish failed to', relay, err);
}); });
}); });
success = 1; success = 1;
} catch (err) { } catch (err) {
console.log('failed to publish event', err); console.debug('failed to publish event', err);
error = String(err); error = String(err);
success = -1; success = -1;
} }

2
src/lib/components/Login.svelte

@ -16,7 +16,7 @@
await $ndk.connect(); await $ndk.connect();
profile = await user.fetchProfile(); profile = await user.fetchProfile();
console.log('NDK signed in with extension and reconnected.'); console.debug('NDK signed in with extension and reconnected.');
$signedIn = true; $signedIn = true;
}; };

2
src/lib/components/Toc.svelte

@ -2,7 +2,7 @@
import type { NDKEvent } from '@nostr-dev-kit/ndk'; import type { NDKEvent } from '@nostr-dev-kit/ndk';
import {nip19} from 'nostr-tools'; import {nip19} from 'nostr-tools';
export let notes: NDKEvent[] = []; export let notes: NDKEvent[] = [];
console.log(notes); console.debug(notes);
</script> </script>
<div class="toc"> <div class="toc">

4
src/lib/consts.ts

@ -1,2 +1,4 @@
export const wikiKind = 30818; export const wikiKind = 30818;
export const standardRelays = ["wss://nostr.thesamecat.io"]; export const indexKind = 30040;
export const zettelKind = 30041;
export const standardRelays = [ "wss://thecitadel.nostr1.com" ];

8
src/lib/defaultShareButton.svelte

@ -12,21 +12,21 @@
let modal = false; let modal = false;
function copyEventID() { function copyEventID() {
console.log("copyEventID"); console.debug("copyEventID");
const relays: string[] = standardRelays; const relays: string[] = standardRelays;
const naddr = neventEncode(event, relays); const naddr = neventEncode(event, relays);
navigator.clipboard.writeText(naddr); navigator.clipboard.writeText(naddr);
} }
function viewJSON() { function viewJSON() {
console.log("viewJSON"); console.debug("viewJSON");
modal = !modal; modal = !modal;
console.log(modal); console.debug(modal);
} }
function shareNjump() { function shareNjump() {
const relays: string[] = standardRelays; const relays: string[] = standardRelays;
const naddr = neventEncode(event, relays); const naddr = neventEncode(event, relays);
console.log(naddr); console.debug(naddr);
navigator.clipboard.writeText(`njump.me/${naddr}`); navigator.clipboard.writeText(`njump.me/${naddr}`);
} }
</script> </script>

4
src/lib/ndk.ts

@ -1,5 +1,5 @@
import { browser } from '$app/environment'; import { browser } from '$app/environment';
import NDK, { NDKEvent, NDKNip07Signer } from '@nostr-dev-kit/ndk'; import NDK from '@nostr-dev-kit/ndk';
import NDKCacheAdapterDexie from '@nostr-dev-kit/ndk-cache-dexie'; import NDKCacheAdapterDexie from '@nostr-dev-kit/ndk-cache-dexie';
import { writable, type Writable } from 'svelte/store'; import { writable, type Writable } from 'svelte/store';
import { standardRelays } from './consts'; import { standardRelays } from './consts';
@ -23,7 +23,7 @@ export function getNdkInstance() {
enableOutboxModel: true, enableOutboxModel: true,
explicitRelayUrls: relays, explicitRelayUrls: relays,
}); });
ndk.connect().then(() => console.log('ndk connected')); ndk.connect().then(() => console.debug('ndk connected'));
return ndk; return ndk;
} }

51
src/routes/+page.svelte

@ -1,44 +1,53 @@
<script lang="ts"> <script lang="ts">
import ArticleHeader from "$lib/ArticleHeader.svelte"; import ArticleHeader from "$lib/ArticleHeader.svelte";
import { ndk, signedIn } from "$lib/ndk"; import { indexKind } from "$lib/consts";
import { NDKRelaySet, type NDKUser } from "@nostr-dev-kit/ndk"; import { ndk } from "$lib/ndk";
const kind = 30040; import { NDKEvent, NDKRelayList, NDKRelaySet, type NDKUser } from "@nostr-dev-kit/ndk";
const count: number = 10;
async function loadEvents(user?: NDKUser) { const getEvents = (): Promise<Set<NDKEvent>> =>
if (user == null) { $ndk.fetchEvents(
return $ndk.fetchEvents( // @ts-ignore
{ kinds: [kind] }, { kinds: [indexKind] },
{ closeOnEose: true }
); );
}
const relays = await user.relayList(); const getEventsFromUserRelays = (userRelays: NDKRelayList): Promise<Set<NDKEvent>> => {
const relaySet = NDKRelaySet.fromRelayUrls(relays!.readRelayUrls, $ndk); const relaySet = NDKRelaySet.fromRelayUrls(userRelays!.readRelayUrls, $ndk);
// TODO: Add more filter parameters to customize the event feed. // TODO: Add more filter parameters to customize the event feed.
return $ndk.fetchEvents( return $ndk.fetchEvents(
{ authors: [user.pubkey, ], kinds: [kind] }, // @ts-ignore
{ closeOnEose: true }, { kinds: [indexKind] },
relaySet, relaySet,
); );
} };
$: eventList = loadEvents($ndk.activeUser); let user: NDKUser | null | undefined;
let readRelays: NDKRelayList | null | undefined;
signedIn.subscribe(async isSignedIn => { $: {
if (isSignedIn) { user = $ndk.activeUser;
eventList = loadEvents(); user?.relayList().then(relays => readRelays = relays);
} }
});
</script> </script>
<div class='leather flex flex-col flex-grow-0 space-y-4 overflow-y-auto w-max'> <div class='leather flex flex-col flex-grow-0 space-y-4 overflow-y-auto w-max'>
{#await eventList} {#key user}
{#if user == null || readRelays == null}
{#await getEvents()}
<p>Loading...</p>
{:then events}
{#each Array.from(events) as event}
<ArticleHeader {event} />
{/each}
{/await}
{:else}
{#await getEventsFromUserRelays(readRelays)}
<p>Loading...</p> <p>Loading...</p>
{:then events} {:then events}
{#each Array.from(events) as event} {#each Array.from(events) as event}
<ArticleHeader {event} /> <ArticleHeader {event} />
{/each} {/each}
{/await} {/await}
{/if}
{/key}
</div> </div>

Loading…
Cancel
Save