Everything written this session that has not been through the device: rounds 43 to 48 (each patch adversarially verified, 43's transient-notice expectation fixed), a partial round 49, the pipeline scripts, the Android Auto design and the icon comparison mock. Also the two harness changes that were never A/B'd — adaptive waits, which may only shorten a declared wait and never lengthen it, and a ship that runs the mock walk and the deploy at the same time. The A/B and its 255-step baseline are in handoff/tools; main stays at what the phone has actually walked.
16 lines
1.1 KiB
Plaintext
16 lines
1.1 KiB
Plaintext
if (cmd === "playlist_import_probe") {
|
|
const path = String(args?.path || "");
|
|
if (!path) return Promise.resolve(null); /* the desktop's dialog, dismissed */
|
|
/* the NAME decides the format, the way playlist_formats::detect_format
|
|
does — the extension first, the stem as the draft's title. The path
|
|
is only where the bytes were. */
|
|
const name = String(args?.name || path.split(/[\\/]/).filter(Boolean).pop() || "Playlist");
|
|
const ext = (name.split(".").pop() || "").toLowerCase();
|
|
const format = ext === "m3u" || ext === "m3u8" ? "m3u" : ext === "pls" ? "pls" : ext === "xspf" ? "xspf"
|
|
: ext === "csv" ? "csv" : ext === "json" ? "soulstream" : "text";
|
|
/* the paste door's own three lines, so the verdicts are already
|
|
proven: one in the library, one stream, one unresolved */
|
|
const entries = impParse("Daft Punk - One More Time\nAphex Twin - Track 1\nID - ID");
|
|
return new Promise((r) => setTimeout(() => r(impDraft(entries, name, format, name.replace(/\.[^.]*$/, ""))), 500));
|
|
}
|