From 5a58021581187d11fb26d0de9d19514e6383956f Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sun, 19 Dec 2021 23:08:23 +0100 Subject: Add gossipping of own state in gui Signed-off-by: Matthias Beyer --- gui/src/app/message.rs | 8 ++++++++ gui/src/app/mod.rs | 29 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) 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 { -- cgit v1.2.3