diff --git a/src/background.ts b/src/background.ts index 43d60c5329..6b9dee886a 100644 --- a/src/background.ts +++ b/src/background.ts @@ -964,7 +964,33 @@ app.once("will-finish-launching", () => { }); app.on("ready", async () => { - await configManager.initialize(); + await configManager.initialize().catch(async (e) => { + log.error(e); + await dialog + .showMessageBox({ + type: "error", + title: "設定ファイルの読み込みエラー", + message: `設定ファイルの読み込みに失敗しました。${app.getPath( + "userData" + )} にある config.json の名前を変えることで解決することがあります(ただし設定がすべてリセットされます)。設定ファイルがあるフォルダを開きますか?`, + buttons: ["いいえ", "はい"], + noLink: true, + cancelId: 0, + }) + .then(async ({ response }) => { + if (response === 1) { + await shell.openPath(app.getPath("userData")); + // 直後にexitするとフォルダが開かないため + await new Promise((resolve) => { + setTimeout(resolve, 500); + }); + } + }) + .finally(async () => { + await configManager?.ensureSaved(); + app.exit(1); + }); + }); if (isDevelopment && !isTest) { try { diff --git a/src/background/electronConfig.ts b/src/background/electronConfig.ts index 1c1d74c96b..0fde5e668d 100644 --- a/src/background/electronConfig.ts +++ b/src/background/electronConfig.ts @@ -1,7 +1,6 @@ import { join } from "path"; import fs from "fs"; -import { app, dialog, shell } from "electron"; -import log from "electron-log/main"; +import { app } from "electron"; import { BaseConfigManager, Metadata } from "@/shared/ConfigManager"; import { ConfigType } from "@/type/preload"; @@ -36,39 +35,8 @@ export class ElectronConfigManager extends BaseConfigManager { let configManager: ElectronConfigManager | undefined; export function getConfigManager(): ElectronConfigManager { - try { - if (!configManager) { - configManager = new ElectronConfigManager(); - } - return configManager; - } catch (e) { - log.error(e); - app.whenReady().then(() => { - dialog - .showMessageBox({ - type: "error", - title: "設定ファイルの読み込みエラー", - message: `設定ファイルの読み込みに失敗しました。${app.getPath( - "userData" - )} にある config.json の名前を変えることで解決することがあります(ただし設定がすべてリセットされます)。設定ファイルがあるフォルダを開きますか?`, - buttons: ["いいえ", "はい"], - noLink: true, - cancelId: 0, - }) - .then(async ({ response }) => { - if (response === 1) { - await shell.openPath(app.getPath("userData")); - // 直後にexitするとフォルダが開かないため - await new Promise((resolve) => { - setTimeout(resolve, 500); - }); - } - }) - .finally(async () => { - await configManager?.ensureSaved(); - app.exit(1); - }); - }); - throw e; + if (!configManager) { + configManager = new ElectronConfigManager(); } + return configManager; }