fix: improve yomitan keyboard navigation and payload handling

This commit is contained in:
2026-03-05 01:28:54 -08:00
parent 5436e0cd49
commit b623c5e160
7 changed files with 581 additions and 7 deletions

View File

@@ -166,7 +166,9 @@ test('buildSubminerScriptOpts includes aniskip payload fields', () => {
assert.match(opts, /subminer-aniskip_intro_end=62/);
assert.match(opts, /subminer-aniskip_lookup_status=ready/);
assert.ok(payloadMatch !== null);
const payload = JSON.parse(decodeURIComponent(payloadMatch[1]));
assert.equal(payloadMatch[1].includes('%'), false);
const payloadJson = Buffer.from(payloadMatch[1], 'base64url').toString('utf-8');
const payload = JSON.parse(payloadJson);
assert.equal(payload.found, true);
const first = payload.results?.[0];
assert.equal(first.skip_type, 'op');

View File

@@ -532,7 +532,9 @@ function buildLauncherAniSkipPayload(aniSkipMetadata: AniSkipMetadata): string |
},
],
};
return encodeURIComponent(JSON.stringify(payload));
// mpv --script-opts treats `%` as an escape prefix, so URL-encoding can break parsing.
// Base64url stays script-opts-safe and is decoded by the plugin launcher payload parser.
return Buffer.from(JSON.stringify(payload), 'utf-8').toString('base64url');
}
export function buildSubminerScriptOpts(