multicast: broadcast context

Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
William Casarin
2025-04-14 14:54:08 -07:00
parent 50dec5b5d5
commit 39e2accbce

View File

@@ -3,6 +3,12 @@ use enostr::{ClientMessage, NoteId, Pubkey, RelayPool};
use nostrdb::{Note, NoteKey}; use nostrdb::{Note, NoteKey};
use tracing::error; use tracing::error;
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum BroadcastContext {
LocalNetwork,
Everywhere,
}
#[derive(Debug, Clone, Eq, PartialEq)] #[derive(Debug, Clone, Eq, PartialEq)]
#[allow(clippy::enum_variant_names)] #[allow(clippy::enum_variant_names)]
pub enum NoteContextSelection { pub enum NoteContextSelection {
@@ -10,15 +16,23 @@ pub enum NoteContextSelection {
CopyPubkey, CopyPubkey,
CopyNoteId, CopyNoteId,
CopyNoteJSON, CopyNoteJSON,
Broadcast, Broadcast(BroadcastContext),
} }
impl NoteContextSelection { impl NoteContextSelection {
pub fn process(&self, ui: &mut egui::Ui, note: &Note<'_>, pool: &mut RelayPool) { pub fn process(&self, ui: &mut egui::Ui, note: &Note<'_>, pool: &mut RelayPool) {
match self { match self {
NoteContextSelection::Broadcast => { NoteContextSelection::Broadcast(context) => {
tracing::info!("Broadcasting note {}", hex::encode(note.id())); tracing::info!("Broadcasting note {}", hex::encode(note.id()));
pool.send(&ClientMessage::event(note).unwrap()); match context {
BroadcastContext::LocalNetwork => {
pool.send_to(&ClientMessage::event(note).unwrap(), "multicast");
}
BroadcastContext::Everywhere => {
pool.send(&ClientMessage::event(note).unwrap());
}
}
} }
NoteContextSelection::CopyText => { NoteContextSelection::CopyText => {
ui.ctx().copy_text(note.content().to_string()); ui.ctx().copy_text(note.content().to_string());
@@ -167,7 +181,15 @@ impl NoteContextButton {
ui.close_menu(); ui.close_menu();
} }
if ui.button("Broadcast").clicked() { if ui.button("Broadcast").clicked() {
context_selection = Some(NoteContextSelection::Broadcast); context_selection = Some(NoteContextSelection::Broadcast(
BroadcastContext::Everywhere,
));
ui.close_menu();
}
if ui.button("Broadcast to local network").clicked() {
context_selection = Some(NoteContextSelection::Broadcast(
BroadcastContext::LocalNetwork,
));
ui.close_menu(); ui.close_menu();
} }
}); });