fix latest review feedback

This commit is contained in:
2026-04-03 13:23:15 -07:00
parent 76fa8b779d
commit 0f03547c83
5 changed files with 44 additions and 7 deletions

View File

@@ -2244,14 +2244,18 @@ const openFirstRunSetupWindowHandler = createOpenFirstRunSetupWindowHandler({
} }
if (submission.action === 'configure-mpv-executable-path') { if (submission.action === 'configure-mpv-executable-path') {
const mpvExecutablePath = submission.mpvExecutablePath?.trim() ?? ''; const mpvExecutablePath = submission.mpvExecutablePath?.trim() ?? '';
const pathStatus = getConfiguredWindowsMpvPathStatus(mpvExecutablePath);
configService.patchRawConfig({ configService.patchRawConfig({
mpv: { mpv: {
executablePath: mpvExecutablePath, executablePath: mpvExecutablePath,
}, },
}); });
firstRunSetupMessage = mpvExecutablePath firstRunSetupMessage =
? `Saved mpv executable path: ${mpvExecutablePath}` pathStatus === 'invalid'
: 'Cleared mpv executable path. SubMiner will auto-discover mpv.exe from PATH.'; ? `Saved mpv executable path, but the file was not found: ${mpvExecutablePath}`
: mpvExecutablePath
? `Saved mpv executable path: ${mpvExecutablePath}`
: 'Cleared mpv executable path. SubMiner will auto-discover mpv.exe from SUBMINER_MPV_PATH or PATH.';
return; return;
} }
if (submission.action === 'configure-windows-mpv-shortcuts') { if (submission.action === 'configure-windows-mpv-shortcuts') {

View File

@@ -61,6 +61,7 @@ test('buildFirstRunSetupHtml switches plugin action to reinstall when already in
assert.match(html, /Reinstall mpv plugin/); assert.match(html, /Reinstall mpv plugin/);
assert.match(html, /mpv executable path/); assert.match(html, /mpv executable path/);
assert.match(html, /Leave blank to auto-discover mpv\.exe from PATH\./); assert.match(html, /Leave blank to auto-discover mpv\.exe from PATH\./);
assert.match(html, /aria-label="Path to mpv\.exe"/);
assert.match( assert.match(
html, html,
/Finish stays unlocked once the mpv plugin is installed and Yomitan reports at least one installed dictionary\./, /Finish stays unlocked once the mpv plugin is installed and Yomitan reports at least one installed dictionary\./,

View File

@@ -130,6 +130,7 @@ export function buildFirstRunSetupHtml(model: FirstRunSetupHtmlModel): string {
<input <input
id="mpv-executable-path" id="mpv-executable-path"
type="text" type="text"
aria-label="Path to mpv.exe"
value="${escapeHtml(model.mpvExecutablePath)}" value="${escapeHtml(model.mpvExecutablePath)}"
placeholder="C:\\Program Files\\mpv\\mpv.exe" placeholder="C:\\Program Files\\mpv\\mpv.exe"
/> />

View File

@@ -134,6 +134,34 @@ test('buildWindowsMpvLaunchArgs mirrors a custom input-ipc-server into script op
); );
}); });
test('buildWindowsMpvLaunchArgs includes socket script opts when plugin entrypoint is present without binary path', () => {
assert.deepEqual(
buildWindowsMpvLaunchArgs(
['C:\\video.mkv'],
['--input-ipc-server', '\\\\.\\pipe\\custom-subminer-socket'],
undefined,
'C:\\Program Files\\SubMiner\\resources\\plugin\\subminer\\main.lua',
),
[
'--player-operation-mode=pseudo-gui',
'--force-window=immediate',
'--script=C:\\Program Files\\SubMiner\\resources\\plugin\\subminer\\main.lua',
'--input-ipc-server=\\\\.\\pipe\\custom-subminer-socket',
'--alang=ja,jp,jpn,japanese,en,eng,english,enus,en-us',
'--slang=ja,jp,jpn,japanese,en,eng,english,enus,en-us',
'--sub-auto=fuzzy',
'--sub-file-paths=subs;subtitles',
'--sid=auto',
'--secondary-sid=auto',
'--secondary-sub-visibility=no',
'--script-opts=subminer-socket_path=\\\\.\\pipe\\custom-subminer-socket',
'--input-ipc-server',
'\\\\.\\pipe\\custom-subminer-socket',
'C:\\video.mkv',
],
);
});
test('launchWindowsMpv reports missing mpv path', async () => { test('launchWindowsMpv reports missing mpv path', async () => {
const errors: string[] = []; const errors: string[] = [];
const result = await launchWindowsMpv( const result = await launchWindowsMpv(

View File

@@ -96,14 +96,17 @@ export function buildWindowsMpvLaunchArgs(
const launchIdle = targets.length === 0; const launchIdle = targets.length === 0;
const inputIpcServer = const inputIpcServer =
readExtraArgValue(extraArgs, '--input-ipc-server') ?? DEFAULT_WINDOWS_MPV_SOCKET; readExtraArgValue(extraArgs, '--input-ipc-server') ?? DEFAULT_WINDOWS_MPV_SOCKET;
const scriptOpts =
typeof binaryPath === 'string' && binaryPath.trim().length > 0
? `--script-opts=subminer-binary_path=${binaryPath.trim().replace(/,/g, '\\,')},subminer-socket_path=${inputIpcServer.replace(/,/g, '\\,')}`
: null;
const scriptEntrypoint = const scriptEntrypoint =
typeof pluginEntrypointPath === 'string' && pluginEntrypointPath.trim().length > 0 typeof pluginEntrypointPath === 'string' && pluginEntrypointPath.trim().length > 0
? `--script=${pluginEntrypointPath.trim()}` ? `--script=${pluginEntrypointPath.trim()}`
: null; : null;
const scriptOptPairs = scriptEntrypoint
? [`subminer-socket_path=${inputIpcServer.replace(/,/g, '\\,')}`]
: [];
if (scriptEntrypoint && typeof binaryPath === 'string' && binaryPath.trim().length > 0) {
scriptOptPairs.unshift(`subminer-binary_path=${binaryPath.trim().replace(/,/g, '\\,')}`);
}
const scriptOpts = scriptOptPairs.length > 0 ? `--script-opts=${scriptOptPairs.join(',')}` : null;
return [ return [
'--player-operation-mode=pseudo-gui', '--player-operation-mode=pseudo-gui',