diff --git a/src/App.svelte b/src/App.svelte index 04a61487..be1dcab2 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -53,6 +53,7 @@ import Profile from "src/views/Profile.svelte" import PubKeyLogin from "src/views/login/PubKeyLogin.svelte" import RelayCard from "src/views/relays/RelayCard.svelte" + import RelayDetail from "src/views/relays/RelayDetail.svelte" import RelayList from "src/views/relays/RelayList.svelte" import Search from "src/views/search/Search.svelte" import Settings from "src/views/Settings.svelte" @@ -201,6 +202,11 @@ + + {#key params.b64url} + + {/key} + diff --git a/src/agent/network.ts b/src/agent/network.ts index ecd17df2..5ea7794b 100644 --- a/src/agent/network.ts +++ b/src/agent/network.ts @@ -62,8 +62,8 @@ const load = ({relays, filter, onChunk = null, shouldProcess = true, timeout = 6 timedOutRelays ) - timedOutRelays.forEach(url => { - const conn = pool.getConnection(url) + timedOutRelays.forEach(relay => { + const conn = pool.getConnection(relay.url) if (conn) { conn.stats.timeouts += 1 diff --git a/src/agent/pool.ts b/src/agent/pool.ts index 9b45069a..721adb29 100644 --- a/src/agent/pool.ts +++ b/src/agent/pool.ts @@ -88,8 +88,8 @@ class Connection { } const {timeouts, subCount, eoseTimer, eoseCount} = this.stats - const timeoutRate = subCount > 10 ? timeouts / subCount : null - const eoseQuality = eoseCount > 10 ? Math.max(1, 500 / (eoseTimer / eoseCount)) : null + const timeoutRate = timeouts > 0 ? timeouts / subCount : null + const eoseQuality = eoseCount > 0 ? Math.max(1, 500 / (eoseTimer / eoseCount)) : null if (timeoutRate && timeoutRate > 0.5) { return [1 - timeoutRate, "Slow connection"] @@ -299,6 +299,12 @@ const subscribe = async ( return { isActive: () => active, unsub: () => { + if (!active) { + return + } + + active = false + log(`Closing subscription ${id}`) promises.forEach(async promise => { @@ -306,7 +312,6 @@ const subscribe = async ( if (sub) { sub.unsub() - active = false sub.conn.stats.activeSubsCount -= 1 } }) diff --git a/src/partials/Content.svelte b/src/partials/Content.svelte index 16cc8cbd..8afb4480 100644 --- a/src/partials/Content.svelte +++ b/src/partials/Content.svelte @@ -24,7 +24,7 @@ {/if} {#if size === '2xl'} -
+
{/if} diff --git a/src/views/notes/Feed.svelte b/src/views/notes/Feed.svelte index a603fbc9..766dd948 100644 --- a/src/views/notes/Feed.svelte +++ b/src/views/notes/Feed.svelte @@ -64,6 +64,7 @@ notesBuffer = [] } + const onChunk = async newNotes => { const chunk = sortBy(e => -e.created_at, await processNewNotes(newNotes)) const [bottom, top] = partition(e => e.created_at < since, chunk) diff --git a/src/views/relays/RelayCard.svelte b/src/views/relays/RelayCard.svelte index 581ea904..48f44532 100644 --- a/src/views/relays/RelayCard.svelte +++ b/src/views/relays/RelayCard.svelte @@ -6,6 +6,7 @@ import {between} from 'hurdak/lib/hurdak' import {fly} from 'svelte/transition' import Toggle from "src/partials/Toggle.svelte" + import Anchor from "src/partials/Anchor.svelte" import pool from 'src/agent/pool' import user from "src/agent/user" import {loadAppData} from 'src/app' @@ -57,7 +58,9 @@
- {last(relay.url.split('://'))} + + {last(relay.url.split('://'))} + {showStatus = false}} on:mouseover={() => {showStatus = true}} diff --git a/src/views/relays/RelayDetail.svelte b/src/views/relays/RelayDetail.svelte new file mode 100644 index 00000000..94289fe0 --- /dev/null +++ b/src/views/relays/RelayDetail.svelte @@ -0,0 +1,81 @@ + + + +
+
+ + {last(relay.url.split('://'))} + {showStatus = false}} + on:mouseover={() => {showStatus = true}} + class="w-2 h-2 rounded-full bg-medium cursor-pointer" + class:bg-medium={message === 'Not connected'} + class:bg-danger={quality <= 0.3 && message !== 'Not connected'} + class:bg-warning={between(0.3, 0.7, quality)} + class:bg-success={quality > 0.7}> + + +
+ {#if joined} + {#if $relays.length > 1} + + {/if} + {:else} + + {/if} +
+ {#if relay.description} +

{relay.description}

+ {/if} +
+ +