mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-25 13:45:03 +08:00
8e2ffbc845
* feat: add bulk delete for session manager * fix: address batch delete review issues * fix: keep session list in sync after batch delete
86 lines
2.6 KiB
Rust
86 lines
2.6 KiB
Rust
#![allow(non_snake_case)]
|
|
|
|
use crate::session_manager;
|
|
|
|
#[tauri::command]
|
|
pub async fn list_sessions() -> Result<Vec<session_manager::SessionMeta>, String> {
|
|
let sessions = tauri::async_runtime::spawn_blocking(session_manager::scan_sessions)
|
|
.await
|
|
.map_err(|e| format!("Failed to scan sessions: {e}"))?;
|
|
Ok(sessions)
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn get_session_messages(
|
|
providerId: String,
|
|
sourcePath: String,
|
|
) -> Result<Vec<session_manager::SessionMessage>, String> {
|
|
let provider_id = providerId.clone();
|
|
let source_path = sourcePath.clone();
|
|
tauri::async_runtime::spawn_blocking(move || {
|
|
session_manager::load_messages(&provider_id, &source_path)
|
|
})
|
|
.await
|
|
.map_err(|e| format!("Failed to load session messages: {e}"))?
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn launch_session_terminal(
|
|
command: String,
|
|
cwd: Option<String>,
|
|
custom_config: Option<String>,
|
|
) -> Result<bool, String> {
|
|
let command = command.clone();
|
|
let cwd = cwd.clone();
|
|
let custom_config = custom_config.clone();
|
|
|
|
// Read preferred terminal from global settings
|
|
let preferred = crate::settings::get_preferred_terminal();
|
|
// Map global setting terminal names to session terminal names
|
|
// Global uses "iterm2", session terminal uses "iterm"
|
|
let target = match preferred.as_deref() {
|
|
Some("iterm2") => "iterm".to_string(),
|
|
Some(t) => t.to_string(),
|
|
None => "terminal".to_string(), // Default to Terminal.app on macOS
|
|
};
|
|
|
|
tauri::async_runtime::spawn_blocking(move || {
|
|
session_manager::terminal::launch_terminal(
|
|
&target,
|
|
&command,
|
|
cwd.as_deref(),
|
|
custom_config.as_deref(),
|
|
)
|
|
})
|
|
.await
|
|
.map_err(|e| format!("Failed to launch terminal: {e}"))??;
|
|
|
|
Ok(true)
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn delete_session(
|
|
providerId: String,
|
|
sessionId: String,
|
|
sourcePath: String,
|
|
) -> Result<bool, String> {
|
|
let provider_id = providerId.clone();
|
|
let session_id = sessionId.clone();
|
|
let source_path = sourcePath.clone();
|
|
|
|
tauri::async_runtime::spawn_blocking(move || {
|
|
session_manager::delete_session(&provider_id, &session_id, &source_path)
|
|
})
|
|
.await
|
|
.map_err(|e| format!("Failed to delete session: {e}"))?
|
|
}
|
|
|
|
#[tauri::command]
|
|
pub async fn delete_sessions(
|
|
items: Vec<session_manager::DeleteSessionRequest>,
|
|
) -> Result<Vec<session_manager::DeleteSessionOutcome>, String> {
|
|
tauri::async_runtime::spawn_blocking(move || session_manager::delete_sessions(&items))
|
|
.await
|
|
.map_err(|e| format!("Failed to delete sessions: {e}"))
|
|
}
|