mirror of
https://github.com/mikedilger/gossip.git
synced 2024-09-19 03:33:53 +00:00
ToOverordMessage switched to an enum (3 benefits):
1. Can send data that cannot be serialized 2. Stronger typing (found 2-3 bugs in this commit via the typing) 3. No cost of serialization/deserialization
This commit is contained in:
parent
2dc24a2124
commit
d4fbce40e7
41
src/comms.rs
41
src/comms.rs
@ -1,24 +1,27 @@
|
|||||||
use nostr_types::{Event, Id, IdHex, PublicKeyHex};
|
use nostr_types::{Event, Id, IdHex, PublicKey, PublicKeyHex};
|
||||||
use serde::Serialize;
|
|
||||||
use std::ops::Drop;
|
|
||||||
use zeroize::Zeroize;
|
|
||||||
|
|
||||||
/// This is a message sent to the Overlord
|
/// This is a message sent to the Overlord
|
||||||
#[derive(Debug, Clone, Serialize)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct ToOverlordMessage {
|
pub enum ToOverlordMessage {
|
||||||
/// What kind of message is this
|
AddRelay(String),
|
||||||
pub kind: String,
|
DeletePub,
|
||||||
|
FollowBech32(String, String),
|
||||||
/// The payload, serialized as a JSON string
|
FollowHex(String, String),
|
||||||
pub json_payload: String,
|
FollowNip35(String),
|
||||||
}
|
GeneratePrivateKey(String),
|
||||||
|
GetMissingEvents,
|
||||||
/// We may send passwords through ToOverlordMessage objects, so we zeroize
|
ImportPriv(String, String),
|
||||||
/// bus message payloads upon drop.
|
ImportPub(String),
|
||||||
impl Drop for ToOverlordMessage {
|
Like(Id, PublicKey),
|
||||||
fn drop(&mut self) {
|
MinionIsReady,
|
||||||
self.json_payload.zeroize();
|
ProcessIncomingEvents,
|
||||||
}
|
PostReply(String, Id),
|
||||||
|
PostTextNote(String),
|
||||||
|
SaveRelays,
|
||||||
|
SaveSettings,
|
||||||
|
Shutdown,
|
||||||
|
UnlockKey(String),
|
||||||
|
UpdateMetadata(PublicKeyHex),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This is a message sent to the minions
|
/// This is a message sent to the minions
|
||||||
|
@ -92,9 +92,6 @@ async fn tokio_main() {
|
|||||||
// Any task can call this to shutdown
|
// Any task can call this to shutdown
|
||||||
pub fn initiate_shutdown() -> Result<(), Error> {
|
pub fn initiate_shutdown() -> Result<(), Error> {
|
||||||
let to_overlord = GLOBALS.to_overlord.clone();
|
let to_overlord = GLOBALS.to_overlord.clone();
|
||||||
let _ = to_overlord.send(ToOverlordMessage {
|
let _ = to_overlord.send(ToOverlordMessage::Shutdown); // ignore errors
|
||||||
kind: "shutdown".to_string(),
|
|
||||||
json_payload: serde_json::to_string("").unwrap(),
|
|
||||||
}); // ignore errors
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -262,11 +262,7 @@ impl Minion {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn tell_overlord_we_are_ready(&self) -> Result<(), Error> {
|
async fn tell_overlord_we_are_ready(&self) -> Result<(), Error> {
|
||||||
self.to_overlord.send(ToOverlordMessage {
|
self.to_overlord.send(ToOverlordMessage::MinionIsReady)?;
|
||||||
kind: "minion_is_ready".to_string(),
|
|
||||||
json_payload: "".to_owned(),
|
|
||||||
})?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,55 +356,29 @@ impl Overlord {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn handle_message(&mut self, message: ToOverlordMessage) -> Result<bool, Error> {
|
async fn handle_message(&mut self, message: ToOverlordMessage) -> Result<bool, Error> {
|
||||||
#[allow(clippy::single_match)] // because temporarily so
|
match message {
|
||||||
match &*message.kind {
|
ToOverlordMessage::AddRelay(relay_str) => {
|
||||||
"shutdown" => {
|
let dbrelay = DbRelay::new(relay_str)?;
|
||||||
tracing::info!("Overlord shutting down");
|
DbRelay::insert(dbrelay).await?;
|
||||||
return Ok(false);
|
|
||||||
}
|
}
|
||||||
"minion_is_ready" => {}
|
ToOverlordMessage::DeletePub => {
|
||||||
"save_settings" => {
|
GLOBALS.signer.write().await.clear_public_key();
|
||||||
GLOBALS.settings.read().await.save().await?;
|
GLOBALS.signer.read().await.save_through_settings().await?;
|
||||||
tracing::debug!("Settings saved.");
|
|
||||||
}
|
}
|
||||||
"get_missing_events" => {
|
ToOverlordMessage::FollowBech32(bech32, relay) => {
|
||||||
self.get_missing_events().await?;
|
Overlord::follow_bech32(bech32, relay).await?;
|
||||||
}
|
}
|
||||||
"follow_nip35" => {
|
ToOverlordMessage::FollowHex(hex, relay) => {
|
||||||
let dns_id: String = serde_json::from_str(&message.json_payload)?;
|
Overlord::follow_hexkey(hex, relay).await?;
|
||||||
|
}
|
||||||
|
ToOverlordMessage::FollowNip35(dns_id) => {
|
||||||
let _ = tokio::spawn(async move {
|
let _ = tokio::spawn(async move {
|
||||||
if let Err(e) = Overlord::get_and_follow_nip35(dns_id).await {
|
if let Err(e) = Overlord::get_and_follow_nip35(dns_id).await {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
"follow_bech32" => {
|
ToOverlordMessage::GeneratePrivateKey(mut password) => {
|
||||||
let data: (String, String) = serde_json::from_str(&message.json_payload)?;
|
|
||||||
Overlord::follow_bech32(data.0, data.1).await?;
|
|
||||||
}
|
|
||||||
"follow_hexkey" => {
|
|
||||||
let data: (String, String) = serde_json::from_str(&message.json_payload)?;
|
|
||||||
Overlord::follow_hexkey(data.0, data.1).await?;
|
|
||||||
}
|
|
||||||
"unlock_key" => {
|
|
||||||
let mut password: String = serde_json::from_str(&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?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"generate_private_key" => {
|
|
||||||
let mut password: String = serde_json::from_str(&message.json_payload)?;
|
|
||||||
GLOBALS
|
GLOBALS
|
||||||
.signer
|
.signer
|
||||||
.write()
|
.write()
|
||||||
@ -413,9 +387,10 @@ impl Overlord {
|
|||||||
password.zeroize();
|
password.zeroize();
|
||||||
GLOBALS.signer.read().await.save_through_settings().await?;
|
GLOBALS.signer.read().await.save_through_settings().await?;
|
||||||
}
|
}
|
||||||
"import_priv" => {
|
ToOverlordMessage::GetMissingEvents => {
|
||||||
let (mut import_priv, mut password): (String, String) =
|
self.get_missing_events().await?;
|
||||||
serde_json::from_str(&message.json_payload)?;
|
}
|
||||||
|
ToOverlordMessage::ImportPriv(mut import_priv, mut password) => {
|
||||||
let maybe_pk1 = PrivateKey::try_from_bech32_string(&import_priv);
|
let maybe_pk1 = PrivateKey::try_from_bech32_string(&import_priv);
|
||||||
let maybe_pk2 = PrivateKey::try_from_hex_string(&import_priv);
|
let maybe_pk2 = PrivateKey::try_from_hex_string(&import_priv);
|
||||||
import_priv.zeroize();
|
import_priv.zeroize();
|
||||||
@ -434,8 +409,7 @@ impl Overlord {
|
|||||||
GLOBALS.signer.read().await.save_through_settings().await?;
|
GLOBALS.signer.read().await.save_through_settings().await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"import_pub" => {
|
ToOverlordMessage::ImportPub(pubstr) => {
|
||||||
let pubstr: String = serde_json::from_str(&message.json_payload)?;
|
|
||||||
let maybe_pk1 = PublicKey::try_from_bech32_string(&pubstr);
|
let maybe_pk1 = PublicKey::try_from_bech32_string(&pubstr);
|
||||||
let maybe_pk2 = PublicKey::try_from_hex_string(&pubstr);
|
let maybe_pk2 = PublicKey::try_from_hex_string(&pubstr);
|
||||||
if maybe_pk1.is_err() && maybe_pk2.is_err() {
|
if maybe_pk1.is_err() && maybe_pk2.is_err() {
|
||||||
@ -446,11 +420,30 @@ impl Overlord {
|
|||||||
GLOBALS.signer.read().await.save_through_settings().await?;
|
GLOBALS.signer.read().await.save_through_settings().await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"delete_pub" => {
|
ToOverlordMessage::Like(id, pubkey) => {
|
||||||
GLOBALS.signer.write().await.clear_public_key();
|
self.post_like(id, pubkey).await?;
|
||||||
GLOBALS.signer.read().await.save_through_settings().await?;
|
|
||||||
}
|
}
|
||||||
"save_relays" => {
|
ToOverlordMessage::MinionIsReady => {
|
||||||
|
// currently ignored
|
||||||
|
}
|
||||||
|
ToOverlordMessage::ProcessIncomingEvents => {
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
ToOverlordMessage::PostReply(content, reply_to) => {
|
||||||
|
self.post_reply(content, reply_to).await?;
|
||||||
|
}
|
||||||
|
ToOverlordMessage::PostTextNote(content) => {
|
||||||
|
self.post_textnote(content).await?;
|
||||||
|
}
|
||||||
|
ToOverlordMessage::SaveRelays => {
|
||||||
let dirty_relays: Vec<DbRelay> = GLOBALS
|
let dirty_relays: Vec<DbRelay> = GLOBALS
|
||||||
.relays
|
.relays
|
||||||
.read()
|
.read()
|
||||||
@ -468,37 +461,31 @@ impl Overlord {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"post_textnote" => {
|
ToOverlordMessage::SaveSettings => {
|
||||||
let content: String = serde_json::from_str(&message.json_payload)?;
|
GLOBALS.settings.read().await.save().await?;
|
||||||
self.post_textnote(content).await?;
|
tracing::debug!("Settings saved.");
|
||||||
}
|
}
|
||||||
"post_reply" => {
|
ToOverlordMessage::Shutdown => {
|
||||||
let (content, reply_to): (String, Id) =
|
tracing::info!("Overlord shutting down");
|
||||||
serde_json::from_str(&message.json_payload)?;
|
return Ok(false);
|
||||||
self.post_reply(content, reply_to).await?;
|
|
||||||
}
|
}
|
||||||
"like" => {
|
ToOverlordMessage::UnlockKey(mut password) => {
|
||||||
let (id, pubkey): (Id, PublicKey) = serde_json::from_str(&message.json_payload)?;
|
GLOBALS
|
||||||
self.post_like(id, pubkey).await?;
|
.signer
|
||||||
}
|
.write()
|
||||||
"process_incoming_events" => {
|
.await
|
||||||
// Clear new events
|
.unlock_encrypted_private_key(&password)?;
|
||||||
GLOBALS.event_is_new.write().await.clear();
|
password.zeroize();
|
||||||
|
|
||||||
let _ = tokio::spawn(async move {
|
// Update public key from private key
|
||||||
for (event, url, sub) in GLOBALS.incoming_events.write().await.drain(..) {
|
let public_key = GLOBALS.signer.read().await.public_key().unwrap();
|
||||||
let _ =
|
{
|
||||||
crate::process::process_new_event(&event, true, Some(url), sub).await;
|
let mut settings = GLOBALS.settings.write().await;
|
||||||
}
|
settings.public_key = Some(public_key);
|
||||||
});
|
settings.save().await?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
"add_relay" => {
|
ToOverlordMessage::UpdateMetadata(pubkey) => {
|
||||||
let relay_str: String = serde_json::from_str(&message.json_payload)?;
|
|
||||||
let dbrelay = DbRelay::new(relay_str)?;
|
|
||||||
DbRelay::insert(dbrelay).await?;
|
|
||||||
}
|
|
||||||
"update_metadata" => {
|
|
||||||
let pubkey: PublicKeyHex = serde_json::from_str(&message.json_payload)?;
|
|
||||||
let person_relays = DbPersonRelay::fetch_for_pubkeys(&[pubkey.clone()]).await?;
|
let person_relays = DbPersonRelay::fetch_for_pubkeys(&[pubkey.clone()]).await?;
|
||||||
|
|
||||||
for person_relay in person_relays.iter() {
|
for person_relay in person_relays.iter() {
|
||||||
@ -514,7 +501,6 @@ impl Overlord {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(true)
|
Ok(true)
|
||||||
|
@ -84,10 +84,9 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram
|
|||||||
.on_hover_text("Query Relays for Missing Events")
|
.on_hover_text("Query Relays for Missing Events")
|
||||||
.clicked()
|
.clicked()
|
||||||
{
|
{
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS
|
||||||
kind: "get_missing_events".to_string(),
|
.to_overlord
|
||||||
json_payload: serde_json::to_string("").unwrap(),
|
.send(ToOverlordMessage::GetMissingEvents);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hide for now, as they are processed automatically at present
|
/* Hide for now, as they are processed automatically at present
|
||||||
@ -96,10 +95,7 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram
|
|||||||
.on_hover_text("Process Queue of Incoming Events")
|
.on_hover_text("Process Queue of Incoming Events")
|
||||||
.clicked()
|
.clicked()
|
||||||
{
|
{
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS.to_overlord.send(ToOverlordMessage::ProcessIncomingEvents);
|
||||||
kind: "process_incoming_events".to_string(),
|
|
||||||
json_payload: serde_json::to_string("").unwrap(),
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -149,21 +145,16 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, frame: &mut eframe::Fram
|
|||||||
ui.with_layout(Layout::right_to_left(Align::TOP), |ui| {
|
ui.with_layout(Layout::right_to_left(Align::TOP), |ui| {
|
||||||
if ui.button("Send").clicked() && !app.draft.is_empty() {
|
if ui.button("Send").clicked() && !app.draft.is_empty() {
|
||||||
match app.replying_to {
|
match app.replying_to {
|
||||||
Some(_id) => {
|
Some(replying_to_id) => {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS.to_overlord.send(ToOverlordMessage::PostReply(
|
||||||
kind: "post_reply".to_string(),
|
app.draft.clone(),
|
||||||
json_payload: serde_json::to_string(&(
|
replying_to_id,
|
||||||
&app.draft,
|
));
|
||||||
&app.replying_to,
|
|
||||||
))
|
|
||||||
.unwrap(),
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS
|
||||||
kind: "post_textnote".to_string(),
|
.to_overlord
|
||||||
json_payload: serde_json::to_string(&app.draft).unwrap(),
|
.send(ToOverlordMessage::PostTextNote(app.draft.clone()));
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
app.draft = "".to_owned();
|
app.draft = "".to_owned();
|
||||||
@ -449,13 +440,9 @@ fn render_post_actual(
|
|||||||
GLOBALS.dismissed.blocking_write().push(event.id);
|
GLOBALS.dismissed.blocking_write().push(event.id);
|
||||||
}
|
}
|
||||||
if ui.button("Update Metadata").clicked() {
|
if ui.button("Update Metadata").clicked() {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS
|
||||||
kind: "update_metadata".to_string(),
|
.to_overlord
|
||||||
json_payload: serde_json::to_string(
|
.send(ToOverlordMessage::UpdateMetadata(event.pubkey.into()));
|
||||||
&event.pubkey.as_hex_string(),
|
|
||||||
)
|
|
||||||
.unwrap(),
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -494,11 +481,9 @@ fn render_post_actual(
|
|||||||
ui.add_space(24.0);
|
ui.add_space(24.0);
|
||||||
|
|
||||||
if ui.add(LikeButton {}).clicked() {
|
if ui.add(LikeButton {}).clicked() {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS
|
||||||
kind: "like".to_string(),
|
.to_overlord
|
||||||
json_payload: serde_json::to_string(&(&event.id, &event.pubkey))
|
.send(ToOverlordMessage::Like(event.id, event.pubkey));
|
||||||
.unwrap(),
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
for (ch, count) in reactions.iter() {
|
for (ch, count) in reactions.iter() {
|
||||||
if *ch == '+' {
|
if *ch == '+' {
|
||||||
|
@ -24,10 +24,9 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
|||||||
ui.add(TextEdit::singleline(&mut app.nip35follow).hint_text("user@domain"));
|
ui.add(TextEdit::singleline(&mut app.nip35follow).hint_text("user@domain"));
|
||||||
});
|
});
|
||||||
if ui.button("follow").clicked() {
|
if ui.button("follow").clicked() {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS
|
||||||
kind: "follow_nip35".to_string(),
|
.to_overlord
|
||||||
json_payload: serde_json::to_string(&app.nip35follow).unwrap(),
|
.send(ToOverlordMessage::FollowNip35(app.nip35follow.clone()));
|
||||||
});
|
|
||||||
app.nip35follow = "".to_owned();
|
app.nip35follow = "".to_owned();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,14 +45,10 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
|||||||
ui.add(TextEdit::singleline(&mut app.follow_pubkey_at_relay).hint_text("wss://..."));
|
ui.add(TextEdit::singleline(&mut app.follow_pubkey_at_relay).hint_text("wss://..."));
|
||||||
});
|
});
|
||||||
if ui.button("follow").clicked() {
|
if ui.button("follow").clicked() {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS.to_overlord.send(ToOverlordMessage::FollowBech32(
|
||||||
kind: "follow_bech32".to_string(),
|
app.follow_bech32_pubkey.clone(),
|
||||||
json_payload: serde_json::to_string(&(
|
app.follow_pubkey_at_relay.clone(),
|
||||||
&app.follow_bech32_pubkey,
|
));
|
||||||
&app.follow_pubkey_at_relay,
|
|
||||||
))
|
|
||||||
.unwrap(),
|
|
||||||
});
|
|
||||||
app.follow_bech32_pubkey = "".to_owned();
|
app.follow_bech32_pubkey = "".to_owned();
|
||||||
app.follow_pubkey_at_relay = "".to_owned();
|
app.follow_pubkey_at_relay = "".to_owned();
|
||||||
}
|
}
|
||||||
@ -73,14 +68,10 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
|||||||
ui.add(TextEdit::singleline(&mut app.follow_pubkey_at_relay).hint_text("wss://..."));
|
ui.add(TextEdit::singleline(&mut app.follow_pubkey_at_relay).hint_text("wss://..."));
|
||||||
});
|
});
|
||||||
if ui.button("follow").clicked() {
|
if ui.button("follow").clicked() {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS.to_overlord.send(ToOverlordMessage::FollowHex(
|
||||||
kind: "follow_hexkey".to_string(),
|
app.follow_hex_pubkey.clone(),
|
||||||
json_payload: serde_json::to_string(&(
|
app.follow_pubkey_at_relay.clone(),
|
||||||
&app.follow_hex_pubkey,
|
));
|
||||||
&app.follow_pubkey_at_relay,
|
|
||||||
))
|
|
||||||
.unwrap(),
|
|
||||||
});
|
|
||||||
app.follow_hex_pubkey = "".to_owned();
|
app.follow_hex_pubkey = "".to_owned();
|
||||||
app.follow_pubkey_at_relay = "".to_owned();
|
app.follow_pubkey_at_relay = "".to_owned();
|
||||||
}
|
}
|
||||||
|
@ -57,10 +57,9 @@ pub(super) fn update(app: &mut GossipUi, ctx: &Context, _frame: &mut eframe::Fra
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ui.button("UPDATE METADATA").clicked() {
|
if ui.button("UPDATE METADATA").clicked() {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS
|
||||||
kind: "update_metadata".to_string(),
|
.to_overlord
|
||||||
json_payload: serde_json::to_string(&pubkeyhex).unwrap(),
|
.send(ToOverlordMessage::UpdateMetadata(pubkeyhex.clone()));
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ui.button("VIEW THEIR FEED").clicked() {
|
if ui.button("VIEW THEIR FEED").clicked() {
|
||||||
|
@ -24,10 +24,9 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
|||||||
if ui.button("Add").clicked() {
|
if ui.button("Add").clicked() {
|
||||||
let test_url = Url::new(&app.new_relay_url);
|
let test_url = Url::new(&app.new_relay_url);
|
||||||
if test_url.is_valid_relay_url() {
|
if test_url.is_valid_relay_url() {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS
|
||||||
kind: "add_relay".to_string(),
|
.to_overlord
|
||||||
json_payload: serde_json::to_string(&app.new_relay_url).unwrap(),
|
.send(ToOverlordMessage::AddRelay(app.new_relay_url.clone()));
|
||||||
});
|
|
||||||
app.new_relay_url = "".to_owned();
|
app.new_relay_url = "".to_owned();
|
||||||
*GLOBALS.status_message.blocking_write() = format!(
|
*GLOBALS.status_message.blocking_write() = format!(
|
||||||
"I asked the overlord to add relay {}. Check for it below.",
|
"I asked the overlord to add relay {}. Check for it below.",
|
||||||
@ -59,10 +58,7 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
|||||||
|
|
||||||
ui.with_layout(Layout::bottom_up(Align::Center), |ui| {
|
ui.with_layout(Layout::bottom_up(Align::Center), |ui| {
|
||||||
if ui.button("SAVE CHANGES").clicked() {
|
if ui.button("SAVE CHANGES").clicked() {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS.to_overlord.send(ToOverlordMessage::SaveRelays);
|
||||||
kind: "save_relays".to_string(),
|
|
||||||
json_payload: serde_json::to_string("").unwrap(),
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ui.with_layout(Layout::top_down(Align::Center), |ui| {
|
ui.with_layout(Layout::top_down(Align::Center), |ui| {
|
||||||
|
@ -151,10 +151,7 @@ pub(super) fn update(
|
|||||||
*GLOBALS.settings.blocking_write() = app.settings.clone();
|
*GLOBALS.settings.blocking_write() = app.settings.clone();
|
||||||
|
|
||||||
// Tell the overlord to save them
|
// Tell the overlord to save them
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS.to_overlord.send(ToOverlordMessage::SaveSettings);
|
||||||
kind: "save_settings".to_string(),
|
|
||||||
json_payload: serde_json::to_string("").unwrap(),
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -141,10 +141,9 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
|||||||
});
|
});
|
||||||
|
|
||||||
if ui.button("Unlock Private Key").clicked() {
|
if ui.button("Unlock Private Key").clicked() {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS
|
||||||
kind: "unlock_key".to_string(),
|
.to_overlord
|
||||||
json_payload: serde_json::to_string(&app.password).unwrap(),
|
.send(ToOverlordMessage::UnlockKey(app.password.clone()));
|
||||||
});
|
|
||||||
app.password.zeroize();
|
app.password.zeroize();
|
||||||
app.password = "".to_owned();
|
app.password = "".to_owned();
|
||||||
}
|
}
|
||||||
@ -156,10 +155,9 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
|||||||
ui.add(TextEdit::singleline(&mut app.password).password(true));
|
ui.add(TextEdit::singleline(&mut app.password).password(true));
|
||||||
});
|
});
|
||||||
if ui.button("Generate Now").clicked() {
|
if ui.button("Generate Now").clicked() {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS
|
||||||
kind: "generate_private_key".to_string(),
|
.to_overlord
|
||||||
json_payload: serde_json::to_string(&app.password).unwrap(),
|
.send(ToOverlordMessage::GeneratePrivateKey(app.password.clone()));
|
||||||
});
|
|
||||||
app.password.zeroize();
|
app.password.zeroize();
|
||||||
app.password = "".to_owned();
|
app.password = "".to_owned();
|
||||||
}
|
}
|
||||||
@ -183,10 +181,10 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
|||||||
ui.add(TextEdit::singleline(&mut app.password).password(true));
|
ui.add(TextEdit::singleline(&mut app.password).password(true));
|
||||||
});
|
});
|
||||||
if ui.button("import").clicked() {
|
if ui.button("import").clicked() {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS.to_overlord.send(ToOverlordMessage::ImportPriv(
|
||||||
kind: "import_priv".to_string(),
|
app.import_priv.clone(),
|
||||||
json_payload: serde_json::to_string(&(&app.import_priv, &app.password)).unwrap(),
|
app.password.clone(),
|
||||||
});
|
));
|
||||||
app.import_priv.zeroize();
|
app.import_priv.zeroize();
|
||||||
app.import_priv = "".to_owned();
|
app.import_priv = "".to_owned();
|
||||||
app.password.zeroize();
|
app.password.zeroize();
|
||||||
@ -221,20 +219,16 @@ pub(super) fn update(app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::Fr
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ui.button("Delete this public key").clicked() {
|
if ui.button("Delete this public key").clicked() {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS.to_overlord.send(ToOverlordMessage::DeletePub);
|
||||||
kind: "delete_pub".to_string(),
|
|
||||||
json_payload: serde_json::to_string(&app.import_pub).unwrap(),
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ui.horizontal_wrapped(|ui| {
|
ui.horizontal_wrapped(|ui| {
|
||||||
ui.label("Enter your public key");
|
ui.label("Enter your public key");
|
||||||
ui.add(TextEdit::singleline(&mut app.import_pub).hint_text("npub1 or hex"));
|
ui.add(TextEdit::singleline(&mut app.import_pub).hint_text("npub1 or hex"));
|
||||||
if ui.button("Import a Public Key").clicked() {
|
if ui.button("Import a Public Key").clicked() {
|
||||||
let _ = GLOBALS.to_overlord.send(ToOverlordMessage {
|
let _ = GLOBALS
|
||||||
kind: "import_pub".to_string(),
|
.to_overlord
|
||||||
json_payload: serde_json::to_string(&app.import_pub).unwrap(),
|
.send(ToOverlordMessage::ImportPub(app.import_pub.clone()));
|
||||||
});
|
|
||||||
app.import_pub = "".to_owned();
|
app.import_pub = "".to_owned();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user