Skip to content

Commit ae54f58

Browse files
committed
Merge upstream/main into refactor/extract-initialize-engine-settings
コンフリクト解消: - updateEngineSettingメソッドは削除(PR #2765でインライン化済み) - initializeEngineSettingsメソッドは追加(本PRの変更)
2 parents 43b6ffd + 48f2378 commit ae54f58

39 files changed

+1032
-604
lines changed

.github/workflows/build.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ jobs:
124124
app_asar_dir: prepackage/VOICEVOX.app/Contents/Resources
125125
installer_artifact_name: macos-cpu-x64-dmg
126126
macos_artifact_name: "VOICEVOX.${version}-x64.${ext}"
127-
os: macos-13
127+
os: macos-15-intel
128128
# macOS CPU (arm64)
129129
- artifact_name: macos-cpu-arm64-prepackage
130130
artifact_path: dist_electron/mac-arm64
@@ -454,8 +454,10 @@ jobs:
454454
for appImageFile in *.AppImage; do
455455
echo "Splitting ${appImageFile}"
456456
457-
# compressed to MyArtifact.AppImage.7z.001, MyArtifact.AppImage.7z.002, ...
458-
7z -v1g a "${{ matrix.linux_appimage_7z_name }}.7z" "${appImageFile}"
457+
# Split to MyArtifact.AppImage.7z.001, MyArtifact.AppImage.7z.002, ...
458+
# Use compression level 0 since AppImage is already compressed
459+
# .7z is needed for installer_linux.sh yet
460+
7z -mx=0 -v1g a "${{ matrix.linux_appimage_7z_name }}.7z" "${appImageFile}"
459461
460462
# Output split archive name<TAB>size<TAB>hash list to myartifact.7z.txt
461463
ls "${{ matrix.linux_appimage_7z_name }}.7z".* > archives_name.txt

.npmrc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1+
@jsr:registry=https://npm.jsr.io
12
engine-strict=true
23
save-exact=true
3-
@jsr:registry=https://npm.jsr.io
4-
manage-package-manager-versions=true

.pnpmfile.cjs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function readPackage(pkg, context) {
2+
// NOTE: @storybook/vue3はvue-component-type-helpersのlatestを要求しており、minimumReleaseAgeと相性が悪いので、ここで置き換える。
3+
if (pkg.name === "@storybook/vue3") {
4+
const deps = pkg.dependencies;
5+
if (deps["vue-component-type-helpers"] === "latest") {
6+
deps["vue-component-type-helpers"] = "~3.0.0";
7+
context.log(
8+
"vue-component-type-helpers@latest => vue-component-type-helpers@~3.0.0 in dependencies of @storybook/vue3",
9+
);
10+
}
11+
}
12+
return pkg;
13+
}
14+
15+
module.exports = {
16+
hooks: {
17+
readPackage,
18+
},
19+
};

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"volta": {
1212
"node": "22.14.0"
1313
},
14-
"packageManager": "pnpm@10.12.4",
14+
"packageManager": "pnpm@10.17.1",
1515
"scripts": {
1616
"// --- lint ---": "",
1717
"lint": "cross-env ESLINT_FILE_PROGRESS=1 eslint --cache",
@@ -93,7 +93,7 @@
9393
"@openapitools/openapi-generator-cli": "2.20.5",
9494
"@playwright/test": "1.53.1",
9595
"@quasar/vite-plugin": "1.9.0",
96-
"@storybook/addon-docs": "^9.0.11",
96+
"@storybook/addon-docs": "9.0.13",
9797
"@storybook/addon-links": "9.0.13",
9898
"@storybook/addon-themes": "9.0.13",
9999
"@storybook/addon-vitest": "9.0.13",
@@ -111,7 +111,7 @@
111111
"@vitest/browser": "3.2.4",
112112
"@vitest/eslint-plugin": "1.2.7",
113113
"@vitest/ui": "3.2.4",
114-
"@voicevox/eslint-plugin": "file:./eslint-plugin",
114+
"@voicevox/eslint-plugin": "file:eslint-plugin",
115115
"@vue/eslint-config-prettier": "10.2.0",
116116
"@vue/eslint-config-typescript": "14.5.1",
117117
"@vue/test-utils": "2.4.6",

pnpm-lock.yaml

Lines changed: 560 additions & 457 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pnpm-workspace.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
managePackageManagerVersions: true
2+
minimumReleaseAge: 10080

src/backend/electron/engineAndVvppController.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,7 @@ import { getEngineProcessManager } from "./manager/engineProcessManager";
1010
import { getRuntimeInfoManager } from "./manager/RuntimeInfoManager";
1111
import { getVvppManager } from "./manager/vvppManager";
1212
import { getWindowManager } from "./manager/windowManager";
13-
import {
14-
EngineId,
15-
EngineInfo,
16-
engineSettingSchema,
17-
EngineSettingType,
18-
} from "@/type/preload";
13+
import { EngineId, EngineInfo, engineSettingSchema } from "@/type/preload";
1914
import {
2015
PackageInfo,
2116
fetchLatestDefaultEngineInfo,
@@ -337,13 +332,6 @@ export class EngineAndVvppController {
337332
}
338333
}
339334

340-
/** エンジンの設定を更新し、保存する */
341-
updateEngineSetting(engineId: EngineId, engineSetting: EngineSettingType) {
342-
const engineSettings = this.configManager.get("engineSettings");
343-
engineSettings[engineId] = engineSetting;
344-
this.configManager.set(`engineSettings`, engineSettings);
345-
}
346-
347335
/** 各エンジンの設定を初期化する */
348336
private initializeEngineSettings() {
349337
// TODO: デフォルトエンジンの処理をConfigManagerに移してブラウザ版と共通化する

src/backend/electron/ipcMainHandle.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,9 @@ export function getIpcMainHandle(params: {
304304
},
305305

306306
SET_ENGINE_SETTING: async (_, engineId, engineSetting) => {
307-
engineAndVvppController.updateEngineSetting(engineId, engineSetting);
307+
const engineSettings = configManager.get("engineSettings");
308+
engineSettings[engineId] = engineSetting;
309+
configManager.set("engineSettings", engineSettings);
308310
},
309311

310312
SET_NATIVE_THEME: (_, source) => {

src/backend/electron/main.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import path from "node:path";
44

55
import fs from "node:fs";
66
import { pathToFileURL } from "node:url";
7-
import { app, dialog, Menu, net, protocol, shell } from "electron";
7+
import { app, dialog, Menu, net, protocol, session, shell } from "electron";
88
import installExtension, { VUEJS_DEVTOOLS } from "electron-devtools-installer";
99

1010
import electronLog from "electron-log/main";
@@ -22,6 +22,7 @@ import { registerIpcMainHandle, ipcMainSendProxy, IpcMainHandle } from "./ipc";
2222
import { getConfigManager } from "./electronConfig";
2323
import { getEngineAndVvppController } from "./engineAndVvppController";
2424
import { getIpcMainHandle } from "./ipcMainHandle";
25+
import { assertNonNullable } from "@/type/utility";
2526
import { EngineInfo } from "@/type/preload";
2627
import { isMac, isProduction } from "@/helpers/platform";
2728
import { createLogger } from "@/helpers/log";
@@ -163,6 +164,28 @@ void app.whenReady().then(() => {
163164
});
164165
});
165166

167+
// 信頼できるオリジン(開発サーバーまたは app プロトコル)からのセッション権限リクエストのみ許可し、それ以外は拒否
168+
void app.whenReady().then(() => {
169+
session.defaultSession.setPermissionRequestHandler(
170+
(webContents, permission, callback, { requestingUrl }) => {
171+
const parsedUrl = new URL(webContents.getURL());
172+
const parsedRequestingUrl = new URL(requestingUrl);
173+
let isAllowedResource: boolean;
174+
if (isDevelopment) {
175+
assertNonNullable(import.meta.env.VITE_DEV_SERVER_URL);
176+
const { origin } = new URL(import.meta.env.VITE_DEV_SERVER_URL);
177+
isAllowedResource =
178+
parsedUrl.origin === origin && parsedRequestingUrl.origin === origin;
179+
} else {
180+
isAllowedResource =
181+
parsedUrl.protocol === "app:" &&
182+
parsedRequestingUrl.protocol === "app:";
183+
}
184+
return callback(isAllowedResource);
185+
},
186+
);
187+
});
188+
166189
// engine
167190
const vvppEngineDir = path.join(app.getPath("userData"), "vvpp-engines");
168191

src/backend/electron/manager/engineProcessManager.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { createLogger } from "@/helpers/log";
2020
const log = createLogger("EngineProcessManager");
2121

2222
type EngineProcessContainer = {
23-
willQuitEngine: boolean;
23+
isGracefulShutdown: boolean;
2424
engineProcess?: ChildProcess;
2525
};
2626

@@ -135,12 +135,12 @@ export class EngineProcessManager {
135135

136136
if (!(engineId in this.engineProcessContainers)) {
137137
this.engineProcessContainers[engineId] = {
138-
willQuitEngine: false,
138+
isGracefulShutdown: false,
139139
};
140140
}
141141

142142
const engineProcessContainer = this.engineProcessContainers[engineId];
143-
engineProcessContainer.willQuitEngine = false;
143+
engineProcessContainer.isGracefulShutdown = false;
144144

145145
const engineSetting = this.configManager.get("engineSettings")[engineId];
146146
if (engineSetting == undefined)
@@ -193,7 +193,7 @@ export class EngineProcessManager {
193193
);
194194
log.info(`ENGINE ${engineId}: Process exited with code ${code}`);
195195

196-
if (!engineProcessContainer.willQuitEngine) {
196+
if (!engineProcessContainer.isGracefulShutdown) {
197197
const errorMessage =
198198
engineInfos.length === 1
199199
? "音声合成エンジンが異常終了しました。エンジンを再起動してください。"
@@ -275,7 +275,7 @@ export class EngineProcessManager {
275275
log.info(`ENGINE ${engineId}: Killing process (PID=${enginePid})`);
276276

277277
// エラーダイアログを抑制
278-
engineProcessContainer.willQuitEngine = true;
278+
engineProcessContainer.isGracefulShutdown = true;
279279

280280
// プロセス終了時のイベントハンドラ
281281
engineProcess.once("close", () => {
@@ -322,7 +322,7 @@ export class EngineProcessManager {
322322
}
323323

324324
// エンジンエラー時のエラーウィンドウ抑制用。
325-
engineProcessContainer.willQuitEngine = true;
325+
engineProcessContainer.isGracefulShutdown = true;
326326

327327
// 「killに使用するコマンドが終了するタイミング」と「OSがプロセスをkillするタイミング」が違うので単純にtreeKillのコールバック関数でrunEngine()を実行すると失敗します。
328328
// closeイベントはexitイベントよりも後に発火します。

0 commit comments

Comments
 (0)