diff --git a/src/backend/browser/fileImpl.ts b/src/backend/browser/fileImpl.ts index dea154cc89..d90b4d6a11 100644 --- a/src/backend/browser/fileImpl.ts +++ b/src/backend/browser/fileImpl.ts @@ -133,7 +133,7 @@ export type WritableFilePath = // NOTE: fixedExportEnabled が有効になっている GENERATE_AND_SAVE_AUDIO action では、ファイル名に加えディレクトリ名も指定された状態でfilePathが渡ってくる // また GENERATE_AND_SAVE_ALL_AUDIO action では fixedExportEnabled の有効の有無に関わらず、ディレクトリ名も指定された状態でfilePathが渡ってくる -// showExportFilePicker での疑似パスが渡ってくる可能性もある。 +// showSaveFilePicker での疑似パスが渡ってくる可能性もある。 export const writeFileImpl = async (obj: { filePath: WritableFilePath; buffer: ArrayBuffer; @@ -265,10 +265,10 @@ export const readFileImpl = async (filePath: string) => { // ファイル選択ダイアログを開く // 返り値はファイルパスではなく、疑似パスを返す -export const showExportFilePickerImpl: (typeof window)[typeof SandboxKey]["showExportFileDialog"] = +export const showSaveFilePickerImpl: (typeof window)[typeof SandboxKey]["showSaveFileDialog"] = async (obj: { defaultPath?: string; - extensionName: string; + name: string; extensions: string[]; title: string; }) => { diff --git a/src/backend/browser/sandbox.ts b/src/backend/browser/sandbox.ts index 56cd53499b..08d8f5398b 100644 --- a/src/backend/browser/sandbox.ts +++ b/src/backend/browser/sandbox.ts @@ -2,7 +2,7 @@ import { defaultEngine } from "./contract"; import { checkFileExistsImpl, readFileImpl, - showExportFilePickerImpl, + showSaveFilePickerImpl, showOpenDirectoryDialogImpl, showOpenFilePickerImpl, WritableFilePath, @@ -85,20 +85,6 @@ export const api: Sandbox = { showOpenDirectoryDialog(obj: { title: string }) { return showOpenDirectoryDialogImpl(obj); }, - showProjectSaveDialog(obj: { title: string; defaultPath?: string }) { - return new Promise((resolve, reject) => { - if (obj.defaultPath == undefined) { - reject( - // storeやvue componentからdefaultPathを設定していなかったらrejectされる - new Error( - "ブラウザ版ではファイルの保存機能が一部サポートされていません。", - ), - ); - } else { - resolve(obj.defaultPath); - } - }); - }, async showOpenFileDialog(obj: { title: string; name: string; @@ -116,13 +102,13 @@ export const api: Sandbox = { }); return fileHandle?.[0]; }, - async showExportFileDialog(obj: { - defaultPath?: string; - extensionName: string; - extensions: string[]; + async showSaveFileDialog(obj: { title: string; + name: string; + extensions: string[]; + defaultPath?: string; }) { - const fileHandle = await showExportFilePickerImpl(obj); + const fileHandle = await showSaveFilePickerImpl(obj); return fileHandle; }, writeFile(obj: { filePath: string; buffer: ArrayBuffer }) { diff --git a/src/backend/electron/main.ts b/src/backend/electron/main.ts index f91eb32b85..1ea4271582 100644 --- a/src/backend/electron/main.ts +++ b/src/backend/electron/main.ts @@ -418,21 +418,6 @@ registerIpcMainHandle({ return result.filePaths[0]; }, - SHOW_PROJECT_SAVE_DIALOG: async (_, { title, defaultPath }) => { - const result = await retryShowSaveDialogWhileSafeDir(() => - windowManager.showSaveDialog({ - title, - defaultPath, - filters: [{ name: "VOICEVOX Project file", extensions: ["vvproj"] }], - properties: ["showOverwriteConfirmation"], - }), - ); - if (result.canceled) { - return undefined; - } - return result.filePath; - }, - SHOW_WARNING_DIALOG: (_, { title, message }) => { return windowManager.showMessageBox({ type: "warning", @@ -458,18 +443,21 @@ registerIpcMainHandle({ })?.[0]; }, - SHOW_EXPORT_FILE_DIALOG: async ( + SHOW_SAVE_FILE_DIALOG: async ( _, - { title, defaultPath, extensionName, extensions }, + { title, defaultPath, name, extensions }, ) => { const result = await retryShowSaveDialogWhileSafeDir(() => windowManager.showSaveDialog({ title, defaultPath, - filters: [{ name: extensionName, extensions: extensions }], + filters: [{ name, extensions }], properties: ["createDirectory"], }), ); + if (result.canceled) { + return undefined; + } return result.filePath; }, diff --git a/src/backend/electron/preload.ts b/src/backend/electron/preload.ts index 9c5b46ce96..08521d1605 100644 --- a/src/backend/electron/preload.ts +++ b/src/backend/electron/preload.ts @@ -45,13 +45,6 @@ const api: Sandbox = { return ipcRendererInvokeProxy.SHOW_OPEN_DIRECTORY_DIALOG({ title }); }, - showProjectSaveDialog: ({ title, defaultPath }) => { - return ipcRendererInvokeProxy.SHOW_PROJECT_SAVE_DIALOG({ - title, - defaultPath, - }); - }, - showOpenFileDialog: ({ title, name, extensions, defaultPath }) => { return ipcRendererInvokeProxy.SHOW_OPEN_FILE_DIALOG({ title, @@ -61,12 +54,12 @@ const api: Sandbox = { }); }, - showExportFileDialog: ({ title, defaultPath, extensionName, extensions }) => { - return ipcRendererInvokeProxy.SHOW_EXPORT_FILE_DIALOG({ + showSaveFileDialog: ({ title, name, extensions, defaultPath }) => { + return ipcRendererInvokeProxy.SHOW_SAVE_FILE_DIALOG({ title, - defaultPath, - extensionName, + name, extensions, + defaultPath, }); }, diff --git a/src/store/audio.ts b/src/store/audio.ts index 6fe38d224a..3b7410cd74 100644 --- a/src/store/audio.ts +++ b/src/store/audio.ts @@ -1376,11 +1376,11 @@ export const audioStore = createPartialStore({ defaultAudioFileName, ); } else { - filePath ??= await window.backend.showExportFileDialog({ + filePath ??= await window.backend.showSaveFileDialog({ title: "音声を保存", - defaultPath: defaultAudioFileName, - extensionName: "WAV ファイル", + name: "WAV ファイル", extensions: ["wav"], + defaultPath: defaultAudioFileName, }); } @@ -1525,11 +1525,11 @@ export const audioStore = createPartialStore({ defaultFileName, ); } else { - filePath ??= await window.backend.showExportFileDialog({ + filePath ??= await window.backend.showSaveFileDialog({ title: "音声を全て繋げて保存", - defaultPath: defaultFileName, - extensionName: "WAV ファイル", + name: "WAV ファイル", extensions: ["wav"], + defaultPath: defaultFileName, }); } @@ -1670,11 +1670,11 @@ export const audioStore = createPartialStore({ defaultFileName, ); } else { - filePath ??= await window.backend.showExportFileDialog({ + filePath ??= await window.backend.showSaveFileDialog({ title: "文章を全て繋げてテキストファイルに保存", - defaultPath: defaultFileName, - extensionName: "テキストファイル", + name: "テキストファイル", extensions: ["txt"], + defaultPath: defaultFileName, }); } diff --git a/src/store/project.ts b/src/store/project.ts index 21a0f491f2..5b6887f504 100755 --- a/src/store/project.ts +++ b/src/store/project.ts @@ -266,8 +266,10 @@ export const projectStore = createPartialStore({ } // Write the current status to a project file. - const ret = await window.backend.showProjectSaveDialog({ + const ret = await window.backend.showSaveFileDialog({ title: "プロジェクトファイルの保存", + name: "VOICEVOX Project file", + extensions: ["vvproj"], defaultPath, }); if (ret == undefined) { diff --git a/src/store/singing.ts b/src/store/singing.ts index 5df2810978..37f4de7ae5 100644 --- a/src/store/singing.ts +++ b/src/store/singing.ts @@ -2756,11 +2756,11 @@ export const singingStore = createPartialStore({ if (state.savingSetting.fixedExportEnabled) { filePath = path.join(state.savingSetting.fixedExportDir, fileName); } else { - filePath ??= await window.backend.showExportFileDialog({ + filePath ??= await window.backend.showSaveFileDialog({ title: "音声を保存", - defaultPath: fileName, + name: "WAV ファイル", extensions: ["wav"], - extensionName: "WAV ファイル", + defaultPath: fileName, }); } if (!filePath) { @@ -3519,11 +3519,11 @@ export const singingStore = createPartialStore({ buffer = (await ufProjectToMultiFile(project, fileType))[0]; } - let filePath = await window.backend.showExportFileDialog({ + let filePath = await window.backend.showSaveFileDialog({ title: "プロジェクトを書き出し", - defaultPath: fileBaseName, - extensionName: fileTypeLabel, + name: fileTypeLabel, extensions: [extension], + defaultPath: fileBaseName, }); if (!filePath) { return { result: "CANCELED", path: "" }; diff --git a/src/type/ipc.ts b/src/type/ipc.ts index 114ab685aa..cc7fcf6bce 100644 --- a/src/type/ipc.ts +++ b/src/type/ipc.ts @@ -60,11 +60,6 @@ export type IpcIHData = { return?: string; }; - SHOW_PROJECT_SAVE_DIALOG: { - args: [obj: { title: string; defaultPath?: string }]; - return?: string; - }; - SHOW_WARNING_DIALOG: { args: [ obj: { @@ -85,12 +80,12 @@ export type IpcIHData = { return: MessageBoxReturnValue; }; - SHOW_EXPORT_FILE_DIALOG: { + SHOW_SAVE_FILE_DIALOG: { args: [ obj: { title: string; defaultPath?: string; - extensionName: string; + name: string; extensions: string[]; }, ]; diff --git a/src/type/preload.ts b/src/type/preload.ts index ecceb9eee8..d8a59842a4 100644 --- a/src/type/preload.ts +++ b/src/type/preload.ts @@ -76,10 +76,6 @@ export interface Sandbox { getInitialProjectFilePath(): Promise; showSaveDirectoryDialog(obj: { title: string }): Promise; showOpenDirectoryDialog(obj: { title: string }): Promise; - showProjectSaveDialog(obj: { - title: string; - defaultPath?: string; - }): Promise; showOpenFileDialog(obj: { title: string; name: string; @@ -87,11 +83,11 @@ export interface Sandbox { extensions: string[]; defaultPath?: string; }): Promise; - showExportFileDialog(obj: { + showSaveFileDialog(obj: { title: string; - defaultPath?: string; - extensionName: string; + name: string; extensions: string[]; + defaultPath?: string; }): Promise; writeFile(obj: { filePath: string;