diff --git a/src/restore-project-files.tsx b/src/restore-project-files.tsx index 2b0bb55..b0da146 100644 --- a/src/restore-project-files.tsx +++ b/src/restore-project-files.tsx @@ -145,7 +145,7 @@ function FilePicker(props: { run: ProjectRun; directory: string; historical?: bo if (!active) return; setSourceRoot(scan.root); setFiles(scan.files); - setSelected(new Set(scan.files.map((file) => file.relPath))); + setSelected(new Set(scan.files.filter((file) => file.kind === "text").map((file) => file.relPath))); setSkipped(scan.skipped); } load().catch((error: Error) => showToast({ style: Toast.Style.Failure, @@ -161,7 +161,12 @@ function FilePicker(props: { run: ProjectRun; directory: string; historical?: bo }); } async function exportFiles() { - if (!selected.size || !sourceRoot) return; + if (busy) return; + if (!selected.size) { + await showToast({ style: Toast.Style.Failure, title: "Keine Dateien ausgewählt" }); + return; + } + if (!sourceRoot) return; setBusy(true); const toast = await showToast({ style: Toast.Style.Animated, title: "Klartext-Kopien werden erstellt" }); const stamp = new Date().toISOString().replace(/[:.]/g, "-"); @@ -191,7 +196,7 @@ function FilePicker(props: { run: ProjectRun; directory: string; historical?: bo } toast.style = Toast.Style.Success; toast.title = `${selected.size} Klartext-Dateien in Downloads`; - await showInFinder(targetRoot); + await showInFinder(targetRoot).catch(() => undefined); } catch (error) { if (targetRoot) await fs.rm(targetRoot, { recursive: true, force: true }); toast.style = Toast.Style.Failure; @@ -199,24 +204,34 @@ function FilePicker(props: { run: ProjectRun; directory: string; historical?: bo toast.message = (error as Error).message; } finally { setBusy(false); } } + const textFiles = files.filter((file) => file.kind === "text"); + const complexFiles = files.filter((file) => file.kind === "document"); + const renderFile = (file: ProjectFile) => + toggle(file.relPath)} /> + + setSelected(new Set(textFiles.map((item) => item.relPath)))} /> + setSelected(new Set(files.map((item) => item.relPath)))} /> + setSelected(new Set())} /> + } />; return } /> showInFinder(sourceRoot)} />} /> - {files.map((file) => - toggle(file.relPath)} /> - - setSelected(new Set(files.map((item) => item.relPath)))} /> - setSelected(new Set())} /> - } />)} + + + {textFiles.map(renderFile)} + + + {complexFiles.map(renderFile)} ; } @@ -230,6 +245,8 @@ function ProjectHistory(props: { projectName: string; entries: SavedRun[] }) { title={new Date(run.createdAt).toLocaleString("de-AT")} subtitle={`${run.files.length} Dateien`} actions={ + push()} /> } /> @@ -238,8 +255,6 @@ function ProjectHistory(props: { projectName: string; entries: SavedRun[] }) { {run.copyPath && push()} />} - push()} /> } />)} ; @@ -269,10 +284,10 @@ export default function Command() { accessories={[{ text: `${run.files.length} Dateien` }, { text: new Date(run.createdAt).toLocaleString("de-AT") }, ...(entries.length > 1 ? [{ text: `${entries.length} Stände` }] : [])]} actions={ - } /> push()} /> + } /> showInFinder(runCopiesPath(run, directory))} />