From 8f144989695e089fe3b3e7f4e97ac2b862574bd3 Mon Sep 17 00:00:00 2001 From: sigoden Date: Sat, 9 Mar 2024 22:28:36 +0800 Subject: fix: erratic behaviour when using temp role in a session (#347) --- src/config/mod.rs | 4 ++++ src/repl/mod.rs | 23 ++++++++++++++--------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/config/mod.rs b/src/config/mod.rs index d616f65..65b573a 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -653,6 +653,10 @@ impl Config { Ok(()) } + pub fn has_session(&self) -> bool { + self.session.is_some() + } + pub fn clear_session_messages(&mut self) -> Result<()> { if let Some(session) = self.session.as_mut() { session.clear_messages(); diff --git a/src/repl/mod.rs b/src/repl/mod.rs index 4c5540c..51a88bb 100644 --- a/src/repl/mod.rs +++ b/src/repl/mod.rs @@ -174,15 +174,20 @@ impl Repl { ".role" => match args { Some(args) => match args.split_once(|c| c == '\n' || c == ' ') { Some((name, text)) => { - let name = name.trim(); - let text = text.trim(); - let old_role = - self.config.read().role.as_ref().map(|v| v.name.to_string()); - self.config.write().set_role(name)?; - self.ask(text, vec![])?; - match old_role { - Some(old_role) => self.config.write().set_role(&old_role)?, - None => self.config.write().clear_role()?, + if self.config.read().has_session() { + bail!(r#"Cannot perform this action in a session"#); + } else { + let name = name.trim(); + let text = text.trim(); + let old_role = + self.config.read().role.as_ref().map(|v| v.name.to_string()); + self.config.write().set_role(name)?; + let ask_ret = self.ask(text, vec![]); + match old_role { + Some(old_role) => self.config.write().set_role(&old_role)?, + None => self.config.write().clear_role()?, + } + ask_ret?; } } None => { -- cgit v1.2.3