Browse Source

Improve home feed refresh

master
buttercat1791 2 years ago committed by limina1
parent
commit
b4f5d22c17
  1. 16
      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

16
src/lib/ArticleHeader.svelte

@ -5,10 +5,20 @@ @@ -5,10 +5,20 @@
import { idList } from "$lib/stores";
import { Card, Button, Modal, Tooltip } from "flowbite-svelte";
import { ClipboardCheckOutline, ClipboardCleanOutline, CodeOutline, ShareNodesOutline } from "flowbite-svelte-icons";
import { ndk } from "./ndk";
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 = () => {
$idList = [];
@ -50,6 +60,7 @@ @@ -50,6 +60,7 @@
}
</script>
{#if title != null && href != null}
<Card class='ArticleBox card-leather w-lg'>
<div class='flex flex-col space-y-4'>
<a href="/{href}" on:click={handleSendEvents}>
@ -80,3 +91,4 @@ @@ -80,3 +91,4 @@
<code>{JSON.stringify(event.rawEvent())}</code>
</Modal>
</Card>
{/if}

2
src/lib/Toc.svelte

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

6
src/lib/cards/Editor.svelte

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

2
src/lib/components/Login.svelte

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

2
src/lib/components/Toc.svelte

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

4
src/lib/consts.ts

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

4
src/lib/ndk.ts

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
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 { writable, type Writable } from 'svelte/store';
import { standardRelays } from './consts';
@ -23,7 +23,7 @@ export function getNdkInstance() { @@ -23,7 +23,7 @@ export function getNdkInstance() {
enableOutboxModel: true,
explicitRelayUrls: relays,
});
ndk.connect().then(() => console.log('ndk connected'));
ndk.connect().then(() => console.debug('ndk connected'));
return ndk;
}

51
src/routes/+page.svelte

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

Loading…
Cancel
Save