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.
20 lines
1.2 KiB
Plaintext
20 lines
1.2 KiB
Plaintext
return { owner: "com.soulstream.app", state: state[1] || "", position: state[2] ? +state[2] / 1000 : null };
|
|
} catch { return { owner: "", state: "" }; }
|
|
}
|
|
|
|
/* The queue window the phone was last handed, as MediaSessionPlugin logged
|
|
* it. Round forty-six put a bounded slice of the queue into every card
|
|
* update — the current item and ten either side — and left MediaService
|
|
* ignoring all of it, so there is nothing on any screen to read it back
|
|
* from: logcat is the only place on the device it exists, one line per
|
|
* update, and the LAST line is the state now. `at=` is last in the line
|
|
* because a title may hold anything, spaces and `=` included. */
|
|
function mediaWindow() {
|
|
try {
|
|
const out = adb("logcat", "-d", "-s", "SoulStream:D").toString();
|
|
const lines = out.split(/\r?\n/).filter((l) => l.includes("media window "));
|
|
const m = (lines[lines.length - 1] || "").match(/media window n=(\d+) i=(-?\d+) art=(\d+) at=(.*)$/);
|
|
if (!m) return { n: -1, i: -1, art: -1, at: "", lines: lines.length };
|
|
return { n: +m[1], i: +m[2], art: +m[3], at: m[4].trim(), lines: lines.length };
|
|
} catch (e) { return { n: -1, i: -1, art: -1, at: "ERR " + e.message, lines: 0 }; }
|
|
} |