diff --git a/src/lib/stores/PR.ts b/src/lib/stores/PR.ts index 7068797..9ca89b9 100644 --- a/src/lib/stores/PR.ts +++ b/src/lib/stores/PR.ts @@ -1,4 +1,4 @@ -import { NDKRelaySet, type NDKEvent } from "@nostr-dev-kit/ndk"; +import { NDKRelaySet, type NDKEvent, NDKSubscription } from "@nostr-dev-kit/ndk"; import { writable, type Unsubscriber, type Writable } from "svelte/store" import { ndk } from "./ndk"; import type { User } from "$lib/components/users/type"; @@ -17,6 +17,10 @@ export let selected_pr_replies: Writable = writable([]); let selected_pr_status_date = 0; +let sub: NDKSubscription; + +let sub_replies: NDKSubscription; + export let ensurePRFull = (repo_id: string, pr_id: string) => { if (selected_pr_id == pr_id) return; if (pr_id == "") { @@ -46,14 +50,17 @@ export let ensurePRFull = (repo_id: string, pr_id: string) => { new Promise(async (r) => { let repo = await ensureSelectedRepo(repo_id); - let sub = ndk.subscribe( + if (sub) sub.stop(); + sub = ndk.subscribe( { ids: [pr_id], kinds: [pr_kind], '#r': [`r-${repo_id}`], limit: 50, }, - {}, + { + closeOnEose: false, + }, NDKRelaySet.fromRelayUrls(repo.relays, ndk), ); @@ -114,11 +121,14 @@ export let ensurePRFull = (repo_id: string, pr_id: string) => { }); }); - let sub_replies = ndk.subscribe( + if (sub_replies) sub_replies.stop(); + sub_replies = ndk.subscribe( { "#e": [pr_id], }, - {}, + { + closeOnEose: false + }, NDKRelaySet.fromRelayUrls(repo.relays, ndk), ); diff --git a/src/lib/stores/PRs.ts b/src/lib/stores/PRs.ts index 5548656..d8a9ea9 100644 --- a/src/lib/stores/PRs.ts +++ b/src/lib/stores/PRs.ts @@ -1,4 +1,4 @@ -import { NDKRelaySet, type NDKEvent } from "@nostr-dev-kit/ndk"; +import { NDKRelaySet, type NDKEvent, NDKSubscription } from "@nostr-dev-kit/ndk"; import { writable, type Unsubscriber, type Writable } from "svelte/store" import { ndk } from "./ndk"; import { summary_defaults } from "$lib/components/prs/type"; @@ -19,6 +19,8 @@ let selected_repo_id: string = ""; let authors_unsubscribers: Unsubscriber[] = []; +let sub: NDKSubscription; + export let ensurePRSummaries = async (repo_id: string) => { if (selected_repo_id == repo_id) return; if (repo_id == "") return pr_summaries.set({ @@ -41,13 +43,17 @@ export let ensurePRSummaries = async (repo_id: string) => { authors_unsubscribers.forEach(u => u()); authors_unsubscribers = []; - let sub = ndk.subscribe( + if (sub) sub.stop(); + + sub = ndk.subscribe( { kinds: [pr_kind], '#r': [`r-${repo_id}`], limit: 50, }, - {}, + { + closeOnEose: false, + }, NDKRelaySet.fromRelayUrls(repo.relays, ndk), ); diff --git a/src/lib/stores/repo.ts b/src/lib/stores/repo.ts index c2f0d44..e2e5e7b 100644 --- a/src/lib/stores/repo.ts +++ b/src/lib/stores/repo.ts @@ -1,4 +1,4 @@ -import { NDKRelaySet } from "@nostr-dev-kit/ndk"; +import { NDKRelaySet, NDKSubscription } from "@nostr-dev-kit/ndk"; import { writable, type Unsubscriber, type Writable, get } from "svelte/store" import { base_relays, ndk } from "./ndk"; import type { Repo } from "$lib/components/repo/type"; @@ -12,6 +12,7 @@ let selected_repo_id: string = ""; let maintainers_unsubscribers: Unsubscriber[] = []; +let sub: NDKSubscription; export let ensureSelectedRepo = async (repo_id: string): Promise => { if (selected_repo_id == repo_id) { return new Promise(r => { @@ -27,13 +28,17 @@ export let ensureSelectedRepo = async (repo_id: string): Promise => { }) } selected_repo_id = repo_id; - let sub = ndk.subscribe( + + if (sub) sub.stop(); + sub = ndk.subscribe( { kinds: [repo_kind], '#d': [repo_id], limit: 1, }, - {}, + { + closeOnEose: false, + }, NDKRelaySet.fromRelayUrls(base_relays, ndk), );