Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

showWriteErrorDialogのエラーメッセージを詳しくしたい #2102

Closed
Hiroshiba opened this issue May 26, 2024 · 1 comment · Fixed by #2131
Closed

showWriteErrorDialogのエラーメッセージを詳しくしたい #2102

Hiroshiba opened this issue May 26, 2024 · 1 comment · Fixed by #2131
Labels
初心者歓迎タスク 初心者にも優しい簡単めなタスク 機能向上

Comments

@Hiroshiba
Copy link
Member

内容

「音声をつなげて書き出し」など、複数の音声ファイルを合成して書き出したりする系の操作は、エラーが起きたときに内部でshowWriteErrorDialog関数を呼び出しています。

const showWriteErrorDialog = ({
mediaType,
result,
dispatch,
}: {
mediaType: MediaType;
result: SaveResultObject;
dispatch: Dispatch<AllActions>;
}) => {
if (mediaType === "text") {
// テキスト書き出し時のエラーを出力
dispatch("SHOW_ALERT_DIALOG", {
title: "テキストの書き出しに失敗しました。",
message:
"書き込みエラーによって失敗しました。空き容量があることや、書き込み権限があることをご確認ください。",
});
} else {
const defaultErrorMessages: Partial<Record<SaveResult, string>> = {
WRITE_ERROR:
"何らかの理由で書き出しに失敗しました。ログを参照してください。",
ENGINE_ERROR:
"エンジンのエラーによって失敗しました。エンジンの再起動をお試しください。",
UNKNOWN_ERROR:
"何らかの理由で書き出しに失敗しました。ログを参照してください。",
};
// 音声書き出し時のエラーを出力
dispatch("SHOW_ALERT_DIALOG", {
title: "書き出しに失敗しました。",
message: result.errorMessage ?? defaultErrorMessages[result.result] ?? "",
});
}
};

ただエラーメッセージがよくわからず、結構な割合で「どうすればよいのか」というお問い合わせに繋がっています。
たしかに「何らかの理由で書き出しに失敗しました。ログを参照してください。」だと何もわからないと思います。
https://x.com/kouki84695295/status/1792845460694343856
大体は保存先を変えていただくと直ることから、権限エラーが頻発しているのだと思います。

ファイルを保存するときにはエラーコードが返されるので、そのコードを見ればより詳細な案内が可能です。
実際別のファイル書き出し経路の場合はgenerateWriteErrorMessageを通して詳細なエラーメッセージを発行しています。

voicevox/src/store/audio.ts

Lines 169 to 187 in bba1060

function generateWriteErrorMessage(writeFileResult: ResultError) {
if (!writeFileResult.code) {
return `何らかの理由で失敗しました。${writeFileResult.message}`;
}
const code = writeFileResult.code.toUpperCase();
if (code.startsWith("ENOSPC")) {
return "空き容量が足りません。";
}
if (code.startsWith("EACCES")) {
return "ファイルにアクセスする許可がありません。";
}
if (code.startsWith("EBUSY")) {
return "ファイルが開かれています。";
}
}

showWriteErrorDialogでも同じように詳細なエラーメッセージを表示したいです。

Pros 良くなる点

ユーザーが自己解決できやすくなり、使い勝手が上がる

Cons 悪くなる点

関数までエラー情報が届かないようになっているので、届くようにしないといけない。

実現方法

↑の悪くなる点にも書きましたが、詳細なエラーメッセージを作るためにはResultErrorあるいはエラーコードが必要です。
showWriteErrorDialogResultErrorやエラーコードが渡ってくるように書き換える必要があります。

その他

こんな感じで実装できるかも、というの思いついたらコメントでご相談ください!
自信があればいきなり実装でも大丈夫です。

@Hiroshiba
Copy link
Member Author

こちら進めてみようと思います!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
初心者歓迎タスク 初心者にも優しい簡単めなタスク 機能向上
Projects
None yet
1 participant