Initial commit
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import { extractCode } from "./codeParser";
|
||||
|
||||
export interface ParsedDropFilename {
|
||||
/** Original filename with extension. */
|
||||
original: string;
|
||||
/** Canonical "PREFIX-NUMBER" code, or null. */
|
||||
code: string | null;
|
||||
/** Actress display names parsed from filename (after the first " - "). */
|
||||
actresses: string[];
|
||||
/** Suggested filename to save as (CODE.ext) when code is known; otherwise the original. */
|
||||
targetFilename: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a dropped image filename of the form:
|
||||
* "DDK-134.jpg"
|
||||
* "DDK-134 - Shuri Atomi.jpg"
|
||||
* "DDK-134 - Shuri Atomi, Reika Aiba.jpg"
|
||||
*
|
||||
* The first " - " (space-hyphen-space) after the code separates the code/title from
|
||||
* the actress list. Multiple actresses are comma-separated.
|
||||
*/
|
||||
export function parseDroppedFilename(name: string): ParsedDropFilename {
|
||||
const extMatch = name.match(/\.([^.]+)$/);
|
||||
const ext = extMatch ? extMatch[1] : "";
|
||||
const stem = ext ? name.slice(0, -(ext.length + 1)) : name;
|
||||
const code = extractCode(name);
|
||||
|
||||
let actresses: string[] = [];
|
||||
const sepIdx = stem.indexOf(" - ");
|
||||
if (sepIdx !== -1) {
|
||||
const tail = stem.slice(sepIdx + 3).trim();
|
||||
if (tail) {
|
||||
actresses = tail
|
||||
.split(/\s*,\s*/)
|
||||
.map((s) => s.trim())
|
||||
.filter(Boolean);
|
||||
}
|
||||
}
|
||||
|
||||
const targetFilename = code ? (ext ? `${code}.${ext}` : code) : name;
|
||||
return { original: name, code, actresses, targetFilename };
|
||||
}
|
||||
Reference in New Issue
Block a user