mirror of
https://github.com/mikedilger/gossip.git
synced 2024-09-18 03:03:45 +00:00
BusMessage.target is no longer needed (it is now always overlord)
This commit is contained in:
parent
6daf59c781
commit
4b70a761f4
@ -6,9 +6,6 @@ use zeroize::Zeroize;
|
||||
/// This is a message sent to the Overlord
|
||||
#[derive(Debug, Clone, Serialize)]
|
||||
pub struct BusMessage {
|
||||
/// Indended recipient of the message
|
||||
pub target: String,
|
||||
|
||||
/// What kind of message is this
|
||||
pub kind: String,
|
||||
|
||||
|
@ -93,7 +93,6 @@ async fn tokio_main() {
|
||||
pub fn initiate_shutdown() -> Result<(), Error> {
|
||||
let to_overlord = GLOBALS.to_overlord.clone();
|
||||
let _ = to_overlord.send(BusMessage {
|
||||
target: "all".to_string(),
|
||||
kind: "shutdown".to_string(),
|
||||
json_payload: serde_json::to_string("").unwrap(),
|
||||
}); // ignore errors
|
||||
|
@ -263,7 +263,6 @@ impl Minion {
|
||||
|
||||
async fn tell_overlord_we_are_ready(&self) -> Result<(), Error> {
|
||||
self.to_overlord.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "minion_is_ready".to_string(),
|
||||
json_payload: "".to_owned(),
|
||||
})?;
|
||||
|
@ -357,172 +357,164 @@ impl Overlord {
|
||||
|
||||
async fn handle_bus_message(&mut self, bus_message: BusMessage) -> Result<bool, Error> {
|
||||
#[allow(clippy::single_match)] // because temporarily so
|
||||
match &*bus_message.target {
|
||||
"all" => match &*bus_message.kind {
|
||||
"shutdown" => {
|
||||
tracing::info!("Overlord shutting down");
|
||||
return Ok(false);
|
||||
match &*bus_message.kind {
|
||||
"shutdown" => {
|
||||
tracing::info!("Overlord shutting down");
|
||||
return Ok(false);
|
||||
}
|
||||
"minion_is_ready" => {}
|
||||
"save_settings" => {
|
||||
GLOBALS.settings.read().await.save().await?;
|
||||
tracing::debug!("Settings saved.");
|
||||
}
|
||||
"get_missing_events" => {
|
||||
self.get_missing_events().await?;
|
||||
}
|
||||
"follow_nip35" => {
|
||||
let dns_id: String = serde_json::from_str(&bus_message.json_payload)?;
|
||||
let _ = tokio::spawn(async move {
|
||||
if let Err(e) = Overlord::get_and_follow_nip35(dns_id).await {
|
||||
tracing::error!("{}", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
"follow_bech32" => {
|
||||
let data: (String, String) = serde_json::from_str(&bus_message.json_payload)?;
|
||||
Overlord::follow_bech32(data.0, data.1).await?;
|
||||
}
|
||||
"follow_hexkey" => {
|
||||
let data: (String, String) = serde_json::from_str(&bus_message.json_payload)?;
|
||||
Overlord::follow_hexkey(data.0, data.1).await?;
|
||||
}
|
||||
"unlock_key" => {
|
||||
let mut password: String = serde_json::from_str(&bus_message.json_payload)?;
|
||||
GLOBALS
|
||||
.signer
|
||||
.write()
|
||||
.await
|
||||
.unlock_encrypted_private_key(&password)?;
|
||||
password.zeroize();
|
||||
|
||||
// Update public key from private key
|
||||
let public_key = GLOBALS.signer.read().await.public_key().unwrap();
|
||||
{
|
||||
let mut settings = GLOBALS.settings.write().await;
|
||||
settings.public_key = Some(public_key);
|
||||
settings.save().await?;
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
"overlord" => match &*bus_message.kind {
|
||||
"minion_is_ready" => {}
|
||||
"save_settings" => {
|
||||
GLOBALS.settings.read().await.save().await?;
|
||||
tracing::debug!("Settings saved.");
|
||||
}
|
||||
"get_missing_events" => {
|
||||
self.get_missing_events().await?;
|
||||
}
|
||||
"follow_nip35" => {
|
||||
let dns_id: String = serde_json::from_str(&bus_message.json_payload)?;
|
||||
let _ = tokio::spawn(async move {
|
||||
if let Err(e) = Overlord::get_and_follow_nip35(dns_id).await {
|
||||
tracing::error!("{}", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
"follow_bech32" => {
|
||||
let data: (String, String) = serde_json::from_str(&bus_message.json_payload)?;
|
||||
Overlord::follow_bech32(data.0, data.1).await?;
|
||||
}
|
||||
"follow_hexkey" => {
|
||||
let data: (String, String) = serde_json::from_str(&bus_message.json_payload)?;
|
||||
Overlord::follow_hexkey(data.0, data.1).await?;
|
||||
}
|
||||
"unlock_key" => {
|
||||
let mut password: String = serde_json::from_str(&bus_message.json_payload)?;
|
||||
}
|
||||
"generate_private_key" => {
|
||||
let mut password: String = serde_json::from_str(&bus_message.json_payload)?;
|
||||
GLOBALS
|
||||
.signer
|
||||
.write()
|
||||
.await
|
||||
.generate_private_key(&password)?;
|
||||
password.zeroize();
|
||||
GLOBALS.signer.read().await.save_through_settings().await?;
|
||||
}
|
||||
"import_priv" => {
|
||||
let (mut import_priv, mut password): (String, String) =
|
||||
serde_json::from_str(&bus_message.json_payload)?;
|
||||
let maybe_pk1 = PrivateKey::try_from_bech32_string(&import_priv);
|
||||
let maybe_pk2 = PrivateKey::try_from_hex_string(&import_priv);
|
||||
import_priv.zeroize();
|
||||
if maybe_pk1.is_err() && maybe_pk2.is_err() {
|
||||
password.zeroize();
|
||||
*GLOBALS.status_message.write().await =
|
||||
"Private key not recognized.".to_owned();
|
||||
} else {
|
||||
let privkey = maybe_pk1.unwrap_or_else(|_| maybe_pk2.unwrap());
|
||||
GLOBALS
|
||||
.signer
|
||||
.write()
|
||||
.await
|
||||
.unlock_encrypted_private_key(&password)?;
|
||||
.set_private_key(privkey, &password)?;
|
||||
password.zeroize();
|
||||
|
||||
// Update public key from private key
|
||||
let public_key = GLOBALS.signer.read().await.public_key().unwrap();
|
||||
GLOBALS.signer.read().await.save_through_settings().await?;
|
||||
}
|
||||
}
|
||||
"import_pub" => {
|
||||
let pubstr: String = serde_json::from_str(&bus_message.json_payload)?;
|
||||
let maybe_pk1 = PublicKey::try_from_bech32_string(&pubstr);
|
||||
let maybe_pk2 = PublicKey::try_from_hex_string(&pubstr);
|
||||
if maybe_pk1.is_err() && maybe_pk2.is_err() {
|
||||
*GLOBALS.status_message.write().await = "Public key not recognized.".to_owned();
|
||||
} else {
|
||||
let pubkey = maybe_pk1.unwrap_or_else(|_| maybe_pk2.unwrap());
|
||||
GLOBALS.signer.write().await.set_public_key(pubkey);
|
||||
GLOBALS.signer.read().await.save_through_settings().await?;
|
||||
}
|
||||
}
|
||||
"delete_pub" => {
|
||||
GLOBALS.signer.write().await.clear_public_key();
|
||||
GLOBALS.signer.read().await.save_through_settings().await?;
|
||||
}
|
||||
"save_relays" => {
|
||||
let dirty_relays: Vec<DbRelay> = GLOBALS
|
||||
.relays
|
||||
.read()
|
||||
.await
|
||||
.iter()
|
||||
.filter_map(|(_, r)| if r.dirty { Some(r.to_owned()) } else { None })
|
||||
.collect();
|
||||
tracing::info!("Saving {} relays", dirty_relays.len());
|
||||
for relay in dirty_relays.iter() {
|
||||
// Just update 'post' since that's all 'dirty' indicates currently
|
||||
DbRelay::update_post(relay.url.to_owned(), relay.post).await?;
|
||||
if let Some(relay) = GLOBALS.relays.write().await.get_mut(&Url::new(&relay.url))
|
||||
{
|
||||
let mut settings = GLOBALS.settings.write().await;
|
||||
settings.public_key = Some(public_key);
|
||||
settings.save().await?;
|
||||
relay.dirty = false;
|
||||
}
|
||||
}
|
||||
"generate_private_key" => {
|
||||
let mut password: String = serde_json::from_str(&bus_message.json_payload)?;
|
||||
GLOBALS
|
||||
.signer
|
||||
.write()
|
||||
.await
|
||||
.generate_private_key(&password)?;
|
||||
password.zeroize();
|
||||
GLOBALS.signer.read().await.save_through_settings().await?;
|
||||
}
|
||||
"import_priv" => {
|
||||
let (mut import_priv, mut password): (String, String) =
|
||||
serde_json::from_str(&bus_message.json_payload)?;
|
||||
let maybe_pk1 = PrivateKey::try_from_bech32_string(&import_priv);
|
||||
let maybe_pk2 = PrivateKey::try_from_hex_string(&import_priv);
|
||||
import_priv.zeroize();
|
||||
if maybe_pk1.is_err() && maybe_pk2.is_err() {
|
||||
password.zeroize();
|
||||
*GLOBALS.status_message.write().await =
|
||||
"Private key not recognized.".to_owned();
|
||||
} else {
|
||||
let privkey = maybe_pk1.unwrap_or_else(|_| maybe_pk2.unwrap());
|
||||
GLOBALS
|
||||
.signer
|
||||
.write()
|
||||
.await
|
||||
.set_private_key(privkey, &password)?;
|
||||
password.zeroize();
|
||||
GLOBALS.signer.read().await.save_through_settings().await?;
|
||||
}
|
||||
}
|
||||
"import_pub" => {
|
||||
let pubstr: String = serde_json::from_str(&bus_message.json_payload)?;
|
||||
let maybe_pk1 = PublicKey::try_from_bech32_string(&pubstr);
|
||||
let maybe_pk2 = PublicKey::try_from_hex_string(&pubstr);
|
||||
if maybe_pk1.is_err() && maybe_pk2.is_err() {
|
||||
*GLOBALS.status_message.write().await =
|
||||
"Public key not recognized.".to_owned();
|
||||
} else {
|
||||
let pubkey = maybe_pk1.unwrap_or_else(|_| maybe_pk2.unwrap());
|
||||
GLOBALS.signer.write().await.set_public_key(pubkey);
|
||||
GLOBALS.signer.read().await.save_through_settings().await?;
|
||||
}
|
||||
}
|
||||
"delete_pub" => {
|
||||
GLOBALS.signer.write().await.clear_public_key();
|
||||
GLOBALS.signer.read().await.save_through_settings().await?;
|
||||
}
|
||||
"save_relays" => {
|
||||
let dirty_relays: Vec<DbRelay> = GLOBALS
|
||||
.relays
|
||||
.read()
|
||||
.await
|
||||
.iter()
|
||||
.filter_map(|(_, r)| if r.dirty { Some(r.to_owned()) } else { None })
|
||||
.collect();
|
||||
tracing::info!("Saving {} relays", dirty_relays.len());
|
||||
for relay in dirty_relays.iter() {
|
||||
// Just update 'post' since that's all 'dirty' indicates currently
|
||||
DbRelay::update_post(relay.url.to_owned(), relay.post).await?;
|
||||
if let Some(relay) =
|
||||
GLOBALS.relays.write().await.get_mut(&Url::new(&relay.url))
|
||||
{
|
||||
relay.dirty = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
"post_textnote" => {
|
||||
let content: String = serde_json::from_str(&bus_message.json_payload)?;
|
||||
self.post_textnote(content).await?;
|
||||
}
|
||||
"post_reply" => {
|
||||
let (content, reply_to): (String, Id) =
|
||||
serde_json::from_str(&bus_message.json_payload)?;
|
||||
self.post_reply(content, reply_to).await?;
|
||||
}
|
||||
"like" => {
|
||||
let (id, pubkey): (Id, PublicKey) =
|
||||
serde_json::from_str(&bus_message.json_payload)?;
|
||||
self.post_like(id, pubkey).await?;
|
||||
}
|
||||
"process_incoming_events" => {
|
||||
// Clear new events
|
||||
GLOBALS.event_is_new.write().await.clear();
|
||||
}
|
||||
"post_textnote" => {
|
||||
let content: String = serde_json::from_str(&bus_message.json_payload)?;
|
||||
self.post_textnote(content).await?;
|
||||
}
|
||||
"post_reply" => {
|
||||
let (content, reply_to): (String, Id) =
|
||||
serde_json::from_str(&bus_message.json_payload)?;
|
||||
self.post_reply(content, reply_to).await?;
|
||||
}
|
||||
"like" => {
|
||||
let (id, pubkey): (Id, PublicKey) =
|
||||
serde_json::from_str(&bus_message.json_payload)?;
|
||||
self.post_like(id, pubkey).await?;
|
||||
}
|
||||
"process_incoming_events" => {
|
||||
// Clear new events
|
||||
GLOBALS.event_is_new.write().await.clear();
|
||||
|
||||
let _ = tokio::spawn(async move {
|
||||
for (event, url, sub) in GLOBALS.incoming_events.write().await.drain(..) {
|
||||
let _ = crate::process::process_new_event(&event, true, Some(url), sub)
|
||||
.await;
|
||||
}
|
||||
let _ = tokio::spawn(async move {
|
||||
for (event, url, sub) in GLOBALS.incoming_events.write().await.drain(..) {
|
||||
let _ =
|
||||
crate::process::process_new_event(&event, true, Some(url), sub).await;
|
||||
}
|
||||
});
|
||||
}
|
||||
"add_relay" => {
|
||||
let relay_str: String = serde_json::from_str(&bus_message.json_payload)?;
|
||||
let dbrelay = DbRelay::new(relay_str)?;
|
||||
DbRelay::insert(dbrelay).await?;
|
||||
}
|
||||
"update_metadata" => {
|
||||
let pubkey: PublicKeyHex = serde_json::from_str(&bus_message.json_payload)?;
|
||||
let person_relays = DbPersonRelay::fetch_for_pubkeys(&[pubkey.clone()]).await?;
|
||||
|
||||
for person_relay in person_relays.iter() {
|
||||
// Start a minion for this relay if there is none
|
||||
if !self.urls_watching.contains(&Url::new(&person_relay.relay)) {
|
||||
self.start_minion(person_relay.relay.clone()).await?;
|
||||
}
|
||||
|
||||
// Subscribe to metadata and contact lists for this person
|
||||
let _ = self.to_minions.send(ToMinionMessage {
|
||||
target: person_relay.relay.to_string(),
|
||||
payload: ToMinionPayload::TempSubscribeMetadata(pubkey.clone()),
|
||||
});
|
||||
}
|
||||
"add_relay" => {
|
||||
let relay_str: String = serde_json::from_str(&bus_message.json_payload)?;
|
||||
let dbrelay = DbRelay::new(relay_str)?;
|
||||
DbRelay::insert(dbrelay).await?;
|
||||
}
|
||||
"update_metadata" => {
|
||||
let pubkey: PublicKeyHex = serde_json::from_str(&bus_message.json_payload)?;
|
||||
let person_relays = DbPersonRelay::fetch_for_pubkeys(&[pubkey.clone()]).await?;
|
||||
|
||||
for person_relay in person_relays.iter() {
|
||||
// Start a minion for this relay if there is none
|
||||
if !self.urls_watching.contains(&Url::new(&person_relay.relay)) {
|
||||
self.start_minion(person_relay.relay.clone()).await?;
|
||||
}
|
||||
|
||||
// Subscribe to metadata and contact lists for this person
|
||||
let _ = self.to_minions.send(ToMinionMessage {
|
||||
target: person_relay.relay.to_string(),
|
||||
payload: ToMinionPayload::TempSubscribeMetadata(pubkey.clone()),
|
||||
});
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
|
@ -86,7 +86,6 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram
|
||||
{
|
||||
let tx = GLOBALS.to_overlord.clone();
|
||||
let _ = tx.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "get_missing_events".to_string(),
|
||||
json_payload: serde_json::to_string("").unwrap(),
|
||||
});
|
||||
@ -100,7 +99,6 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram
|
||||
{
|
||||
let tx = GLOBALS.to_overlord.clone();
|
||||
let _ = tx.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "process_incoming_events".to_string(),
|
||||
json_payload: serde_json::to_string("").unwrap(),
|
||||
});
|
||||
@ -156,7 +154,6 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram
|
||||
match app.replying_to {
|
||||
Some(_id) => {
|
||||
let _ = tx.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "post_reply".to_string(),
|
||||
json_payload: serde_json::to_string(&(
|
||||
&app.draft,
|
||||
@ -167,7 +164,6 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram
|
||||
}
|
||||
None => {
|
||||
let _ = tx.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "post_textnote".to_string(),
|
||||
json_payload: serde_json::to_string(&app.draft).unwrap(),
|
||||
});
|
||||
@ -457,7 +453,6 @@ fn render_post_actual(
|
||||
}
|
||||
if ui.button("Update Metadata").clicked() {
|
||||
let _ = GLOBALS.to_overlord.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "update_metadata".to_string(),
|
||||
json_payload: serde_json::to_string(
|
||||
&event.pubkey.as_hex_string(),
|
||||
@ -504,7 +499,6 @@ fn render_post_actual(
|
||||
if ui.add(LikeButton {}).clicked() {
|
||||
let tx = GLOBALS.to_overlord.clone();
|
||||
let _ = tx.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "like".to_string(),
|
||||
json_payload: serde_json::to_string(&(&event.id, &event.pubkey))
|
||||
.unwrap(),
|
||||
|
@ -26,7 +26,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
||||
if ui.button("follow").clicked() {
|
||||
let tx = GLOBALS.to_overlord.clone();
|
||||
let _ = tx.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "follow_nip35".to_string(),
|
||||
json_payload: serde_json::to_string(&app.nip35follow).unwrap(),
|
||||
});
|
||||
@ -50,7 +49,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
||||
if ui.button("follow").clicked() {
|
||||
let tx = GLOBALS.to_overlord.clone();
|
||||
let _ = tx.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "follow_bech32".to_string(),
|
||||
json_payload: serde_json::to_string(&(
|
||||
&app.follow_bech32_pubkey,
|
||||
@ -79,7 +77,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
||||
if ui.button("follow").clicked() {
|
||||
let tx = GLOBALS.to_overlord.clone();
|
||||
let _ = tx.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "follow_hexkey".to_string(),
|
||||
json_payload: serde_json::to_string(&(
|
||||
&app.follow_hex_pubkey,
|
||||
|
@ -58,7 +58,6 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, _frame: &mut eframe::Fra
|
||||
|
||||
if ui.button("UPDATE METADATA").clicked() {
|
||||
let _ = GLOBALS.to_overlord.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "update_metadata".to_string(),
|
||||
json_payload: serde_json::to_string(&pubkeyhex).unwrap(),
|
||||
});
|
||||
|
@ -26,7 +26,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
||||
if test_url.is_valid_relay_url() {
|
||||
let tx = GLOBALS.to_overlord.clone();
|
||||
let _ = tx.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "add_relay".to_string(),
|
||||
json_payload: serde_json::to_string(&app.new_relay_url).unwrap(),
|
||||
});
|
||||
@ -63,7 +62,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
||||
if ui.button("SAVE CHANGES").clicked() {
|
||||
let tx = GLOBALS.to_overlord.clone();
|
||||
let _ = tx.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "save_relays".to_string(),
|
||||
json_payload: serde_json::to_string("").unwrap(),
|
||||
});
|
||||
|
@ -153,7 +153,6 @@ pub(super) fn update(
|
||||
// Tell the overlord to save them
|
||||
let tx = GLOBALS.to_overlord.clone();
|
||||
let _ = tx.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "save_settings".to_string(),
|
||||
json_payload: serde_json::to_string("").unwrap(),
|
||||
});
|
||||
|
@ -143,7 +143,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
||||
if ui.button("Unlock Private Key").clicked() {
|
||||
let tx = GLOBALS.to_overlord.clone();
|
||||
let _ = tx.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "unlock_key".to_string(),
|
||||
json_payload: serde_json::to_string(&app.password).unwrap(),
|
||||
});
|
||||
@ -160,7 +159,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
||||
if ui.button("Generate Now").clicked() {
|
||||
let tx = GLOBALS.to_overlord.clone();
|
||||
let _ = tx.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "generate_private_key".to_string(),
|
||||
json_payload: serde_json::to_string(&app.password).unwrap(),
|
||||
});
|
||||
@ -189,7 +187,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
||||
if ui.button("import").clicked() {
|
||||
let tx = GLOBALS.to_overlord.clone();
|
||||
let _ = tx.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "import_priv".to_string(),
|
||||
json_payload: serde_json::to_string(&(&app.import_priv, &app.password)).unwrap(),
|
||||
});
|
||||
@ -228,7 +225,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
||||
|
||||
if ui.button("Delete this public key").clicked() {
|
||||
let _ = GLOBALS.to_overlord.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "delete_pub".to_string(),
|
||||
json_payload: serde_json::to_string(&app.import_pub).unwrap(),
|
||||
});
|
||||
@ -239,7 +235,6 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
||||
ui.add(TextEdit::singleline(&mut app.import_pub).hint_text("npub1 or hex"));
|
||||
if ui.button("Import a Public Key").clicked() {
|
||||
let _ = GLOBALS.to_overlord.send(BusMessage {
|
||||
target: "overlord".to_string(),
|
||||
kind: "import_pub".to_string(),
|
||||
json_payload: serde_json::to_string(&app.import_pub).unwrap(),
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user