Add search, bulk actions, undo, and storage usage to File Management

- Manage Library search: find any course/folder by name anywhere in
  the tree instead of expanding levels one by one; results carry the
  same Move/Rename/Hide actions.
- Bulk select: every row gets a checkbox, so items found via search or
  expanded across different tree levels can be hidden, shown, or moved
  to the same destination together in one batch.
- Undo last action: a "Last action: ... [Undo]" bar appears after any
  move/rename (Sort Unsorted apply, Bulk Rename apply, a Manage
  Library move/rename, a bulk move) and reverses the whole batch.
  Deliberately never covers Hide/Show (already a one-click toggle) or
  Delete (permanent by design) - only ever move/rename, which are
  trivially reversible. Re-checks each item before reversing it, so a
  partial failure reports exactly what did and didn't reverse.
- Storage Usage: disk usage per top-level library folder, largest
  first, with a simple proportional bar; a manual scan since it reads
  every file's size.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-24 14:41:26 -04:00
co-authored by Claude Sonnet 5
parent 71d6158c60
commit ba8d7e2a1b
4 changed files with 780 additions and 54 deletions
+20 -1
View File
@@ -151,7 +151,23 @@ silently stay blank instead of erroring.
bulk-select elsewhere to hide or queue several at once), rename a
course/folder in place, or **move** one anywhere else in the library via
the same folder-picker/create-new-folder UI Sort Unsorted uses - handy
for correcting a bad auto-sort later or just reorganizing.
for correcting a bad auto-sort later or just reorganizing. A search box
finds any course/folder by name anywhere in the tree instead of
expanding levels one by one (results get the same Move/Rename/Hide
actions, just without an expand arrow, since a hit is somewhere specific
rather than a level to browse into); every row also has a checkbox, so
several items - found via search or expanded across different tree
levels - can be hidden, shown, or moved to the same destination together
in one batch instead of one at a time.
- *Undo*: a "Last action: ... [Undo]" bar appears after any move or
rename (Sort Unsorted apply, Bulk Rename apply, a Manage Library
move/rename, a bulk move) and reverses the whole batch in one click.
Only ever covers move/rename - hiding is already a one-click toggle with
nothing to undo, and Delete is permanent by design, so it's deliberately
never in this history no matter how "undo" gets framed. Re-checks each
item before reversing it (the original spot may have been reused since),
so a partial batch failure reports exactly what did and didn't reverse
rather than silently doing nothing.
- *Duplicate Courses*: scans every course in the library (Unsorted
included) for names that look like the same thing filed twice, using the
same tokenizer as Sort Unsorted so a platform-name or release-tag
@@ -171,6 +187,9 @@ silently stay blank instead of erroring.
the NAS instead of through the app (doing it through the app already
keeps these in sync). Review individually or clear them all at once;
course files themselves are never touched.
- *Storage Usage*: disk usage per top-level library folder, largest
first, with a simple proportional bar per entry - manually triggered
(it reads every file's size) rather than run automatically.
**Dashboard**
- Library-wide stats (courses, lessons completed, time watched, time