From 5090efcae6060d2a1e503f79c06a25a37236b185 Mon Sep 17 00:00:00 2001 From: sevenc-nanashi Date: Thu, 27 Feb 2025 15:10:17 +0900 Subject: [PATCH 1/9] =?UTF-8?q?feat:=20=E8=A4=87=E8=A3=BD=E3=81=A8?= =?UTF-8?q?=E3=81=97=E3=81=A6=E4=BF=9D=E5=AD=98=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Menu/MenuBar/MenuBar.vue | 18 +++ src/domain/hotkeyAction.ts | 9 +- src/store/project.ts | 200 ++++++++++++++---------- src/store/type.ts | 4 + 4 files changed, 147 insertions(+), 84 deletions(-) diff --git a/src/components/Menu/MenuBar/MenuBar.vue b/src/components/Menu/MenuBar/MenuBar.vue index 22fd164ce6..2cfb5bffab 100644 --- a/src/components/Menu/MenuBar/MenuBar.vue +++ b/src/components/Menu/MenuBar/MenuBar.vue @@ -152,6 +152,12 @@ const saveProjectAs = async () => { } }; +const saveProjectCopy = async () => { + if (!uiLocked.value) { + await store.actions.SAVE_PROJECT_FILE_AS_COPY({}); + } +}; + const importProject = () => { if (!uiLocked.value) { void store.actions.LOAD_PROJECT_FILE({ type: "dialog" }); @@ -338,6 +344,14 @@ const menudata = computed(() => [ }, disableWhenUiLocked: true, }, + { + type: "button", + label: "プロジェクトを複製として保存", + onClick: async () => { + await saveProjectCopy(); + }, + disableWhenUiLocked: true, + }, { type: "button", label: "プロジェクトを読み込む", @@ -585,6 +599,10 @@ registerHotkeyForAllEditors({ callback: saveProjectAs, name: "プロジェクトを名前を付けて保存", }); +registerHotkeyForAllEditors({ + callback: saveProjectCopy, + name: "プロジェクトを複製として保存", +}); registerHotkeyForAllEditors({ callback: importProject, name: "プロジェクトを読み込む", diff --git a/src/domain/hotkeyAction.ts b/src/domain/hotkeyAction.ts index 6c92c63556..547984009a 100644 --- a/src/domain/hotkeyAction.ts +++ b/src/domain/hotkeyAction.ts @@ -28,6 +28,7 @@ export const hotkeyActionNameSchema = z.enum([ "新規プロジェクト", "プロジェクトを名前を付けて保存", "プロジェクトを上書き保存", + "プロジェクトを複製として保存", "プロジェクトを読み込む", "テキストを読み込む", "全体のイントネーションをリセット", @@ -146,13 +147,17 @@ export function getDefaultHotkeySettings({ action: "全画面表示を切り替え", combination: HotkeyCombination(!isMac ? "F11" : "Ctrl Meta F"), }, + { + action: "プロジェクトを上書き保存", + combination: HotkeyCombination(!isMac ? "Ctrl S" : "Meta S"), + }, { action: "プロジェクトを名前を付けて保存", combination: HotkeyCombination(!isMac ? "Ctrl Shift S" : "Shift Meta S"), }, { - action: "プロジェクトを上書き保存", - combination: HotkeyCombination(!isMac ? "Ctrl S" : "Meta S"), + action: "プロジェクトを複製として保存", + combination: HotkeyCombination(!isMac ? "Ctrl Alt S" : "Alt Meta S"), }, { action: "プロジェクトを読み込む", diff --git a/src/store/project.ts b/src/store/project.ts index 9bf44f82c6..ed93350d2d 100755 --- a/src/store/project.ts +++ b/src/store/project.ts @@ -29,6 +29,7 @@ import { } from "@/components/Dialog/Dialog"; import { uuid4 } from "@/helpers/random"; import { getAppInfos } from "@/domain/appInfo"; +import { errorToMessage } from "@/helpers/errorHelper"; export const projectStoreState: ProjectStoreState = { savedLastCommandIds: { talk: null, song: null }, @@ -246,104 +247,139 @@ export const projectStore = createPartialStore({ ), }, - SAVE_PROJECT_FILE: { + SAVE_PROJECT_FILE_AS_COPY: { /** - * プロジェクトファイルを保存する。保存の成否が返る。 + * プロジェクトファイルを複製として保存する。保存の成否が返る。 * エラー発生時はダイアログが表示される。 */ - action: createUILockAction( - async (context, { overwrite }: { overwrite?: boolean }) => { - let filePath = context.state.projectFilePath; - try { - if (!overwrite || !filePath) { - let defaultPath: string; - - if (!filePath) { - // if new project: use generated name - defaultPath = `${context.getters.DEFAULT_PROJECT_FILE_BASE_NAME}.vvproj`; - } else { - // if saveAs for existing project: use current project path - defaultPath = filePath; - } - - // Write the current status to a project file. - const ret = await window.backend.showSaveFileDialog({ - title: "プロジェクトファイルの保存", - name: "VOICEVOX Project file", - extensions: ["vvproj"], - defaultPath, - }); - if (ret == undefined) { - return false; - } - filePath = ret; - } - if ( - context.state.projectFilePath && - context.state.projectFilePath != filePath - ) { - await showMessageDialog({ - type: "info", - title: "保存", - message: `編集中のプロジェクトが ${filePath} に切り替わりました。`, - }); + action: createUILockAction(async (context, { filePath: filePathArg }) => { + let filePath = filePathArg; + try { + if (!filePath) { + let defaultPath: string; + + if (!filePath) { + // if new project: use generated name + defaultPath = `${context.getters.DEFAULT_PROJECT_FILE_BASE_NAME}.vvproj`; + } else { + // if saveAs for existing project: use current project path + defaultPath = filePath; } - await context.actions.APPEND_RECENTLY_USED_PROJECT({ - filePath, + // Write the current status to a project file. + const ret = await window.backend.showSaveFileDialog({ + title: "プロジェクトファイルの保存", + name: "VOICEVOX Project file", + extensions: ["vvproj"], + defaultPath, }); - const appVersion = getAppInfos().version; - const { - audioItems, + if (ret == undefined) { + return false; + } + filePath = ret; + } + + const appVersion = getAppInfos().version; + const { + audioItems, + audioKeys, + tpqn, + tempos, + timeSignatures, + tracks, + trackOrder, + } = context.state; + const projectData: LatestProjectType = { + appVersion, + talk: { audioKeys, + audioItems, + }, + song: { tpqn, tempos, timeSignatures, - tracks, + tracks: Object.fromEntries(tracks), trackOrder, - } = context.state; - const projectData: LatestProjectType = { - appVersion, - talk: { - audioKeys, - audioItems, - }, - song: { - tpqn, - tempos, - timeSignatures, - tracks: Object.fromEntries(tracks), - trackOrder, - }, - }; - - const buf = new TextEncoder().encode( - JSON.stringify(projectData), - ).buffer; - await window.backend - .writeFile({ - filePath, - buffer: buf, - }) - .then(getValueOrThrow); + }, + }; + + const buf = new TextEncoder().encode( + JSON.stringify(projectData), + ).buffer; + await window.backend + .writeFile({ + filePath, + buffer: buf, + }) + .then(getValueOrThrow); + return true; + } catch (err) { + window.backend.logError(err); + await showAlertDialog({ + title: "エラー", + message: `プロジェクトファイルの保存に失敗しました。\n${errorToMessage(err)}`, + }); + return false; + } + }), + }, + + SAVE_PROJECT_FILE: { + /** + * プロジェクトファイルを保存し、現在のプロジェクトファイルのパスを更新する。保存の成否が返る。 + */ + action: createUILockAction( + async (context, { overwrite }: { overwrite?: boolean }) => { + let filePath = context.state.projectFilePath; + if (!overwrite || !filePath) { + let defaultPath: string; + + if (!filePath) { + // if new project: use generated name + defaultPath = `${context.getters.DEFAULT_PROJECT_FILE_BASE_NAME}.vvproj`; + } else { + // if saveAs for existing project: use current project path + defaultPath = filePath; + } + + // Write the current status to a project file. + const ret = await window.backend.showSaveFileDialog({ + title: "プロジェクトファイルの保存", + name: "VOICEVOX Project file", + extensions: ["vvproj"], + defaultPath, + }); + if (ret == undefined) { + return false; + } + filePath = ret; + } + if ( + context.state.projectFilePath && + context.state.projectFilePath != filePath + ) { + await showMessageDialog({ + type: "info", + title: "保存", + message: `編集中のプロジェクトが ${filePath} に切り替わりました。`, + }); + } + + await context.actions.APPEND_RECENTLY_USED_PROJECT({ + filePath, + }); + const result = await context.actions.SAVE_PROJECT_FILE_AS_COPY({ + filePath, + }); + if (result) { context.mutations.SET_PROJECT_FILEPATH({ filePath }); context.mutations.SET_SAVED_LAST_COMMAND_IDS( context.getters.LAST_COMMAND_IDS, ); - return true; - } catch (err) { - window.backend.logError(err); - const message = (() => { - if (typeof err === "string") return err; - if (!(err instanceof Error)) return "エラーが発生しました。"; - return err.message; - })(); - await showAlertDialog({ - title: "エラー", - message: `プロジェクトファイルの保存に失敗しました。\n${message}`, - }); - return false; } + + return result; }, ), }, diff --git a/src/store/type.ts b/src/store/type.ts index c39a074478..e26ab779fd 100644 --- a/src/store/type.ts +++ b/src/store/type.ts @@ -1853,6 +1853,10 @@ export type ProjectStoreTypes = { action(payload: { overwrite?: boolean }): boolean; }; + SAVE_PROJECT_FILE_AS_COPY: { + action(payload: { filePath?: string }): boolean; + }; + SAVE_OR_DISCARD_PROJECT_FILE: { action(palyoad: { additionalMessage?: string; From e8f2fdcc4dd5784c5df0ff7ba17540ea5b991d81 Mon Sep 17 00:00:00 2001 From: sevenc-nanashi Date: Thu, 27 Feb 2025 15:32:46 +0900 Subject: [PATCH 2/9] =?UTF-8?q?test:=20snapshot=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/__snapshots__/configManager.spec.ts.snap | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap b/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap index 23598f3943..748860aa41 100644 --- a/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap +++ b/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap @@ -19,7 +19,7 @@ exports[`0.13.0からマイグレーションできる 1`] = ` "enablePreset": false, "enableRubyNotation": false, "engineSettings": { - "00000000-0000-0000-0000-000000000000": { + "074fc39e-678b-4c13-8916-ffca8d505d1d": { "outputSamplingRate": "engineDefault", "useGpu": false, }, @@ -112,13 +112,17 @@ exports[`0.13.0からマイグレーションできる 1`] = ` "action": "全画面表示を切り替え", "combination": "F11", }, + { + "action": "プロジェクトを上書き保存", + "combination": "Ctrl S", + }, { "action": "プロジェクトを名前を付けて保存", "combination": "Ctrl Shift S", }, { - "action": "プロジェクトを上書き保存", - "combination": "Ctrl S", + "action": "プロジェクトを複製として保存", + "combination": "Ctrl Alt S", }, { "action": "プロジェクトを読み込む", From e1d6cae4745c04965507c6b2863e499e86c3eb8e Mon Sep 17 00:00:00 2001 From: sevenc-nanashi Date: Thu, 27 Feb 2025 15:46:15 +0900 Subject: [PATCH 3/9] =?UTF-8?q?test:=20.env.test.local=E3=81=8C=E4=B8=8A?= =?UTF-8?q?=E6=9B=B8=E3=81=8D=E3=81=97=E3=81=A6=E3=81=84=E3=81=9F...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/common/__snapshots__/configManager.spec.ts.snap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap b/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap index 748860aa41..a73d4a5ec4 100644 --- a/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap +++ b/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap @@ -19,7 +19,7 @@ exports[`0.13.0からマイグレーションできる 1`] = ` "enablePreset": false, "enableRubyNotation": false, "engineSettings": { - "074fc39e-678b-4c13-8916-ffca8d505d1d": { + "00000000-0000-0000-0000-000000000000": { "outputSamplingRate": "engineDefault", "useGpu": false, }, From 79f66d90cdd63415fc9635876ac6a202551360d8 Mon Sep 17 00:00:00 2001 From: sevenc-nanashi Date: Thu, 27 Feb 2025 16:39:44 +0900 Subject: [PATCH 4/9] =?UTF-8?q?chore:=20=E9=A0=86=E5=BA=8F=E3=82=92?= =?UTF-8?q?=E6=8F=83=E3=81=88=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/domain/hotkeyAction.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/domain/hotkeyAction.ts b/src/domain/hotkeyAction.ts index 547984009a..f9bc1dd192 100644 --- a/src/domain/hotkeyAction.ts +++ b/src/domain/hotkeyAction.ts @@ -26,8 +26,8 @@ export const hotkeyActionNameSchema = z.enum([ "元に戻す", "やり直す", "新規プロジェクト", - "プロジェクトを名前を付けて保存", "プロジェクトを上書き保存", + "プロジェクトを名前を付けて保存", "プロジェクトを複製として保存", "プロジェクトを読み込む", "テキストを読み込む", From 02d5074bbca1837005f5764e14e25916c841cb08 Mon Sep 17 00:00:00 2001 From: sevenc-nanashi Date: Thu, 27 Feb 2025 16:48:37 +0900 Subject: [PATCH 5/9] =?UTF-8?q?chore:=20=E9=96=A2=E6=95=B0=E3=82=92?= =?UTF-8?q?=E5=88=86=E5=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/project.ts | 133 ++++++++++++++++++++----------------------- src/store/type.ts | 8 +++ 2 files changed, 71 insertions(+), 70 deletions(-) diff --git a/src/store/project.ts b/src/store/project.ts index ed93350d2d..2413d703ba 100755 --- a/src/store/project.ts +++ b/src/store/project.ts @@ -256,63 +256,12 @@ export const projectStore = createPartialStore({ let filePath = filePathArg; try { if (!filePath) { - let defaultPath: string; - + filePath = await context.actions.PROMPT_PROJECT_SAVE_FILE_PATH({}); if (!filePath) { - // if new project: use generated name - defaultPath = `${context.getters.DEFAULT_PROJECT_FILE_BASE_NAME}.vvproj`; - } else { - // if saveAs for existing project: use current project path - defaultPath = filePath; - } - - // Write the current status to a project file. - const ret = await window.backend.showSaveFileDialog({ - title: "プロジェクトファイルの保存", - name: "VOICEVOX Project file", - extensions: ["vvproj"], - defaultPath, - }); - if (ret == undefined) { return false; } - filePath = ret; } - const appVersion = getAppInfos().version; - const { - audioItems, - audioKeys, - tpqn, - tempos, - timeSignatures, - tracks, - trackOrder, - } = context.state; - const projectData: LatestProjectType = { - appVersion, - talk: { - audioKeys, - audioItems, - }, - song: { - tpqn, - tempos, - timeSignatures, - tracks: Object.fromEntries(tracks), - trackOrder, - }, - }; - - const buf = new TextEncoder().encode( - JSON.stringify(projectData), - ).buffer; - await window.backend - .writeFile({ - filePath, - buffer: buf, - }) - .then(getValueOrThrow); return true; } catch (err) { window.backend.logError(err); @@ -333,27 +282,12 @@ export const projectStore = createPartialStore({ async (context, { overwrite }: { overwrite?: boolean }) => { let filePath = context.state.projectFilePath; if (!overwrite || !filePath) { - let defaultPath: string; - - if (!filePath) { - // if new project: use generated name - defaultPath = `${context.getters.DEFAULT_PROJECT_FILE_BASE_NAME}.vvproj`; - } else { - // if saveAs for existing project: use current project path - defaultPath = filePath; - } - - // Write the current status to a project file. - const ret = await window.backend.showSaveFileDialog({ - title: "プロジェクトファイルの保存", - name: "VOICEVOX Project file", - extensions: ["vvproj"], - defaultPath, + filePath = await context.actions.PROMPT_PROJECT_SAVE_FILE_PATH({ + defaultFilePath: filePath, }); - if (ret == undefined) { + if (!filePath) { return false; } - filePath = ret; } if ( context.state.projectFilePath && @@ -384,6 +318,65 @@ export const projectStore = createPartialStore({ ), }, + PROMPT_PROJECT_SAVE_FILE_PATH: { + async action(context, { defaultFilePath }) { + let defaultPath: string; + + if (!defaultFilePath) { + // if new project: use generated name + defaultPath = `${context.getters.DEFAULT_PROJECT_FILE_BASE_NAME}.vvproj`; + } else { + // if saveAs for existing project: use current project path + defaultPath = defaultFilePath; + } + + // Write the current status to a project file. + return await window.backend.showSaveFileDialog({ + title: "プロジェクトファイルの保存", + name: "VOICEVOX Project file", + extensions: ["vvproj"], + defaultPath, + }); + }, + }, + + WRITE_PROJECT_FILE: { + action: createUILockAction(async (context, { filePath }) => { + const appVersion = getAppInfos().version; + const { + audioItems, + audioKeys, + tpqn, + tempos, + timeSignatures, + tracks, + trackOrder, + } = context.state; + const projectData: LatestProjectType = { + appVersion, + talk: { + audioKeys, + audioItems, + }, + song: { + tpqn, + tempos, + timeSignatures, + tracks: Object.fromEntries(tracks), + trackOrder, + }, + }; + + const buf = new TextEncoder().encode(JSON.stringify(projectData)).buffer; + await window.backend + .writeFile({ + filePath, + buffer: buf, + }) + .then(getValueOrThrow); + }), + }, + /** * プロジェクトファイルを保存するか破棄するかキャンセルするかのダイアログを出して、保存する場合は保存する。 * 何を選択したかが返る。 diff --git a/src/store/type.ts b/src/store/type.ts index e26ab779fd..60c633f41c 100644 --- a/src/store/type.ts +++ b/src/store/type.ts @@ -1857,6 +1857,14 @@ export type ProjectStoreTypes = { action(payload: { filePath?: string }): boolean; }; + PROMPT_PROJECT_SAVE_FILE_PATH: { + action(payload: { defaultFilePath?: string }): Promise; + }; + + WRITE_PROJECT_FILE: { + action(payload: { filePath: string }): Promise; + }; + SAVE_OR_DISCARD_PROJECT_FILE: { action(palyoad: { additionalMessage?: string; From ad592b00c86b38eb117e2ac8b14fa416d1c962f4 Mon Sep 17 00:00:00 2001 From: sevenc-nanashi Date: Thu, 27 Feb 2025 22:44:45 +0900 Subject: [PATCH 6/9] =?UTF-8?q?feat:=20=E4=BF=9D=E5=AD=98=E5=91=A8?= =?UTF-8?q?=E3=82=8A=E3=82=92=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/project.ts | 60 ++++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/src/store/project.ts b/src/store/project.ts index 2413d703ba..d26614e7bf 100755 --- a/src/store/project.ts +++ b/src/store/project.ts @@ -261,6 +261,7 @@ export const projectStore = createPartialStore({ return false; } } + await context.actions.WRITE_PROJECT_FILE({ filePath }); return true; } catch (err) { @@ -281,39 +282,48 @@ export const projectStore = createPartialStore({ action: createUILockAction( async (context, { overwrite }: { overwrite?: boolean }) => { let filePath = context.state.projectFilePath; - if (!overwrite || !filePath) { - filePath = await context.actions.PROMPT_PROJECT_SAVE_FILE_PATH({ - defaultFilePath: filePath, - }); - if (!filePath) { - return false; + + try { + if (!overwrite || !filePath) { + filePath = await context.actions.PROMPT_PROJECT_SAVE_FILE_PATH({ + defaultFilePath: filePath, + }); + if (!filePath) { + return false; + } } - } - if ( - context.state.projectFilePath && - context.state.projectFilePath != filePath - ) { - await showMessageDialog({ - type: "info", - title: "保存", - message: `編集中のプロジェクトが ${filePath} に切り替わりました。`, + await context.actions.WRITE_PROJECT_FILE({ filePath }); + + if ( + context.state.projectFilePath && + context.state.projectFilePath != filePath + ) { + await showMessageDialog({ + type: "info", + title: "保存", + message: `編集中のプロジェクトが ${filePath} に切り替わりました。`, + }); + } + + await context.actions.APPEND_RECENTLY_USED_PROJECT({ + filePath, }); - } + await context.actions.WRITE_PROJECT_FILE({ filePath }); - await context.actions.APPEND_RECENTLY_USED_PROJECT({ - filePath, - }); - const result = await context.actions.SAVE_PROJECT_FILE_AS_COPY({ - filePath, - }); - if (result) { context.mutations.SET_PROJECT_FILEPATH({ filePath }); context.mutations.SET_SAVED_LAST_COMMAND_IDS( context.getters.LAST_COMMAND_IDS, ); - } - return result; + return true; + } catch (err) { + window.backend.logError(err); + await showAlertDialog({ + title: "エラー", + message: `プロジェクトファイルの保存に失敗しました。\n${errorToMessage(err)}`, + }); + return false; + } }, ), }, From ef5758f8ec4b78f02d7d002a56c4162f804431e6 Mon Sep 17 00:00:00 2001 From: sevenc-nanashi Date: Thu, 27 Feb 2025 22:46:31 +0900 Subject: [PATCH 7/9] =?UTF-8?q?test:=20snapshot=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Menu/MenuBar/MenuBar.vue | 4 ++-- src/domain/hotkeyAction.ts | 4 ++-- .../backend/common/__snapshots__/configManager.spec.ts.snap | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/Menu/MenuBar/MenuBar.vue b/src/components/Menu/MenuBar/MenuBar.vue index 2cfb5bffab..969ea5780b 100644 --- a/src/components/Menu/MenuBar/MenuBar.vue +++ b/src/components/Menu/MenuBar/MenuBar.vue @@ -346,7 +346,7 @@ const menudata = computed(() => [ }, { type: "button", - label: "プロジェクトを複製として保存", + label: "プロジェクトの複製を保存", onClick: async () => { await saveProjectCopy(); }, @@ -601,7 +601,7 @@ registerHotkeyForAllEditors({ }); registerHotkeyForAllEditors({ callback: saveProjectCopy, - name: "プロジェクトを複製として保存", + name: "プロジェクトの複製を保存", }); registerHotkeyForAllEditors({ callback: importProject, diff --git a/src/domain/hotkeyAction.ts b/src/domain/hotkeyAction.ts index f9bc1dd192..21e0ea7f17 100644 --- a/src/domain/hotkeyAction.ts +++ b/src/domain/hotkeyAction.ts @@ -28,7 +28,7 @@ export const hotkeyActionNameSchema = z.enum([ "新規プロジェクト", "プロジェクトを上書き保存", "プロジェクトを名前を付けて保存", - "プロジェクトを複製として保存", + "プロジェクトの複製を保存", "プロジェクトを読み込む", "テキストを読み込む", "全体のイントネーションをリセット", @@ -156,7 +156,7 @@ export function getDefaultHotkeySettings({ combination: HotkeyCombination(!isMac ? "Ctrl Shift S" : "Shift Meta S"), }, { - action: "プロジェクトを複製として保存", + action: "プロジェクトの複製を保存", combination: HotkeyCombination(!isMac ? "Ctrl Alt S" : "Alt Meta S"), }, { diff --git a/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap b/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap index a73d4a5ec4..c7b4ee14d0 100644 --- a/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap +++ b/tests/unit/backend/common/__snapshots__/configManager.spec.ts.snap @@ -121,7 +121,7 @@ exports[`0.13.0からマイグレーションできる 1`] = ` "combination": "Ctrl Shift S", }, { - "action": "プロジェクトを複製として保存", + "action": "プロジェクトの複製を保存", "combination": "Ctrl Alt S", }, { From 4c954356db1510c134178424f6cb32ee64f00f8d Mon Sep 17 00:00:00 2001 From: sevenc-nanashi Date: Thu, 27 Feb 2025 22:47:27 +0900 Subject: [PATCH 8/9] =?UTF-8?q?chore:=20=E3=83=AD=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=82=92=E5=89=A5=E3=81=8C=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/project.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/store/project.ts b/src/store/project.ts index d26614e7bf..164036490e 100755 --- a/src/store/project.ts +++ b/src/store/project.ts @@ -351,7 +351,7 @@ export const projectStore = createPartialStore({ }, WRITE_PROJECT_FILE: { - action: createUILockAction(async (context, { filePath }) => { + action: async (context, { filePath }) => { const appVersion = getAppInfos().version; const { audioItems, @@ -384,7 +384,7 @@ export const projectStore = createPartialStore({ buffer: buf, }) .then(getValueOrThrow); - }), + }, }, /** From 49853a84ddc5f43b8f1eca9dcef6e45533dba4e2 Mon Sep 17 00:00:00 2001 From: sevenc-nanashi Date: Thu, 27 Feb 2025 22:48:29 +0900 Subject: [PATCH 9/9] =?UTF-8?q?fix:=20=E4=BA=8C=E5=BA=A6=E6=9B=B8=E3=81=8D?= =?UTF-8?q?=E3=81=97=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=81=A7=E7=9B=B4?= =?UTF-8?q?=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/project.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/store/project.ts b/src/store/project.ts index 164036490e..c0957064a3 100755 --- a/src/store/project.ts +++ b/src/store/project.ts @@ -292,7 +292,6 @@ export const projectStore = createPartialStore({ return false; } } - await context.actions.WRITE_PROJECT_FILE({ filePath }); if ( context.state.projectFilePath &&