(&mut self)
| 1985 | } |
| 1986 | |
| 1987 | fn handle_undo(&mut self) { |
| 1988 | let Some(session_id) = self.current_session_id() else { |
| 1989 | self.alert_dialog.set_message("No active session for undo."); |
| 1990 | self.alert_dialog.open(); |
| 1991 | return; |
| 1992 | }; |
| 1993 | let session_ctx = self.context.session.read(); |
| 1994 | let messages = session_ctx.messages.get(&session_id); |
| 1995 | let last_user_msg = messages |
| 1996 | .and_then(|msgs| msgs.iter().rev().find(|m| m.role == MessageRole::User)) |
| 1997 | .map(|m| (m.id.clone(), m.content.clone())); |
| 1998 | drop(session_ctx); |
| 1999 | |
| 2000 | let Some((msg_id, msg_content)) = last_user_msg else { |
| 2001 | self.alert_dialog.set_message("No user message to revert."); |
| 2002 | self.alert_dialog.open(); |
| 2003 | return; |
| 2004 | }; |
| 2005 | let Some(client) = self.context.get_api_client() else { |
| 2006 | return; |
| 2007 | }; |
| 2008 | match client.revert_session(&session_id, &msg_id) { |
| 2009 | Ok(_) => { |
| 2010 | self.prompt.set_input(msg_content); |
| 2011 | let _ = self.sync_session_from_server(&session_id); |
| 2012 | self.alert_dialog |
| 2013 | .set_message("Message reverted. Prompt restored."); |
| 2014 | self.alert_dialog.open(); |
| 2015 | } |
| 2016 | Err(err) => { |
| 2017 | self.alert_dialog |
| 2018 | .set_message(&format!("Failed to revert message:\n{}", err)); |
| 2019 | self.alert_dialog.open(); |
| 2020 | } |
| 2021 | } |
| 2022 | } |
| 2023 | |
| 2024 | fn handle_redo(&mut self) { |
| 2025 | let Some(_session_id) = self.current_session_id() else { |
no test coverage detected