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:
cdnutterandClaude Opus 5.5 committed 2026-09-22 16:48:55 -07:00
1 parent f49274360b
commit 75e0516434
9 files changed
+52 -33

No files matched your search

View File
Whitespace-only changes.
+2 -2
View File
@@ -39,8 +39,8 @@ export function Build({ pair }: { pair: Pair }) {
return (
<div className="space-y-4">
<Alert tone="blue">
Build the slave library from the host. Browse the host library, pick artists, albums or songs, and playlink hardlinks them into the slave
library at the same <code className="mono">Artist/Album/Title.ext</code> path. No extra space is used. Existing slave files are never
Build the slave library from the host. Browse the host library, pick folders or songs, and playlink hardlinks them into the slave
library at the same relative path. No extra space is used. Existing slave files are never
overwritten, and <b>Remove</b> only deletes slave files that are hardlinks of the host file, so the host copy is always kept.
</Alert>
+2 -1
View File
@@ -91,7 +91,8 @@ export function PairForm({ pair, open, onClose }: { pair?: Pair; open: boolean;
/>
</div>
<Alert tone="blue">
Both libraries should use the same <code className="mono">Artist/Album/Title.ext</code> layout. Files are matched by relative path first.
Both libraries should use the same folder layout (for example <code className="mono">Artist/Album/Title.ext</code>), because files are matched by
their relative path first. Any layout works as long as it is the same on both sides.
Both must be on the same filesystem. On Unraid, mount one common parent folder into the container instead of two separate volumes.
</Alert>
<PathField
+1 -1
View File
@@ -20,7 +20,7 @@ const kindLabel: Record<Match["kind"], string> = {
path_case: "path differs in case",
extension: "other format",
fuzzy: "similar title",
elsewhere: "other album folder",
elsewhere: "same top folder, other subfolder",
none: "no match",
};