diff --git a/src/components/App.vue b/src/components/App.vue index 31d2c60252..dd05fc3e57 100644 --- a/src/components/App.vue +++ b/src/components/App.vue @@ -163,6 +163,7 @@ onMounted(async () => { isAcceptTermsDialogOpen: import.meta.env.MODE !== "development" && store.state.acceptTerms !== "Accepted", + isInitialSettingsDialogOpen: store.state.openedEditor == undefined, }); // プロジェクトファイルが指定されていればロード diff --git a/src/components/Dialog/AllDialog.vue b/src/components/Dialog/AllDialog.vue index f6fd2111ff..b55c630dd2 100644 --- a/src/components/Dialog/AllDialog.vue +++ b/src/components/Dialog/AllDialog.vue @@ -34,6 +34,7 @@ /> + @@ -52,6 +53,7 @@ import DictionaryManageDialog from "@/components/Dialog/DictionaryManageDialog.v import EngineManageDialog from "@/components/Dialog/EngineManageDialog.vue"; import UpdateNotificationDialogContainer from "@/components/Dialog/UpdateNotificationDialog/Container.vue"; import ImportSongProjectDialog from "@/components/Dialog/ImportSongProjectDialog.vue"; +import InitialSettingsDialog from "@/components/Dialog/InitialSettingsDialog.vue"; import ExportSongAudioDialog from "@/components/Dialog/ExportSongAudioDialog/Container.vue"; import PresetManageDialog from "@/components/Dialog/PresetManageDialog.vue"; import HelpDialog from "@/components/Dialog/HelpDialog/HelpDialog.vue"; @@ -167,6 +169,20 @@ const isAcceptRetrieveTelemetryDialogOpenComputed = computed({ }), }); +// 初期設定ダイアログ +const isInitialSettingsDialogOpenComputed = computed({ + get: () => + !store.state.isAcceptTermsDialogOpen && + !store.state.isOldCharacterOrderDialogOpen && + !store.state.isOldDefaultStyleSelectDialogOpen && + !store.state.isAcceptRetrieveTelemetryDialogOpen && + store.state.isInitialSettingsDialogOpen, + set: (val) => + store.actions.SET_DIALOG_OPEN({ + isInitialSettingsDialogOpen: val, + }), +}); + // エディタのアップデート確認ダイアログ const canOpenNotificationDialog = computed(() => { return ( diff --git a/src/components/Dialog/InitialSettingsDialog.vue b/src/components/Dialog/InitialSettingsDialog.vue new file mode 100644 index 0000000000..b27c03b4e8 --- /dev/null +++ b/src/components/Dialog/InitialSettingsDialog.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/store/setting.ts b/src/store/setting.ts index 7026e50196..a72e74300a 100644 --- a/src/store/setting.ts +++ b/src/store/setting.ts @@ -15,6 +15,7 @@ import { EngineId, ConfirmedTips, RootMiscSettingType, + EditorType, } from "@/type/preload"; import { IsEqual } from "@/type/utility"; import { HotkeySettingType } from "@/domain/hotkeyAction"; @@ -436,4 +437,14 @@ export const settingStore = createPartialStore({ ); }, }, + + SET_INIT_OPEN_EDITOR: { + mutation(state, { editorType }: { editorType: EditorType }) { + state.openedEditor = editorType; + }, + action({ mutations }, { editorType }: { editorType: EditorType }) { + void window.backend.setSetting("openedEditor", editorType); + mutations.SET_INIT_OPEN_EDITOR({ editorType }); + }, + }, }); diff --git a/src/store/type.ts b/src/store/type.ts index 26de94b3e1..50e6a1a775 100644 --- a/src/store/type.ts +++ b/src/store/type.ts @@ -2030,9 +2030,7 @@ export type SettingStoreState = { experimentalSetting: ExperimentalSettingType; confirmedTips: ConfirmedTips; engineSettings: EngineSettings; -} & Omit & { - openedEditor: EditorType | undefined; // undefinedのときはどのエディタを開くか定まっていない - }; +} & RootMiscSettingType; // keyとvalueの型を連動するようにしたPayloadを作る type KeyValuePayload = K extends keyof R @@ -2121,6 +2119,11 @@ export type SettingStoreTypes = { APPEND_RECENTLY_USED_PROJECT: { action(payload: { filePath: string }): Promise; }; + + SET_INIT_OPEN_EDITOR: { + mutation: { editorType: EditorType }; + action(payload: { editorType: EditorType }): void; + }; }; /* @@ -2154,6 +2157,7 @@ export type DialogStates = { isUpdateNotificationDialogOpen: boolean; isExportSongAudioDialogOpen: boolean; isImportSongProjectDialogOpen: boolean; + isInitialSettingsDialogOpen: boolean; isPresetManageDialogOpen: boolean; isHelpDialogOpen: boolean; }; diff --git a/src/store/ui.ts b/src/store/ui.ts index 94db2da956..5060fc888c 100644 --- a/src/store/ui.ts +++ b/src/store/ui.ts @@ -79,6 +79,7 @@ export const uiStoreState: UiStoreState = { isUpdateNotificationDialogOpen: false, isExportSongAudioDialogOpen: false, isImportSongProjectDialogOpen: false, + isInitialSettingsDialogOpen: false, isPresetManageDialogOpen: false, isHelpDialogOpen: false, isMaximized: false, diff --git a/src/type/preload.ts b/src/type/preload.ts index f535d9ffe4..03226e5dd2 100644 --- a/src/type/preload.ts +++ b/src/type/preload.ts @@ -394,7 +394,7 @@ export type ConfirmedTips = { // ルート直下にある雑多な設定値 export const rootMiscSettingSchema = z.object({ - openedEditor: z.enum(["talk", "song"]).default("talk"), + openedEditor: z.enum(["talk", "song"]).optional(), editorFont: z.enum(["default", "os"]).default("default"), showTextLineNumber: z.boolean().default(false), showAddAudioItemButton: z.boolean().default(true), diff --git a/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap b/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap index 44d39ce2e2..3b493b654b 100644 --- a/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap +++ b/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap @@ -203,7 +203,6 @@ exports[`0.13.0からマイグレーションできる 1`] = ` }, ], "inheritAudioInfo": true, - "openedEditor": "talk", "playheadPositionDisplayFormat": "MINUTES_SECONDS", "presets": { "items": {},