Search the whole folder tree, not just the folder being browsed

The query box filtered the current listing, which only ever answered is-it-here; the usual question is where-did-I-put-it. domain/FileSearch walks down from the current folder and streams matches as they are found, since a whole-volume walk takes tens of seconds and a blank screen for that long reads as a hang. Hits show where they were found, and the app bar shows progress while the walk runs.

Bounds, all deliberate: a matching folder is still descended into; a hidden folder is skipped whole rather than merely filtered, so the preference cannot be leaked around; the walk stops at 200 matches; each keystroke cancels the previous walk instead of queueing; and navigating away abandons the search.
This commit is contained in:
2026-10-15 09:09:40 +02:00
parent 02780c97e5
commit ffed22c1da
8 changed files with 339 additions and 8 deletions
+15
View File
@@ -38,6 +38,21 @@ upload needs a **higher `versionCode`** than every previous upload.
### Added
- **Recursive search.** The query box used to filter the folder you were standing in, which
can only ever answer "is it here?" — and the usual question is "where did I put it?". It
now walks *down* from the current folder (`domain/FileSearch`) and streams matches as they
are found, because walking a whole volume takes tens of seconds and a blank screen for
that long reads as a hang. Rows say where the hit was found (`Folder · Documents/2026`) and
the app bar shows progress while the walk is still going.
Three deliberate bounds: a matching folder is still descended into, so a folder called
`holiday` cannot hide the matching files inside it; a hidden folder is skipped *whole*
rather than merely filtered out, so the preference cannot be leaked around; and the walk
stops at 200 matches, because a search returning ten thousand rows is not more useful than
one returning two hundred. Each keystroke cancels the walk in progress instead of queueing
behind it, and navigating away abandons the search — its results belonged to the folder
being left.
- **Undo for delete, rename and move.** A delete is now a *move* into a hidden
`.plainfiles-trash` folder on the same volume rather than a removal, so the snackbar can
offer to put it back; a rename and a pasted cut record how to reverse themselves. Four