fix(plugins): unique csv row keys, per-file default mediaType, scale-aware zero rating

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
This commit is contained in:
Lucas Winther
2026-10-30 15:51:22 +01:00
co-authored by Claude Sonnet 5.5
parent a540c7d34d
commit 4c08c16e48
3 changed files with 50 additions and 12 deletions
+3 -2
View File
@@ -115,13 +115,14 @@ export function defaultScale(rows: FieldRow[]): 5 | 10 | 100 {
return max <= 5 ? 5 : max <= 10 ? 10 : 100;
}
/** Returns a 0-100 rating, or null when unrated. 0 counts as unrated (Goodreads convention). */
/** Returns a 0-100 rating, or null when unrated. 0 counts as unrated only on scale 5 (Goodreads convention). */
export function normalizeRating(r: FieldRow, fileScale: 5 | 10 | 100): number | null {
if (r.rating === undefined) return null;
const n = Number(r.rating);
if (!Number.isFinite(n) || n <= 0) return null;
if (!Number.isFinite(n) || n < 0) return null;
const rs = Number(r.ratingScale);
const scale = rs === 5 || rs === 10 || rs === 100 ? rs : fileScale;
if (n === 0 && scale === 5) return null;
return Math.max(0, Math.min(100, Math.round((n / scale) * 100)));
}