Tighten Sort Unsorted matching; consolidate file management tools
Fix Sort Unsorted picking a wrong destination on words that are common clutter across many categories (a creator's name, generic marketing filler) by ranking matches on a folder's own deliberate name over incidental sibling-course words, and downweighting borrowed words that recur across many categories. Add a folder-picker/create-new/rename UI to override any proposal. Turn /unsorted into a general File Management page: move Refresh Library, Bulk Rename, and Manage Library (hide/rename) here from Settings, add a Move action to Manage Library using the same picker, and add Duplicate Courses and Clean Up Stale References tools. Add a footer link to the page from the dashboard. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -88,19 +88,52 @@ silently stay blank instead of erroring.
|
||||
- Cover art: uses a manually-placed `cover`/`folder`/`thumbnail`/`thumb`/
|
||||
`poster` image if a course has one, otherwise auto-generates one via
|
||||
`ffmpeg` from a frame of the course's first video
|
||||
- Hide courses/folders from the browser without touching anything on disk;
|
||||
bulk-select to hide or queue several at once
|
||||
- Bulk rename across course/folder names (find & replace)
|
||||
- **Sort Unsorted** ([/unsorted](templates/unsorted.html), linked from
|
||||
Settings): drop new/incoming courses into an `Unsorted` folder at the
|
||||
library root, then scan proposes a destination for each one by keyword
|
||||
- **File Management** ([/unsorted](templates/unsorted.html), linked from
|
||||
Settings and from a footer link on the dashboard): a dedicated page for
|
||||
everything that touches files on disk, since it needs more room than a
|
||||
Settings card and warrants review before anything actually changes.
|
||||
- *Sort Unsorted*: drop new/incoming courses into an `Unsorted` folder at
|
||||
the library root, then scan proposes a destination for each one by keyword
|
||||
overlap against the *existing* category tree - read fresh from disk every
|
||||
scan, so it adapts to whatever folders you actually have rather than any
|
||||
hardcoded subject list. Three outcomes per item: a confident match to an
|
||||
existing folder, a suggested new subfolder under a broader category match,
|
||||
or "needs review" (unchecked by default) when nothing overlaps at all.
|
||||
Every destination is editable before applying, and nothing on disk moves
|
||||
until you review and hit Apply.
|
||||
Every row has a folder-picker dropdown (listing every real category in the
|
||||
library, plus "+ Create new folder…" to type a brand-new path) so a wrong
|
||||
or low-confidence guess is one click to correct, and a name field to
|
||||
rename the course's folder in the same move. Nothing on disk moves until
|
||||
you review and hit Apply. Matching ignores common noise (e-learning
|
||||
platform names, release/distribution-group tags, dates) via a stopword
|
||||
list, and beyond that treats a match against a folder's own deliberate
|
||||
name as always stronger evidence than a word only borrowed from a
|
||||
sibling course's title - and among those borrowed words, downweights
|
||||
ones that recur across many categories (a prolific creator's name, etc.)
|
||||
so they can't outvote a genuinely specific word just by sharing more of
|
||||
them.
|
||||
- *Refresh Library*: manually bypasses the 5-minute filesystem-scan cache,
|
||||
for when files were added/removed directly on disk.
|
||||
- *Bulk Rename*: find & replace across every course/folder name in the
|
||||
library at once, with a per-match preview and the ability to drop
|
||||
individual matches before applying.
|
||||
- *Manage Library*: hide courses/folders from the browser without
|
||||
touching anything on disk (hiding a folder hides everything inside it;
|
||||
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.
|
||||
- *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
|
||||
difference doesn't hide a real duplicate. Groups by similarity (union of
|
||||
any two courses over the threshold, transitively) rather than showing
|
||||
raw pairs; each course in a group gets a one-click Hide.
|
||||
- *Clean Up Stale References*: finds entries in the hidden-paths list,
|
||||
Next Up queue, or Recently Viewed history that point at a path no longer
|
||||
on disk - normally from renaming/moving/deleting a course directly on
|
||||
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.
|
||||
|
||||
**Dashboard**
|
||||
- Library-wide stats (courses, lessons completed, time watched, time
|
||||
@@ -138,8 +171,8 @@ silently stay blank instead of erroring.
|
||||
actual color distance), or a fully custom accent color, corner radius,
|
||||
and card style
|
||||
- Font, text size, page width, and spacing density
|
||||
- Default library path override + manual "Refresh Library" (bypasses the
|
||||
5-minute filesystem-scan cache)
|
||||
- Default library path override (Refresh Library and Bulk Rename live on the
|
||||
File Management page - see above)
|
||||
|
||||
**Backup & integrations**
|
||||
- One-click backup export and restore: settings, hidden-path choices, the
|
||||
|
||||
Reference in New Issue
Block a user