Confirm session deletion

This commit is contained in:
Georg Bauer
2026-07-27 14:18:32 +02:00
parent 8a08cd7b52
commit a90a241ae1
2 changed files with 78 additions and 4 deletions

View File

@@ -65,6 +65,8 @@ pub(crate) struct App {
drafts: HashMap<i32, String>,
/// Session whose quick-actions menu is open.
session_menu: Option<i32>,
/// Session waiting for explicit confirmation before deletion.
pending_session_delete: Option<i32>,
/// Session being renamed, with the in-progress title.
session_rename: Option<(i32, String)>,
/// Projects whose archived sessions are expanded in the sidebar.
@@ -255,7 +257,8 @@ pub(crate) enum Message {
CreateSession(i32),
DiscardSession(i32),
SelectSession(i32, i32),
DeleteSession(i32),
RequestDeleteSession(i32),
ConfirmDeleteSession,
OpenSessionMenu(i32),
StartRenameSession(i32),
SessionTitleChanged(String),
@@ -327,6 +330,7 @@ impl App {
selected_session: None,
drafts,
session_menu: None,
pending_session_delete: None,
session_rename: None,
expanded_archives: HashSet::new(),
sidebar_drag: false,
@@ -446,6 +450,7 @@ impl App {
selected_session: None,
drafts: HashMap::new(),
session_menu: None,
pending_session_delete: None,
session_rename: None,
expanded_archives: HashSet::new(),
sidebar_drag: false,
@@ -556,7 +561,9 @@ impl App {
}
}
Message::DismissPanel => {
if self.pending_a2ui_dismissal.is_some() {
if self.pending_session_delete.is_some() {
self.pending_session_delete = None;
} else if self.pending_a2ui_dismissal.is_some() {
self.pending_a2ui_dismissal = None;
} else if self.session_rename.is_some() || self.session_menu.is_some() {
self.session_rename = None;
@@ -1351,7 +1358,28 @@ impl App {
}
}
}
Message::DeleteSession(session_id) => {
Message::RequestDeleteSession(session_id) => {
if self.generating && self.selected_session == Some(session_id) {
self.error =
Some("Stop the active generation before deleting its session.".into());
return Task::none();
}
if self
.projects
.iter()
.flat_map(|project| &project.sessions)
.any(|session| session.id == session_id)
{
self.pending_session_delete = Some(session_id);
self.session_menu = None;
self.session_rename = None;
self.error = None;
}
}
Message::ConfirmDeleteSession => {
let Some(session_id) = self.pending_session_delete.take() else {
return Task::none();
};
if self.generating && self.selected_session == Some(session_id) {
self.error =
Some("Stop the active generation before deleting its session.".into());