fix(m10): item-scope take-FX fingerprint; Windows path case-fold; comments

Item scope now reads the active take's FX chain via TakeFX_* (new
fxChainIdentityForItems helper), not the owning track's chain.
normalizeSlashes lowercases on _WIN32 for detectParent. Stale
comments corrected; case-fold tests added.
This commit is contained in:
2026-07-26 18:03:20 -04:00
parent 20018c1df2
commit 7d0fcc49ac
8 changed files with 177 additions and 38 deletions
+9 -7
View File
@@ -46,13 +46,14 @@ enum class ProvenanceScope {
Track,
};
// One FX-chain entry as the shell reads it from REAPER (TrackFX_GetFXName /
// TrackFX_GetFXGUID / TrackFX_GetEnabled). Plain data — the shell fills it, the
// One FX-chain entry as the shell reads it from REAPER. For Track scope the shell
// uses TrackFX_GetFXName/GetFXGUID/GetEnabled; for Item scope it uses the TakeFX_*
// equivalents over the active take's FX chain. Plain data — the shell fills it, the
// pure fold turns the vector into the identity string.
struct FxIdentityEntry {
std::string name; // TrackFX_GetFXName
std::string guid; // TrackFX_GetFXGUID -> guidToString (per-instance identity)
bool enabled; // TrackFX_GetEnabled
std::string name; // TrackFX_GetFXName / TakeFX_GetFXName
std::string guid; // TrackFX_GetFXGUID / TakeFX_GetFXGUID -> guidToString
bool enabled; // TrackFX_GetEnabled / TakeFX_GetEnabled
};
// The recorded capture recipe + source FX-chain identity — the thin fingerprint.
@@ -138,8 +139,9 @@ struct BankFileRef {
//
// Returns the parent sample id, or nullopt when the capture is not a genuine
// resample-from-sample. Comparison is exact path identity; the caller normalizes
// both sides identically so a slash/case difference never spuriously matches or
// misses (case handling is the caller's normalization contract, not decided here).
// both sides identically via normalizeSlashes (which lowercases on Windows) so a
// slash/case difference never spuriously matches or misses. On Windows both sides
// are lowercased before they reach here; on macOS/Linux they are case-exact.
std::optional<std::string> detectParent(
const std::vector<std::string>& sourceItemFiles,
const std::vector<BankFileRef>& bankFiles);