Projekt löschen in drei Stufen mit Artefakt-Vorschau; Listen-Scroll gefixt
Eskalationsleiter: 'integration' nimmt nur die ai-control-Spuren zurück (Registry, .ai-control/, Archiv-Rechte + Todo-Hook in settings.json, Panel-Dateien, .desktop — Ordner, memory/ und Claude-Code-Grundgerüst bleiben), 'archive' löscht zusätzlich das Archiv, 'full' den Projekt- ordner mit Arbeitsordner-Flag. delete_preview liefert die konkrete Artefaktliste; der Dialog zeigt sie je Stufe. Ersetzt delete_project/ remove_project (Handler, App-ACL-Manifest und Capability nachgezogen). Außerdem: main scrollt nicht mehr — Toolbars und Fehlerzeile stehen, nur die Listen scrollen (alle drei Tabs, .list-scroll).
This commit is contained in:
+20
-17
@@ -13,12 +13,12 @@ use crate::domain::pool::{
|
||||
link_pool_runtime_in, list_pools_in, read_pool, rename_pool_in, set_apikey_in, PoolInfo,
|
||||
};
|
||||
use crate::domain::project::{
|
||||
add_project_in, add_work_dir_in, assign_pool_in, create_project_full_in, delete_project_in,
|
||||
display_name_in, is_running, kill_terminals, list_projects_in, project_work_dirs_in,
|
||||
read_project_config_in, remove_work_dir_in, resolve_icon_path, running_projects_using_pool,
|
||||
set_project_dir_in, set_terminal_config_in, unassign_pool_in, Project, TerminalConfig,
|
||||
add_project_in, add_work_dir_in, assign_pool_in, create_project_full_in, delete_preview_in,
|
||||
delete_project_scoped_in, display_name_in, is_running, kill_terminals, list_projects_in,
|
||||
project_work_dirs_in, read_project_config_in, remove_work_dir_in, resolve_icon_path,
|
||||
running_projects_using_pool, set_project_dir_in, set_terminal_config_in, unassign_pool_in,
|
||||
DeletePreview, Project, TerminalConfig,
|
||||
};
|
||||
use crate::domain::registry::unregister_project;
|
||||
use crate::domain::settings;
|
||||
use crate::domain::todo::{set_todo_in, todo_state_in};
|
||||
use crate::domain::usage::{usage_stats_in, UsageRow};
|
||||
@@ -60,16 +60,6 @@ pub(crate) fn add_project(path: String) -> Result<(), String> {
|
||||
add_project_in(&Paths::real(), &path)
|
||||
}
|
||||
|
||||
/// Projekt aus der Registry nehmen; der Ordner bleibt unangetastet.
|
||||
#[tauri::command]
|
||||
pub(crate) fn remove_project(project: String) -> Result<(), String> {
|
||||
if is_running(&project) {
|
||||
let name = display_name_in(&Paths::real(), &project)?;
|
||||
return Err(format!("{name} läuft noch — erst beenden"));
|
||||
}
|
||||
unregister_project(&Paths::real(), &project)
|
||||
}
|
||||
|
||||
/// Projektordner neu zuordnen; bei laufender Session gesperrt.
|
||||
#[tauri::command]
|
||||
pub(crate) fn set_project_dir(project: String, dir: String) -> Result<(), String> {
|
||||
@@ -90,13 +80,26 @@ pub(crate) fn remove_work_dir(project: String, dir: String) -> Result<(), String
|
||||
remove_work_dir_in(&Paths::real(), &project, &dir)
|
||||
}
|
||||
|
||||
/// Artefakt-Vorschau für den Lösch-Dialog.
|
||||
#[tauri::command]
|
||||
pub(crate) fn delete_project(project: String, delete_work_dirs: bool) -> Result<(), String> {
|
||||
pub(crate) fn delete_preview(project: String) -> Result<DeletePreview, String> {
|
||||
delete_preview_in(&Paths::real(), &project)
|
||||
}
|
||||
|
||||
/// Löschen in drei Stufen: "integration" (nur ai-control-Spuren),
|
||||
/// "archive" (zusätzlich Archiv), "full" (zusätzlich Projektordner,
|
||||
/// Arbeitsordner per Flag).
|
||||
#[tauri::command]
|
||||
pub(crate) fn delete_project_scoped(
|
||||
project: String,
|
||||
scope: String,
|
||||
delete_work_dirs: bool,
|
||||
) -> Result<(), String> {
|
||||
if is_running(&project) {
|
||||
let name = display_name_in(&Paths::real(), &project)?;
|
||||
return Err(format!("{name} läuft noch — erst beenden"));
|
||||
}
|
||||
delete_project_in(&Paths::real(), &project, delete_work_dirs)
|
||||
delete_project_scoped_in(&Paths::real(), &project, &scope, delete_work_dirs)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
|
||||
Reference in New Issue
Block a user