From a0c8012f8eddce60c6f300e9a017f9aa7081aeeb Mon Sep 17 00:00:00 2001 From: Kieran Date: Wed, 11 Oct 2023 19:23:59 +0100 Subject: [PATCH] Add retry/delete to note broadcaster --- packages/app/public/icons.svg | 14 +++-- .../app/src/Element/Event/NoteBroadcaster.tsx | 58 ++++++++++++++++--- packages/app/src/index.css | 4 ++ packages/app/src/lang.json | 6 ++ packages/app/src/translations/en.json | 2 + 5 files changed, 69 insertions(+), 15 deletions(-) diff --git a/packages/app/public/icons.svg b/packages/app/public/icons.svg index 2a78a7c8..a6bad8c6 100644 --- a/packages/app/public/icons.svg +++ b/packages/app/public/icons.svg @@ -24,9 +24,9 @@ - - - + + + @@ -352,11 +352,13 @@ - + - - + + + + \ No newline at end of file diff --git a/packages/app/src/Element/Event/NoteBroadcaster.tsx b/packages/app/src/Element/Event/NoteBroadcaster.tsx index ae86609b..83ee660e 100644 --- a/packages/app/src/Element/Event/NoteBroadcaster.tsx +++ b/packages/app/src/Element/Event/NoteBroadcaster.tsx @@ -1,12 +1,15 @@ import { useEffect, useState } from "react"; -import { FormattedMessage } from "react-intl"; -import { removeUndefined } from "@snort/shared"; +import { FormattedMessage, useIntl } from "react-intl"; +import { removeUndefined, unwrap } from "@snort/shared"; import { NostrEvent, OkResponse } from "@snort/system"; import AsyncButton from "Element/AsyncButton"; import Icon from "Icons/Icon"; -import { getRelayName } from "SnortUtils"; +import { getRelayName, sanitizeRelayUrl } from "SnortUtils"; import { System } from "index"; +import { removeRelay } from "Login"; +import useLogin from "Hooks/useLogin"; +import useEventPublisher from "Hooks/useEventPublisher"; export function NoteBroadcaster({ evs, @@ -18,6 +21,9 @@ export function NoteBroadcaster({ customRelays?: Array; }) { const [results, setResults] = useState>([]); + const { formatMessage } = useIntl(); + const login = useLogin(); + const publisher = useEventPublisher(); async function sendEventToRelays(ev: NostrEvent) { if (customRelays) { @@ -48,8 +54,32 @@ export function NoteBroadcaster({ sendNote().catch(console.error); }, []); + async function removeRelayFromResult(r: OkResponse) { + if (publisher) { + removeRelay(login, unwrap(sanitizeRelayUrl(r.relay))); + const ev = await publisher.contactList(login.follows.item, login.relays.item); + await System.BroadcastEvent(ev); + setResults(s => s.filter(a => a.relay !== r.relay)); + } + } + + async function retryPublish(r: OkResponse) { + const ev = evs.find(a => a.id === r.id); + if (ev) { + const rsp = await System.WriteOnceToRelay(unwrap(sanitizeRelayUrl(r.relay)), ev); + setResults(s => + s.map(x => { + if (x.relay === r.relay && x.id === r.id) { + return rsp; //replace with new response + } + return x; + }), + ); + } + } + return ( -
+

@@ -57,18 +87,28 @@ export function NoteBroadcaster({ .filter(a => a.message !== "Duplicate request") .sort(a => (a.ok ? -1 : 1)) .map(r => ( -
- +
+
{getRelayName(r.relay)} {r.message && {r.message}}
- {!r.ok && false && ( + {!r.ok && (
- {}} className="p4 br-compact flex f-center secondary"> + retryPublish(r)} + className="p4 br-compact flex f-center secondary" + title={formatMessage({ + defaultMessage: "Retry publishing", + })}> - {}} className="p4 br-compact flex f-center secondary"> + removeRelayFromResult(r)} + className="p4 br-compact flex f-center secondary" + title={formatMessage({ + defaultMessage: "Remove from my relays", + })}>
diff --git a/packages/app/src/index.css b/packages/app/src/index.css index e3a13e1f..11b3063f 100644 --- a/packages/app/src/index.css +++ b/packages/app/src/index.css @@ -183,6 +183,10 @@ a.ext { padding: 4px; } +.p12 { + padding: 12px; +} + .p24 { padding: 24px; } diff --git a/packages/app/src/lang.json b/packages/app/src/lang.json index 08a827e2..c819e21f 100644 --- a/packages/app/src/lang.json +++ b/packages/app/src/lang.json @@ -279,6 +279,9 @@ "defaultMessage": "Login", "description": "Login button" }, + "9kSari": { + "defaultMessage": "Retry publishing" + }, "9pMqYs": { "defaultMessage": "Nostr Address" }, @@ -820,6 +823,9 @@ "UDYlxu": { "defaultMessage": "Pending Subscriptions" }, + "UJTWqI": { + "defaultMessage": "Remove from my relays" + }, "UT7Nkj": { "defaultMessage": "New Chat" }, diff --git a/packages/app/src/translations/en.json b/packages/app/src/translations/en.json index aeb82b43..613b5486 100644 --- a/packages/app/src/translations/en.json +++ b/packages/app/src/translations/en.json @@ -91,6 +91,7 @@ "9SvQep": "Follows {n}", "9WRlF4": "Send", "9gqH2W": "Login", + "9kSari": "Retry publishing", "9pMqYs": "Nostr Address", "9wO4wJ": "Lightning Invoice", "ADmfQT": "Parent", @@ -268,6 +269,7 @@ "TpgeGw": "Hex Salt..", "Tpy00S": "People", "UDYlxu": "Pending Subscriptions", + "UJTWqI": "Remove from my relays", "UT7Nkj": "New Chat", "UUPFlt": "Users must accept the content warning to show the content of your note.", "Up5U7K": "Block",