summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-12-19 23:08:23 +0100
committerMatthias Beyer <mail@beyermatthias.de>2021-12-20 09:29:29 +0100
commit5a58021581187d11fb26d0de9d19514e6383956f (patch)
treed22a4fb5735bc72704f2622a4748ec3ba5c6189e
parentdfe25bddacd903154d73ac5ac7054dd1c3f9d754 (diff)
Add gossipping of own state in gui
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--gui/src/app/message.rs8
-rw-r--r--gui/src/app/mod.rs29
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 {