[bugfix] Plugins: Add error handling. when error occurred while rendering a plugin, set status disabled and an error.

This commit is contained in:
Sakamoto Shiina
2025-06-23 11:24:18 +09:00
parent db61f33578
commit b15a26c3d5
7 changed files with 78 additions and 30 deletions

View File

@@ -282,44 +282,57 @@ export const usePlugins = () => {
});
};
const toggleSavedPluginsStatus = (target_plugin_id) => {
const successPluginNotification = (message) => showNotification_Success(message, {
hide_duration: 1000,
category_id: "to_enable_plugin"
});
const is_exists = currentSavedPluginsStatus.data.some(
const setSavedPluginEnabled = (target_plugin_id, is_enabled) => {
const notify = () => {
const msg_key = is_enabled
? "plugin_notifications.is_enabled"
: "plugin_notifications.is_disabled";
showNotification_Success(t(msg_key), {
hide_duration: 1000,
category_id: "switch_enable_plugin",
});
}
const exists = currentSavedPluginsStatus.data.some(
(d) => d.plugin_id === target_plugin_id
);
let new_value = [];
if (is_exists) {
if (exists) {
new_value = currentSavedPluginsStatus.data.map((d) => {
if (d.plugin_id === target_plugin_id) {
d.is_enabled = !d.is_enabled;
(d.is_enabled)
? successPluginNotification(t("plugin_notifications.is_enabled"))
: successPluginNotification(t("plugin_notifications.is_disabled"));
d.is_enabled = is_enabled;
notify();
}
return d;
});
} else {
new_value.push(...currentSavedPluginsStatus.data);
new_value.push({
plugin_id: target_plugin_id,
is_enabled: true,
});
successPluginNotification(t("plugin_notifications.is_enabled"))
// 存在しない場合は追加
new_value = [
...currentSavedPluginsStatus.data,
{ plugin_id: target_plugin_id, is_enabled: is_enabled }
];
notify();
}
// 「currentPluginsData.data」でis_downloadedがtrueのものだけ残す
// ダウンロード済みプラグインのみ残す
new_value = new_value.filter((item) =>
currentPluginsData.data.some(
(plugin) => plugin.plugin_id === item.plugin_id && plugin.is_downloaded
(p) => p.plugin_id === item.plugin_id && p.is_downloaded
)
);
setSavedPluginsStatus(new_value);
};
const toggleSavedPluginsStatus = (plugin_id) => {
// 現在の状態を探す(未登録なら false とみなす)
const current = currentSavedPluginsStatus.data.find(
(d) => d.plugin_id === plugin_id
)?.is_enabled ?? false;
setSavedPluginEnabled(plugin_id, !current);
};
// Init時の処理 非対応のものを無効化する際に、savedDPluginsStatusから不要なものを削除する処理が邪魔になるので該当コードを削除したバージョン。Init以外で使用する時にはリファクタが必要になる。
const setTargetSavedPluginsStatus_Init = (target_plugin_id, is_enabled) => {
@@ -380,6 +393,15 @@ export const usePlugins = () => {
showNotification_SaveSuccess();
};
const setErrorPlugin = (plugin_id, error_message_type) => {
const error_message = t("plugin_notifications.disabled_due_to_an_error");
setSavedPluginEnabled(plugin_id, false);
updateTargetPluginData(plugin_id, "is_error", true);
updateTargetPluginData(plugin_id, "error_message_type", error_message_type);
showNotification_Error(error_message);
};
return {
asyncFetchPluginsInfo,
@@ -406,11 +428,15 @@ export const usePlugins = () => {
currentLoadedPlugins,
updateLoadedPlugins,
setSavedPluginEnabled,
toggleSavedPluginsStatus,
setTargetSavedPluginsStatus_Init,
setSavedPluginsStatus,
handlePendingPlugin,
setErrorPlugin,
};
};