From 880ab61d7a341974218a616d3335f46265bdc609 Mon Sep 17 00:00:00 2001 From: Darrell van Swinderen Date: Wed, 23 Sep 2026 09:57:40 +0200 Subject: [PATCH] feat(storage): watch and scrub a clip before deciding, and never offer a named one Two pieces of feedback on Storage Saver. **You could not look at a clip on the one screen that asks you to delete it.** The whole tile was a single button that ticked it, so finding out what a recording held meant leaving the screen and hunting for it in the library, which made the screen pointless. The tile is now two parts: - **The picture is the clip.** Hover plays it and the bottom band scrubs it, from the same `useHoverScrub` and under the same two settings as a library card, one preview at a time. Pressing it opens the clip's own panel, full size, where it plays and can be trimmed or deleted. - **The corner box and the caption are the choice.** They tick it, or in a burst, keep it. Two sibling buttons, not one nested in the other. Closing that panel refreshes the one clip rather than reloading the list. Opening a clip is exactly what "never opened" is about, so a reload would take away the clip you just watched before you could press delete. It goes only if it was deleted from the panel, or given a name or a note. **A clip with its own title is never offered for deletion**, in either section, and neither is one with a note. Naming a clip is the most deliberate thing anyone does with one, and the row with its name is what the Recycle Bin cannot give back. Same rule as the Stream Deck's discard key. Named clips are left out before bursts are worked out, so the unnamed saves around one are still offered as each other's duplicates. Proved against a seeded library: naming one clip and noting another took "Never opened" from 35 to 33 and the bursts from 3 to 2, and clearing both put them back. Driven for real: hover plays one preview, the band scrubs to 0:14, pressing the picture opens the panel, closing it leaves all 38 tiles in place. Gates: `npm run check` 849; `screens.spec.ts` 9 passed. Co-Authored-By: Claude Opus 5.5 (1M context) --- src/main/actions/FindBurstClipsAction.ts | 11 + src/main/actions/FindUnreviewedClipsAction.ts | 9 + .../components/Storage/GraveyardSection.vue | 6 +- .../components/Storage/StorageClipTile.vue | 223 ++++++++++++------ .../composables/library/useStorageSaver.ts | 53 +++++ src/renderer/src/views/StorageSaverPage.vue | 12 +- 6 files changed, 242 insertions(+), 72 deletions(-) diff --git a/src/main/actions/FindBurstClipsAction.ts b/src/main/actions/FindBurstClipsAction.ts index 580b3465..281f46c4 100644 --- a/src/main/actions/FindBurstClipsAction.ts +++ b/src/main/actions/FindBurstClipsAction.ts @@ -61,6 +61,17 @@ export class FindBurstClipsAction extends BaseAction

Never opened

- Older than {{ days }} days, never watched, never starred, never tagged, never marked + Older than {{ days }} days, and never watched, named, starred, tagged or marked @@ -77,7 +77,7 @@ function groupSelected(clips: Clip[]): boolean { icon="material-symbols:check-circle-outline" title="Nothing has been forgotten" > - Every clip older than {{ days }} days has been opened, starred, tagged or marked. + Every clip older than {{ days }} days has been opened, named, starred, tagged or marked.