-
+
{#await getLightningImplementation()}
diff --git a/src/app/util/feeds.ts b/src/app/util/feeds.ts
index 8acab943..596f2770 100644
--- a/src/app/util/feeds.ts
+++ b/src/app/util/feeds.ts
@@ -48,6 +48,7 @@ export class FeedLoader {
done = false
loader: Promise
feedLoader: CoreFeedLoader
+ controller = new AbortController()
notes = writable([])
parents = new Map()
reposts = new Map()
@@ -60,6 +61,8 @@ export class FeedLoader {
this.feedLoader = new CoreFeedLoader({
...baseFeedLoader.options,
request: async ({relays, filters, onEvent}) => {
+ const signal = this.controller.signal
+
// Default to note kinds
filters = filters?.map(filter => ({kinds: noteKinds, ...filter})) || []
@@ -73,10 +76,10 @@ export class FeedLoader {
// Use relays specified in feeds
if (relays?.length > 0) {
- promises.push(load({filters, relays, tracker, onEvent}))
+ promises.push(load({filters, relays, tracker, onEvent, signal}))
} else {
if (!this.opts.skipCache) {
- promises.push(load({filters, relays: [LOCAL_RELAY_URL], tracker, onEvent}))
+ promises.push(load({filters, relays: [LOCAL_RELAY_URL], tracker, onEvent, signal}))
}
if (!this.opts.skipNetwork) {
@@ -87,7 +90,7 @@ export class FeedLoader {
}
for (const {relay, filters} of selections) {
- promises.push(load({filters, relays: [relay], tracker, onEvent}))
+ promises.push(load({filters, relays: [relay], tracker, onEvent, signal}))
}
}
}
@@ -100,11 +103,17 @@ export class FeedLoader {
// Public api
start = (opts: Partial) => {
+ const controller = new AbortController()
+
Object.assign(this.opts, opts)
this.loader = this.feedLoader.getLoader(this.opts.feed, {
onEvent: batch(300, async events => {
- const keep = await this.discardEvents(events)
+ if (controller.signal.aborted) {
+ return
+ }
+
+ const keep = this.discardEvents(events)
if (this.opts.shouldLoadParents) {
this.loadParents(keep)
@@ -121,6 +130,8 @@ export class FeedLoader {
// Clear everything out
this.notes.set([])
+ this.controller.abort()
+ this.controller = controller
}
subscribe = f => this.notes.subscribe(f)
@@ -129,7 +140,7 @@ export class FeedLoader {
// Event selection, deferral, and parent loading
- discardEvents = async events => {
+ discardEvents = events => {
let strict = true
// Be more tolerant when looking at communities
@@ -186,14 +197,20 @@ export class FeedLoader {
return true
})
+ const {signal} = this.controller
const selections = hints.merge(notesWithParent.map(hints.EventParents)).getSelections()
for (const {relay, values} of selections) {
load({
filters: getIdFilters(values),
+ signal: this.controller.signal,
relays: this.opts.skipPlatform ? [relay] : forcePlatformRelays([relay]),
onEvent: batch(100, async events => {
- for (const e of await this.discardEvents(events)) {
+ if (signal.aborted) {
+ return
+ }
+
+ for (const e of this.discardEvents(events)) {
for (const k of getIdAndAddress(e)) {
this.parents.set(k, e)
}
@@ -215,7 +232,13 @@ export class FeedLoader {
return parents.length === 0 || parents.some(k => this.parents.has(k))
}, notes)
- setTimeout(() => this.addToFeed(defer), 3000)
+ const {signal} = this.controller
+
+ setTimeout(() => {
+ if (!signal.aborted) {
+ this.addToFeed(defer)
+ }
+ }, 3000)
return ok
}
diff --git a/src/app/views/GroupList.svelte b/src/app/views/GroupList.svelte
index c8c52501..d231bc6e 100644
--- a/src/app/views/GroupList.svelte
+++ b/src/app/views/GroupList.svelte
@@ -77,7 +77,7 @@
You haven't yet joined any groups.
{/each}
-
+
{#each otherGroups as group (group.address)}
diff --git a/src/app/views/Login.svelte b/src/app/views/Login.svelte
index 60338998..2dfefc71 100644
--- a/src/app/views/Login.svelte
+++ b/src/app/views/Login.svelte
@@ -136,8 +136,7 @@
@@ -146,8 +145,7 @@
defaultOptions={handlers}
getKey={prop("domain")}
termToItem={objOf("domain")}
- inputClass="rounded-l-none border-l-0"
- inputWrapperClass="flex-grow"
+ inputClass="rounded-l-none border-l-0 flex-grow"
search={() => handlers}>
{item.domain}
diff --git a/src/app/views/OnboardingProfile.svelte b/src/app/views/OnboardingProfile.svelte
index a6cf720d..32b0464a 100644
--- a/src/app/views/OnboardingProfile.svelte
+++ b/src/app/views/OnboardingProfile.svelte
@@ -42,7 +42,7 @@
Help people recognize you by setting up your profile.
-
+
diff --git a/src/app/views/RelayList.svelte b/src/app/views/RelayList.svelte
index 19b8d4c4..16beb6d2 100644
--- a/src/app/views/RelayList.svelte
+++ b/src/app/views/RelayList.svelte
@@ -202,7 +202,7 @@
diff --git a/src/app/views/UserProfile.svelte b/src/app/views/UserProfile.svelte
index 73fc2fbc..f6b40374 100644
--- a/src/app/views/UserProfile.svelte
+++ b/src/app/views/UserProfile.svelte
@@ -35,13 +35,13 @@
-
+
This controls how many relays to max out at when loading feeds and event context. More is
faster, but will require more bandwidth and processing power.
diff --git a/src/engine/network/utils/executor.ts b/src/engine/network/utils/executor.ts
index e07679b5..e9465f1a 100644
--- a/src/engine/network/utils/executor.ts
+++ b/src/engine/network/utils/executor.ts
@@ -33,11 +33,7 @@ export const projections = new Worker({
})
projections.addGlobalHandler(event => {
- const kinds = [
- Kind.Delete,
- Kind.Feed,
- Kind.ListBookmarks,
- ]
+ const kinds = [Kind.Delete, Kind.Feed, Kind.ListBookmarks]
if (kinds.includes(event.kind)) {
repository.publish(event)
@@ -221,7 +217,7 @@ export const createAndPublish = async ({
const template = createEvent(kind, {content, tags})
const event = await sign(template, {anonymous, sk})
- return publish({event, relays, timeout, verb})
+ return publish({event, relays, verb, signal: AbortSignal.timeout(timeout)})
}
setInterval(() => {
diff --git a/src/partials/Anchor.svelte b/src/partials/Anchor.svelte
index 4d70a2dc..435f47f2 100644
--- a/src/partials/Anchor.svelte
+++ b/src/partials/Anchor.svelte
@@ -18,7 +18,6 @@
export let danger = false
export let circle = false
export let underline = false
- export let short = false
export let tall = false
export let grow = false
export let style = null
@@ -44,10 +43,10 @@
button,
"aspect-square flex justify-center items-center rounded-full !p-0": circle,
"aspect-square flex justify-center items-center": square,
- "h-7": short,
- "w-7": short && circle,
- "h-10": tall,
- "w-10": tall && circle,
+ "h-7": button && !tall,
+ "w-7": button && !tall && circle,
+ "h-10": button && tall,
+ "w-10": button && tall && circle,
"flex-grow": grow,
})
diff --git a/src/partials/ImageInput.svelte b/src/partials/ImageInput.svelte
index 62468d63..c9847505 100644
--- a/src/partials/ImageInput.svelte
+++ b/src/partials/ImageInput.svelte
@@ -55,7 +55,7 @@
{#if icon}
-
+
{/if}
diff --git a/src/partials/Input.svelte b/src/partials/Input.svelte
index 467b40f4..2b8651e7 100644
--- a/src/partials/Input.svelte
+++ b/src/partials/Input.svelte
@@ -3,19 +3,18 @@
import {identity} from "ramda"
export let initialValue: string | number = ""
- export let wrapperClass = ""
export let value = initialValue
export let element = null
export let hideBefore = false
export let hideAfter = false
export let format: (x: any) => string = identity
export let parse: (x: string) => any = identity
+ export let dark = false
const showBefore = $$slots.before && !hideBefore
const showAfter = $$slots.after && !hideAfter
const className = cx(
- $$props.class,
- "outline-none rounded shadow-inset py-2 px-4 w-full placeholder:text-neutral-400 text-black",
+ "outline-none px-3 w-full placeholder:text-neutral-400 h-7 bg-transparent",
{"pl-10": showBefore, "pr-10": showAfter},
)
@@ -26,7 +25,11 @@
$: inputValue = format(value)
-
+
{#if showBefore}
-
+
{/if}
{#if showAfter}
-
+
diff --git a/src/partials/SearchSelect.svelte b/src/partials/SearchSelect.svelte
index 8b7082d9..5aff657b 100644
--- a/src/partials/SearchSelect.svelte
+++ b/src/partials/SearchSelect.svelte
@@ -9,7 +9,6 @@
export let value = null
export let onChange = null
export let inputClass = ""
- export let inputWrapperClass = ""
export let placeholder = ""
export let delimiters = []
export let search = null
@@ -134,7 +133,6 @@