diff --git a/data/src/history/manager.rs b/data/src/history/manager.rs index 911889c9..9a49f9bf 100644 --- a/data/src/history/manager.rs +++ b/data/src/history/manager.rs @@ -272,7 +272,9 @@ impl Manager { .cloned(); let messages = match broadcast { - Broadcast::Disconnected => message::broadcast::disconnected(channels, queries), + Broadcast::Disconnected { error } => { + message::broadcast::disconnected(channels, queries, error) + } Broadcast::Reconnected => message::broadcast::reconnected(channels, queries), Broadcast::Quit { user, @@ -472,7 +474,9 @@ impl Data { #[derive(Debug, Clone)] pub enum Broadcast { - Disconnected, + Disconnected { + error: Option, + }, Reconnected, Quit { user: User, diff --git a/data/src/message.rs b/data/src/message.rs index 182b9a7c..82190724 100644 --- a/data/src/message.rs +++ b/data/src/message.rs @@ -421,8 +421,10 @@ pub(crate) mod broadcast { pub fn disconnected( channels: impl IntoIterator, queries: impl IntoIterator, + error: Option, ) -> Vec { - let text = " ∙ connection to server lost".into(); + let error = error.map(|error| format!(" ({error})")).unwrap_or_default(); + let text = format!(" ∙ connection to server lost{error}"); expand(channels, queries, true, text) } diff --git a/data/src/stream.rs b/data/src/stream.rs index d89a6af3..51b44137 100644 --- a/data/src/stream.rs +++ b/data/src/stream.rs @@ -27,6 +27,7 @@ pub enum Update { Disconnected { server: Server, is_initial: bool, + error: Option, }, MessagesReceived(Server, Vec), } @@ -58,6 +59,7 @@ pub async fn run(server: server::Entry, mut sender: mpsc::Sender) -> Nev .send(Update::Disconnected { server: server.clone(), is_initial, + error: None, }) .await; @@ -114,6 +116,7 @@ pub async fn run(server: server::Entry, mut sender: mpsc::Sender) -> Nev .send(Update::Disconnected { server: server.clone(), is_initial, + error: Some(e.to_string()), }) .await; state = State::Disconnected { diff --git a/src/main.rs b/src/main.rs index f0f63ad2..4884af05 100644 --- a/src/main.rs +++ b/src/main.rs @@ -282,7 +282,11 @@ impl Application for Halloy { Command::none() } Message::Stream(update) => match update { - stream::Update::Disconnected { server, is_initial } => { + stream::Update::Disconnected { + server, + is_initial, + error, + } => { self.clients.disconnected(server.clone()); if !is_initial { @@ -290,7 +294,7 @@ impl Application for Halloy { return Command::none() }; - dashboard.broadcast_disconnected(&server); + dashboard.broadcast_disconnected(&server, error); } Command::none() diff --git a/src/screen/dashboard.rs b/src/screen/dashboard.rs index 34192dbd..fbe33959 100644 --- a/src/screen/dashboard.rs +++ b/src/screen/dashboard.rs @@ -534,8 +534,9 @@ impl Dashboard { ); } - pub fn broadcast_disconnected(&mut self, server: &Server) { - self.history.broadcast(server, Broadcast::Disconnected); + pub fn broadcast_disconnected(&mut self, server: &Server, error: Option) { + self.history + .broadcast(server, Broadcast::Disconnected { error }); } pub fn broadcast_reconnected(&mut self, server: &Server) {