diff options
| author | DanConwayDev <DanConwayDev@protonmail.com> | 2026-02-26 12:24:40 +0000 |
|---|---|---|
| committer | DanConwayDev <DanConwayDev@protonmail.com> | 2026-02-26 15:26:16 +0000 |
| commit | dc6c20d29ea4456eee1dbc2aa8757fe955d1afc7 (patch) | |
| tree | 6230652be620a4647ffe1ad26c654b61f36cedac /src/lib/client.rs | |
| parent | 237ab4ebcdc5bf58f98958db5375d56baf8046a0 (diff) | |
fix: report per-relay publish results in send_events summary
Change send_events() return type from Result<()> to
Result<Vec<(String, bool)>> so callers can inspect which relays
accepted events. Update the finish message to show
"Published to X/N relays (failed: ...)" instead of the unconditional
"Published ... to nostr relays".
Diffstat (limited to 'src/lib/client.rs')
| -rw-r--r-- | src/lib/client.rs | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/src/lib/client.rs b/src/lib/client.rs index 2a4e081..c5c38cf 100644 --- a/src/lib/client.rs +++ b/src/lib/client.rs | |||
| @@ -2447,7 +2447,7 @@ pub async fn send_events( | |||
| 2447 | repo_read_relays: Vec<RelayUrl>, | 2447 | repo_read_relays: Vec<RelayUrl>, |
| 2448 | animate: bool, | 2448 | animate: bool, |
| 2449 | silent: bool, | 2449 | silent: bool, |
| 2450 | ) -> Result<()> { | 2450 | ) -> Result<Vec<(String, bool)>> { |
| 2451 | // Only include default relays as fallback when there are no repo relays | 2451 | // Only include default relays as fallback when there are no repo relays |
| 2452 | // (bootstrapping case, e.g. new account signup). When repo relays exist, | 2452 | // (bootstrapping case, e.g. new account signup). When repo relays exist, |
| 2453 | // trust the repo and user relay configuration. | 2453 | // trust the repo and user relay configuration. |
| @@ -2614,7 +2614,7 @@ pub async fn send_events( | |||
| 2614 | })?; | 2614 | })?; |
| 2615 | 2615 | ||
| 2616 | #[allow(clippy::borrow_deref_ref)] | 2616 | #[allow(clippy::borrow_deref_ref)] |
| 2617 | join_all(relays.iter().map(|&relay| { | 2617 | let relay_results: Vec<(String, bool)> = join_all(relays.iter().map(|&relay| { |
| 2618 | let reveal_state_clone = reveal_state.clone(); | 2618 | let reveal_state_clone = reveal_state.clone(); |
| 2619 | let my_write_relays = my_write_relays.clone(); | 2619 | let my_write_relays = my_write_relays.clone(); |
| 2620 | let repo_read_relays = repo_read_relays.clone(); | 2620 | let repo_read_relays = repo_read_relays.clone(); |
| @@ -2691,6 +2691,7 @@ pub async fn send_events( | |||
| 2691 | pb.set_style(pb_after_style_succeeded.clone()); | 2691 | pb.set_style(pb_after_style_succeeded.clone()); |
| 2692 | finish_bar(&pb, String::new(), &reveal_state_clone); | 2692 | finish_bar(&pb, String::new(), &reveal_state_clone); |
| 2693 | } | 2693 | } |
| 2694 | (relay_clean.to_string(), !failed) | ||
| 2694 | } | 2695 | } |
| 2695 | })) | 2696 | })) |
| 2696 | .await; | 2697 | .await; |
| @@ -2700,12 +2701,40 @@ pub async fn send_events( | |||
| 2700 | if let Some(handle) = timer_handle { | 2701 | if let Some(handle) = timer_handle { |
| 2701 | handle.abort(); | 2702 | handle.abort(); |
| 2702 | } | 2703 | } |
| 2704 | |||
| 2705 | let succeeded_count = relay_results.iter().filter(|(_, ok)| *ok).count(); | ||
| 2706 | let total_count = relay_results.len(); | ||
| 2707 | let failed_relays: Vec<&str> = relay_results | ||
| 2708 | .iter() | ||
| 2709 | .filter(|(_, ok)| !*ok) | ||
| 2710 | .map(|(url, _)| { | ||
| 2711 | url.strip_prefix("wss://") | ||
| 2712 | .or_else(|| url.strip_prefix("ws://")) | ||
| 2713 | .unwrap_or(url) | ||
| 2714 | .trim_end_matches('/') | ||
| 2715 | }) | ||
| 2716 | .collect(); | ||
| 2717 | |||
| 2718 | let finish_message = if succeeded_count == total_count { | ||
| 2719 | format!("Published {events_description} to {total_count} relays") | ||
| 2720 | } else if succeeded_count > 0 { | ||
| 2721 | format!( | ||
| 2722 | "Published {events_description} to {succeeded_count}/{total_count} relays (failed: {})", | ||
| 2723 | failed_relays.join(" ") | ||
| 2724 | ) | ||
| 2725 | } else { | ||
| 2726 | format!( | ||
| 2727 | "failed to publish {events_description} to any relay (failed: {})", | ||
| 2728 | failed_relays.join(" ") | ||
| 2729 | ) | ||
| 2730 | }; | ||
| 2731 | |||
| 2703 | if let Some((_, spinner)) = &spinner_multi { | 2732 | if let Some((_, spinner)) = &spinner_multi { |
| 2704 | spinner.set_style(ProgressStyle::with_template("{msg}").unwrap()); | 2733 | spinner.set_style(ProgressStyle::with_template("{msg}").unwrap()); |
| 2705 | spinner.finish_with_message(format!("Published {events_description} to nostr relays")); | 2734 | spinner.finish_with_message(finish_message); |
| 2706 | } | 2735 | } |
| 2707 | 2736 | ||
| 2708 | Ok(()) | 2737 | Ok(relay_results) |
| 2709 | } | 2738 | } |
| 2710 | 2739 | ||
| 2711 | /// Builds a human-readable description of what is being published, e.g. | 2740 | /// Builds a human-readable description of what is being published, e.g. |