diff options
| author | Danilo M. <danix@danix.xyz> | 2026-10-16 16:52:45 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-10-16 16:52:45 +0200 |
| commit | bb9442a07cebe70c3492cca31f31a8270bb83134 (patch) | |
| tree | 2dff25cd4c3715b5b54d4c65ee6619e896f170aa /desktop/assistant/Ops.js | |
| parent | 193cd8c2e1cc7e16b1389b95036bf7f4f99f97e0 (diff) | |
| download | quickshell-bb9442a07cebe70c3492cca31f31a8270bb83134.tar.gz quickshell-bb9442a07cebe70c3492cca31f31a8270bb83134.zip | |
fix(assistant): review of the Do row and fileops
The canvas: a To .md ended any other way than its own Stop (the footer
Stop, a question, a drop, a daemon restart, an older daemon refusing the
command) left the card at Working forever. The footer Stop goes through
stopOp(), asking and dropping end the operation first, a disconnect ends
it, and an error while nothing else runs is taken as its outcome. Each
fileops run gets its own Process, so a stopped run's late answer is never
read as the next one's. To .md takes one PDF, as one file is written.
Compress... no longer flips back when file(1) refines a kind, long errors
are elided, and a desktop with no documents folder gets
Documents/Assistant rather than ~/Assistant.
fileops: an animated GIF to PNG or JPEG left one file per frame under
names the rename never found; the first frame is taken. JPEG flattens
transparency onto white. Zipping a folder holding the output folder read
its own growing archive without end; only regular files outside it are
added, which also skips FIFOs and dangling links. qpdf warnings no longer
fail a merge. A folder's free name keeps its dots, a lone .gz or .xz is
decompressed rather than refused, and a dotfile's archive is not hidden.
Tools die with fileops even when it is killed outright, a killed run's
leftovers are swept on the next run, a stop between fork and bookkeeping
cannot miss the child, and a late stop cannot add a second answer.
Error lines lose bsdtar's doubled prefix and its delayed-exit noise.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'desktop/assistant/Ops.js')
| -rw-r--r-- | desktop/assistant/Ops.js | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/desktop/assistant/Ops.js b/desktop/assistant/Ops.js index 2761a2d..4d7ef96 100644 --- a/desktop/assistant/Ops.js +++ b/desktop/assistant/Ops.js @@ -14,11 +14,12 @@ // The file state's Do row. op is a fileops operation, or "md" for the // daemon's write, or "compress", which opens the COMPRESS formats. kinds // lists the staged kinds it fits ("any" fits every mix); min is the number -// of files it needs; format is the suffix a file already has when the +// of files it needs and max the most it takes (To .md writes one file from +// one PDF); format is the suffix a file already has when the // operation would not change it. icon is a Nerd Font codepoint, checked in // Inconsolata Nerd Font's cmap. const OPS = [ - { label: "To .md", icon: "\uf48a", op: "md", kinds: ["pdf"] }, + { label: "To .md", icon: "\uf48a", op: "md", kinds: ["pdf"], max: 1 }, { label: "To images", icon: "\uf1c5", op: "pdf-images", kinds: ["pdf"] }, { label: "Merge", icon: "\uf419", op: "pdf-merge", kinds: ["pdf"], min: 2 }, { label: "Extract audio", icon: "\uf001", op: "audio", kinds: ["video"] }, @@ -49,6 +50,6 @@ function ext(name) { function offered(files) { if (!files.length) return []; return OPS.filter(o => (o.kinds.includes("any") || files.every(f => o.kinds.includes(f.kind))) - && files.length >= (o.min ?? 1) + && files.length >= (o.min ?? 1) && files.length <= (o.max ?? Infinity) && !(o.format && files.every(f => o.format.includes(ext(f.name))))); } |
