Drop Artist/Album/Title depth assumptions from layout checks
Matching has always been by relative path, so any folder layout works as long as both libraries use the same one. Remove the depth and loose-root-file warnings, which flagged valid layouts, and reword the UI and README to say "same folder layout on both sides" with Artist/Album/Title.ext only as an example. The "elsewhere" fallback is now described as same top-level folder, different subfolder. Add a test covering flat and deeply nested layouts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f49274360b
commit
75e0516434
9 files changed
+52
-33
No files matched your search
@@ -9,13 +9,17 @@ It ships as a single Go binary with an embedded React web UI and SQLite state, p
|
||||
|
||||
## What it does
|
||||
|
||||
Files are matched by their **path relative to each library root**. Any folder layout works (`Artist/Album/Title.ext`,
|
||||
`Genre/Artist/Title.ext`, flat, …) as long as both libraries use the same one, so that a song sits at the same relative
|
||||
path on both sides. The fallbacks below catch small differences, and a scan warns when the two layouts don't line up.
|
||||
|
||||
| Situation | What playlink does |
|
||||
|---|---|
|
||||
| Same `Artist/Album/Title.ext` path, **byte-identical** | Status `identical`. Link with one click, in bulk, or automatically after each scan. |
|
||||
| Same relative path, **byte-identical** | Status `identical`. Link with one click, in bulk, or automatically after each scan. |
|
||||
| Same path, **different bytes** (re-encode, different tags) | Status `different`. Manual review with a codec/bitrate/bit-depth/duration comparison. |
|
||||
| Same title, **different format** (`Song.mp3` vs `Song.flac`) | Status `similar` (other format). Manual review. |
|
||||
| Same title after ignoring track numbers/punctuation (`01 - Song!.flac` vs `Song.mp3`) | Status `similar` (similar title). Manual review. |
|
||||
| Same artist and title, but in a **different album folder** | Status `similar` (other album folder). Manual review, plus a layout warning. |
|
||||
| Same top-level folder and title, but a **different subfolder** | Status `similar` (same top folder, other subfolder). Manual review. |
|
||||
| Only exists in the slave library | Status `unmatched`. Never touched. |
|
||||
| Already the same inode | Status `linked`. |
|
||||
|
||||
@@ -28,8 +32,8 @@ codec-weighted bitrate (Opus and AAC count for more per kbps than MP3). You then
|
||||
libraries share the better file.
|
||||
- **Ignore.** The pair is hidden from review until you un-ignore it.
|
||||
|
||||
**Build mode** covers the "start fresh" workflow. Point the slave at an empty folder, browse the host library by artist and album, tick
|
||||
what you want, and playlink hardlinks it in at the same path. **Remove** deletes slave files, but only ones that are hardlinks of the
|
||||
**Build mode** covers the "start fresh" workflow. Point the slave at an empty folder, browse the host library, tick the
|
||||
folders or songs you want, and playlink hardlinks them in at the same relative path. **Remove** deletes slave files, but only ones that are hardlinks of the
|
||||
host file.
|
||||
|
||||
## Safety model
|
||||
|
||||
Reference in new issue
Block a user