feat: better session creation handling
This commit is contained in:
14
src/app.rs
14
src/app.rs
@@ -27,7 +27,7 @@ use crate::settings::{
|
||||
use iced::widget::{markdown, scrollable};
|
||||
use iced::{Size, Subscription, Task, keyboard, window};
|
||||
use rfd::AsyncFileDialog;
|
||||
use std::collections::VecDeque;
|
||||
use std::collections::{HashMap, VecDeque};
|
||||
use std::fs;
|
||||
use std::path::PathBuf;
|
||||
use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
|
||||
@@ -55,6 +55,9 @@ pub(crate) struct App {
|
||||
preference_error: Option<String>,
|
||||
selected_project: Option<i32>,
|
||||
selected_session: Option<i32>,
|
||||
/// Unsaved sessions, keyed by project. A draft only becomes a `sessions` row
|
||||
/// when its first chat turn is stored, so empty ones vanish on restart.
|
||||
drafts: HashMap<i32, String>,
|
||||
choosing_folder: bool,
|
||||
pending_project_path: Option<PathBuf>,
|
||||
project_name_input: String,
|
||||
@@ -163,7 +166,8 @@ pub(crate) enum Message {
|
||||
CancelProject,
|
||||
SelectProject(i32),
|
||||
DeleteProject(i32),
|
||||
CreateSession,
|
||||
CreateSession(i32),
|
||||
DiscardSession(i32),
|
||||
SelectSession(i32, i32),
|
||||
DeleteSession(i32),
|
||||
ShowChat,
|
||||
@@ -204,6 +208,7 @@ impl App {
|
||||
preference_error: None,
|
||||
selected_project: None,
|
||||
selected_session: None,
|
||||
drafts: HashMap::new(),
|
||||
choosing_folder: false,
|
||||
pending_project_path: None,
|
||||
project_name_input: String::new(),
|
||||
@@ -275,6 +280,7 @@ impl App {
|
||||
preference_error: None,
|
||||
selected_project: None,
|
||||
selected_session: None,
|
||||
drafts: HashMap::new(),
|
||||
choosing_folder: false,
|
||||
pending_project_path: None,
|
||||
project_name_input: String::new(),
|
||||
@@ -675,6 +681,7 @@ impl App {
|
||||
for session_id in checkpoint_ids {
|
||||
let _ = fs::remove_file(session_checkpoint_path(session_id));
|
||||
}
|
||||
self.drafts.remove(&project_id);
|
||||
if self.selected_project == Some(project_id) {
|
||||
self.selected_project = None;
|
||||
self.selected_session = None;
|
||||
@@ -689,7 +696,8 @@ impl App {
|
||||
}
|
||||
}
|
||||
}
|
||||
Message::CreateSession => self.create_session(),
|
||||
Message::CreateSession(project_id) => self.create_session(project_id),
|
||||
Message::DiscardSession(project_id) => self.discard_session(project_id),
|
||||
Message::SelectSession(project_id, session_id) => {
|
||||
if self.generating && self.selected_session != Some(session_id) {
|
||||
self.error =
|
||||
|
||||
Reference in New Issue
Block a user