summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-06-12 09:41:05 +0800
committerGitHub <noreply@github.com>2024-06-12 09:41:05 +0800
commitfe3a22255d897899d457dbfc4329a8de55fb3ee3 (patch)
tree9d5e9a10f0c2d9a306797f4ffa3c60ef8528b72c /src
parentb24cb6630992631a77414f757bbd72dddf62d2dd (diff)
downloadaichat-fe3a22255d897899d457dbfc4329a8de55fb3ee3.tar.gz
refactor: 'temp' can not be used as name of saved session (#591)
Diffstat (limited to 'src')
-rw-r--r--src/config/mod.rs2
-rw-r--r--src/config/session.rs12
2 files changed, 11 insertions, 3 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs
index 714719a..7e5d6cf 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -686,7 +686,7 @@ impl Config {
}
let mut session;
match session_name {
- None => {
+ None | Some(TEMP_SESSION_NAME) => {
let session_file = self.session_file(TEMP_SESSION_NAME)?;
if session_file.exists() {
remove_file(session_file).with_context(|| {
diff --git a/src/config/session.rs b/src/config/session.rs
index ce9dc7b..2aff467 100644
--- a/src/config/session.rs
+++ b/src/config/session.rs
@@ -5,7 +5,7 @@ use crate::client::{Message, MessageContent, MessageRole};
use crate::render::MarkdownRender;
use anyhow::{bail, Context, Result};
-use inquire::{required, Confirm, Text};
+use inquire::{validator::Validation, Confirm, Text};
use serde::{Deserialize, Serialize};
use serde_json::json;
use std::collections::HashMap;
@@ -306,7 +306,15 @@ impl Session {
}
if self.is_temp() {
self.name = Text::new("Session name:")
- .with_validator(required!("This field is required"))
+ .with_validator(|input: &str| {
+ if input == TEMP_SESSION_NAME {
+ Ok(Validation::Invalid(format!("'{TEMP_SESSION_NAME}' is a reserved word and cannot be used as a session name").into()))
+ } else if input.trim().is_empty() {
+ Ok(Validation::Invalid("This field is required".into()))
+ } else {
+ Ok(Validation::Valid)
+ }
+ })
.prompt()?;
}
}