From 4995c6b4be94efdcc95de21142b75526bdc41580 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sun, 28 Jan 2024 15:44:09 -0500 Subject: [PATCH] Fixing sub viz --- js/nostr-utils.js | 68 +++++++++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 26 deletions(-) diff --git a/js/nostr-utils.js b/js/nostr-utils.js index f1a1452..12337c4 100644 --- a/js/nostr-utils.js +++ b/js/nostr-utils.js @@ -56,7 +56,7 @@ const downloadFile = (data, fileName) => { tempLink.click() } -const updateRelayStatus = (relay, status, addToCount, until, relayStatusAndCount) => { +const updateRelayStatus = (relay, status, addToCount, subscription, until, relayStatusAndCount) => { if (relayStatusAndCount[relay] == undefined) { relayStatusAndCount[relay] = {} } @@ -64,7 +64,12 @@ const updateRelayStatus = (relay, status, addToCount, until, relayStatusAndCount if (status) relayStatusAndCount[relay].status = status - relayStatusAndCount[relay].until = until + if (!relayStatusAndCount[relay].until) { + relayStatusAndCount[relay].until = {} + } + + if (subscription) + relayStatusAndCount[relay].until[subscription] = until if (relayStatusAndCount[relay].count != undefined) relayStatusAndCount[relay].count = relayStatusAndCount[relay].count + addToCount @@ -76,19 +81,30 @@ const updateRelayStatus = (relay, status, addToCount, until, relayStatusAndCount const displayRelayStatus = (relayStatusAndCount) => { if (Object.keys(relayStatusAndCount).length > 0) { - const newText = Object.keys(relayStatusAndCount).map( + Object.keys(relayStatusAndCount).forEach( it => { let untilStr = ""; - if (relayStatusAndCount[it].until) - untilStr = " <" + new Date(relayStatusAndCount[it].until * 1000).toLocaleDateString("en-US") - + if (relayStatusAndCount[it].until) { + Object.keys(relayStatusAndCount[it].until).forEach(subId => { + untilStr += " <" + new Date(relayStatusAndCount[it].until[subId] * 1000).toLocaleDateString("en-US") + "" + }) + } + const relayName = it.replace("wss://", "").replace("ws://", "") - const line = "" + relayName + "" + relayStatusAndCount[it].status + "" + untilStr + "" + relayStatusAndCount[it].count + "" - return "" +line+ "" + const line = "" + relayName + "" + relayStatusAndCount[it].status + "" + untilStr + "" + relayStatusAndCount[it].count + "" + + const elemId = relayName.replaceAll(".", "-") + + if ($('#' + elemId).length > 0) { + $('#' + elemId).html(line) + } else { + $('#checking-relays').append( + $("" +line+ "").attr('id', elemId) + ) + } } - ).join("
") - $('#checking-relays').html(newText) + ) } else { $('#checking-relays-header').html("") $('#checking-relays').html("") @@ -99,7 +115,7 @@ const displayRelayStatus = (relayStatusAndCount) => { const fetchFromRelay = async (relay, filters, pubkey, events, relayStatus) => new Promise((resolve, reject) => { try { - updateRelayStatus(relay, "Starting", 0, undefined, relayStatus) + updateRelayStatus(relay, "Starting", 0, undefined, undefined, relayStatus) // open websocket const ws = new WebSocket(relay) @@ -133,7 +149,7 @@ const fetchFromRelay = async (relay, filters, pubkey, events, relayStatus) => ws.close() reject(relay) }, 10_000) - updateRelayStatus(relay, "Downloading", 0, undefined, relayStatus) + updateRelayStatus(relay, "Downloading", 0, undefined, undefined, relayStatus) for (const [key, sub] of Object.entries(subscriptions)) { ws.send(JSON.stringify(['REQ', sub.id, sub.filter])) @@ -174,7 +190,7 @@ const fetchFromRelay = async (relay, filters, pubkey, events, relayStatus) => until = subscriptions[subscriptionId].lastEvent.created_at } - updateRelayStatus(relay, undefined, 1, until, relayStatus) + updateRelayStatus(relay, undefined, 1, subscriptionId, until, relayStatus) // prevent duplicated events if (events[id]) return @@ -197,7 +213,7 @@ const fetchFromRelay = async (relay, filters, pubkey, events, relayStatus) => let alldone = Object.values(subscriptions).every(filter => filter.done === true); if (alldone) { - updateRelayStatus(relay, "Done", 0, undefined, relayStatus) + updateRelayStatus(relay, "Done", 0, undefined, undefined, relayStatus) ws.close() resolve(relay) } @@ -215,13 +231,13 @@ const fetchFromRelay = async (relay, filters, pubkey, events, relayStatus) => if (event) { ws.send(JSON.stringify(['AUTH', event])) } else { - updateRelayStatus(relay, "AUTH Req", 0, undefined, relayStatus) + updateRelayStatus(relay, "AUTH Req", 0, undefined, undefined, relayStatus) ws.close() reject(relay) } }, (reason) => { - updateRelayStatus(relay, "AUTH Req", 0, undefined, relayStatus) + updateRelayStatus(relay, "AUTH Req", 0, undefined, undefined, relayStatus) ws.close() reject(relay) }, @@ -233,7 +249,7 @@ const fetchFromRelay = async (relay, filters, pubkey, events, relayStatus) => let alldone = Object.values(subscriptions).every(filter => filter.done === true); if (alldone) { - updateRelayStatus(relay, "Done", 0, undefined, relayStatus) + updateRelayStatus(relay, "Done", 0, undefined, undefined, relayStatus) ws.close() resolve(relay) } @@ -248,7 +264,7 @@ const fetchFromRelay = async (relay, filters, pubkey, events, relayStatus) => } } ws.onerror = (err) => { - updateRelayStatus(relay, "Done", 0, undefined, relayStatus) + updateRelayStatus(relay, "Done", 0, undefined, undefined, relayStatus) try { ws.close() reject(relay) @@ -257,12 +273,12 @@ const fetchFromRelay = async (relay, filters, pubkey, events, relayStatus) => } } ws.onclose = (socket, event) => { - updateRelayStatus(relay, "Done", 0, undefined, relayStatus) + updateRelayStatus(relay, "Done", 0, undefined, undefined, relayStatus) resolve(relay) } } catch (exception) { console.log(exception) - updateRelayStatus(relay, "Error", 0, undefined, relayStatus) + updateRelayStatus(relay, "Error", 0, undefined, undefined, relayStatus) try { ws.close() } catch (exception) { @@ -332,7 +348,7 @@ const sendToRelay = async (relay, data, relayStatus) => try { const ws = new WebSocket(relay) - updateRelayStatus(relay, "Starting", 0, undefined, relayStatus) + updateRelayStatus(relay, "Starting", 0, undefined, undefined, relayStatus) // prevent hanging forever let myTimeout = setTimeout(() => { @@ -342,7 +358,7 @@ const sendToRelay = async (relay, data, relayStatus) => // fetch events from relay ws.onopen = () => { - updateRelayStatus(relay, "Sending", 0, undefined, relayStatus) + updateRelayStatus(relay, "Sending", 0, undefined, undefined, relayStatus) clearTimeout(myTimeout) myTimeout = setTimeout(() => { @@ -365,7 +381,7 @@ const sendToRelay = async (relay, data, relayStatus) => // end of subscription messages if (msgType === 'OK') { if (inserted == true) { - updateRelayStatus(relay, undefined, 1, undefined, relayStatus) + updateRelayStatus(relay, undefined, 1, undefined, undefined, relayStatus) } else { console.log(relay, event.data) } @@ -374,19 +390,19 @@ const sendToRelay = async (relay, data, relayStatus) => } } ws.onerror = (err) => { - updateRelayStatus(relay, "Error", 0, undefined, relayStatus) + updateRelayStatus(relay, "Error", 0, undefined, undefined, relayStatus) console.log("Error", err) ws.close() reject(err) } ws.onclose = (socket, event) => { - updateRelayStatus(relay, "Done", 0, undefined, relayStatus) + updateRelayStatus(relay, "Done", 0, undefined, undefined, relayStatus) console.log("OnClose", relayStatus) resolve() } } catch (exception) { console.log(exception) - updateRelayStatus(relay, "Error", 0, undefined, relayStatus) + updateRelayStatus(relay, "Error", 0, undefined, undefined, relayStatus) try { ws.close() } catch (exception) {