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}>
+
+
+ {message}
+
+
+ {#if joined}
+ {#if $relays.length > 1}
+
+ {/if}
+ {:else}
+
+ {/if}
+
+ {#if relay.description}
+ {relay.description}
+ {/if}
+
+
+