diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2021-12-19 23:08:23 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-12-20 09:29:29 +0100 |
commit | 5a58021581187d11fb26d0de9d19514e6383956f (patch) | |
tree | d22a4fb5735bc72704f2622a4748ec3ba5c6189e | |
parent | dfe25bddacd903154d73ac5ac7054dd1c3f9d754 (diff) |
Add gossipping of own state in gui
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | gui/src/app/message.rs | 8 | ||||
-rw-r--r-- | gui/src/app/mod.rs | 29 |
2 files changed, 37 insertions, 0 deletions
diff --git a/gui/src/app/message.rs b/gui/src/app/message.rs index baffa31..dcb7477 100644 --- a/gui/src/app/message.rs +++ b/gui/src/app/message.rs @@ -18,6 +18,10 @@ pub enum Message { GossipSubscriptionFailed(String), GossipHandled(GossipMessage), + PublishGossipAboutMe, + OwnStateGossipped, + GossippingFailed(String), + InputChanged(String), CreatePost, @@ -41,6 +45,10 @@ impl Message { Message::GossipSubscriptionFailed(_) => "GossipSubscriptionFailed", Message::GossipHandled(_) => "GossipHandled", + Message::PublishGossipAboutMe => "PublishGossipAboutMe", + Message::OwnStateGossipped => "OwnStateGossipped", + Message::GossippingFailed(_) => "GossippingFailed", + Message::InputChanged(_) => "InputChanged", Message::CreatePost => "CreatePost", diff --git a/gui/src/app/mod.rs b/gui/src/app/mod.rs index 4426e2d..77f6c9d 100644 --- a/gui/src/app/mod.rs +++ b/gui/src/app/mod.rs @@ -178,6 +178,29 @@ impl Application for Distrox { iced::Command::none() } + Message::PublishGossipAboutMe => { + let profile = profile.clone(); + iced::Command::perform(async move { + if let Err(e) = profile.gossip_own_state("distrox".to_string()).await { + Message::GossippingFailed(e.to_string()) + } else { + Message::OwnStateGossipped + } + }, |m: Message| -> Message { m }) + } + + Message::OwnStateGossipped => { + log::trace!("Gossipped own state"); + log.push_back("Gossipped own state".to_string()); + iced::Command::none() + } + + Message::GossippingFailed(e) => { + log::trace!("Gossipped failed: {}", e); + log.push_back(format!("Gossipped failed: {}", e)); + iced::Command::none() + } + _ => iced::Command::none(), } } @@ -313,9 +336,15 @@ impl Application for Distrox { _ => None, }; + let gossip_sending_sub = { + iced::time::every(std::time::Duration::from_millis(100)) + .map(|_| Message::PublishGossipAboutMe) + }; + let mut subscriptions = vec![ post_loading_subs, keyboard_subs, + gossip_sending_sub, ]; if let Some(gossip_sub) = gossip_sub { |