From 596ac1eb58d0c228f9b14b681abe959022335fb3 Mon Sep 17 00:00:00 2001 From: helwd Date: Thu, 12 Mar 2026 23:13:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=AB=E6=8F=8F=20Gemini=20history/?= =?UTF-8?q?=20=E7=9B=AE=E5=BD=95=E5=B9=B6=E6=94=AF=E6=8C=81=E6=8C=89?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E5=90=8D=E6=90=9C=E7=B4=A2=E4=BC=9A=E8=AF=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - gemini.rs: list_chat_files() 同时扫描 tmp/(进行中)和 history/ (已归档)目录,修复已完成的 Gemini 会话不可见的问题 - conversations.rs: 搜索过滤新增 model 字段匹配, 支持按模型名搜索会话(如 'gemini-2.5-pro'、'claude-sonnet') --- src-tauri/src/commands/conversations.rs | 4 ++++ src-tauri/src/parsers/gemini.rs | 23 ++++++++++++++--------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src-tauri/src/commands/conversations.rs b/src-tauri/src/commands/conversations.rs index a62c55c..034a9ce 100644 --- a/src-tauri/src/commands/conversations.rs +++ b/src-tauri/src/commands/conversations.rs @@ -84,6 +84,10 @@ fn list_conversations_sync( .as_ref() .map(|b| b.to_lowercase().contains(&query_lower)) .unwrap_or(false) + || s.model + .as_ref() + .map(|m| m.to_lowercase().contains(&query_lower)) + .unwrap_or(false) }); } diff --git a/src-tauri/src/parsers/gemini.rs b/src-tauri/src/parsers/gemini.rs index 4b9414a..49ef774 100644 --- a/src-tauri/src/parsers/gemini.rs +++ b/src-tauri/src/parsers/gemini.rs @@ -49,18 +49,23 @@ impl GeminiParser { } fn list_chat_files(&self) -> Vec { - let tmp_dir = self.tmp_dir(); - if !tmp_dir.exists() { - return Vec::new(); + let mut files: Vec = Vec::new(); + + // Scan both tmp/ (active sessions) and history/ (archived sessions) + for dir in [self.tmp_dir(), self.history_dir()] { + if !dir.exists() { + continue; + } + let found = WalkDir::new(&dir) + .into_iter() + .filter_map(|e| e.ok()) + .map(|e| e.path().to_path_buf()) + .filter(|p| p.is_file() && Self::is_chat_file(p)); + files.extend(found); } - let mut files: Vec = WalkDir::new(&tmp_dir) - .into_iter() - .filter_map(|e| e.ok()) - .map(|e| e.path().to_path_buf()) - .filter(|p| p.is_file() && Self::is_chat_file(p)) - .collect(); files.sort(); + files.dedup(); files }