[Update] Plugins: Add error handlings when network is not connected and failed to fetch plugins info.

Also add pending ui(TMP) while fetching.
This commit is contained in:
Sakamoto Shiina
2025-04-25 18:51:16 +09:00
parent 81a422b07d
commit 249c686442
5 changed files with 23 additions and 3 deletions

View File

@@ -33,6 +33,7 @@ const PluginDownloadContainer = () => {
currentSavedPluginsStatus, currentSavedPluginsStatus,
toggleSavedPluginsStatus, toggleSavedPluginsStatus,
handlePendingPlugin, handlePendingPlugin,
currentFetchedPluginsInfo,
} = usePlugins(); } = usePlugins();
const { showNotification_Success, showNotification_Error } = useNotificationStatus(); const { showNotification_Success, showNotification_Error } = useNotificationStatus();
@@ -65,8 +66,14 @@ const PluginDownloadContainer = () => {
a.plugin_id.localeCompare(b.plugin_id) a.plugin_id.localeCompare(b.plugin_id)
); );
// Duplicate
const is_failed_to_fetch = currentFetchedPluginsInfo.state === "error";
const is_fetching = currentFetchedPluginsInfo.state === "pending";
return ( return (
<div className={styles.plugins_list_container}> <div className={styles.plugins_list_container}>
{is_failed_to_fetch && <p>Failed to fetch plugins data</p>}
{is_fetching && <p>Fetching plugins data...</p>}
{sorted_plugins_data.map((plugin) => ( {sorted_plugins_data.map((plugin) => (
<div key={plugin.plugin_id} className={styles.plugin_wrapper}> <div key={plugin.plugin_id} className={styles.plugin_wrapper}>
<p className={styles.title}> <p className={styles.title}>

View File

@@ -9,6 +9,7 @@ export const PluginCompatibilityList = () => {
const { const {
enabledPluginsList, enabledPluginsList,
asyncFetchPluginsInfo, asyncFetchPluginsInfo,
currentFetchedPluginsInfo,
} = usePlugins(); } = usePlugins();
useEffect(() => { useEffect(() => {
@@ -35,9 +36,15 @@ export const PluginCompatibilityList = () => {
if (!is_any_incompatible_plugin && !is_any_compatible_plugin) return null; // This is just for safety. if (!is_any_incompatible_plugin && !is_any_compatible_plugin) return null; // This is just for safety.
// Duplicate
const is_failed_to_fetch = currentFetchedPluginsInfo.state === "error";
const is_fetching = currentFetchedPluginsInfo.state === "pending";
return ( return (
<div className={styles.container}> <div className={styles.container}>
<p className={styles.title}>使用中プラグインの互換性チェック</p> <p className={styles.title}>使用中プラグインの互換性チェック</p>
{is_failed_to_fetch && <p>Failed to fetch plugins data</p>}
{is_fetching && <p>Fetching plugins data...</p>}
<div className={styles.plugins_compatibility_container}> <div className={styles.plugins_compatibility_container}>
{incompatible_plugins_list.map(plugin => { {incompatible_plugins_list.map(plugin => {
const target_data = plugin.downloaded_plugin_info; const target_data = plugin.downloaded_plugin_info;

View File

@@ -40,7 +40,7 @@ export const usePlugins = () => {
const { showNotification_Success, showNotification_Error } = useNotificationStatus(); const { showNotification_Success, showNotification_Error } = useNotificationStatus();
const { asyncStdoutToPython } = useStdoutToPython(); const { asyncStdoutToPython } = useStdoutToPython();
const { currentFetchedPluginsInfo, updateFetchedPluginsInfo, pendingFetchedPluginsInfo } = useStore_FetchedPluginsInfo(); const { currentFetchedPluginsInfo, updateFetchedPluginsInfo, pendingFetchedPluginsInfo, errorFetchedPluginsInfo } = useStore_FetchedPluginsInfo();
const { currentLoadedPlugins, updateLoadedPlugins, pendingLoadedPlugins } = useStore_LoadedPlugins(); const { currentLoadedPlugins, updateLoadedPlugins, pendingLoadedPlugins } = useStore_LoadedPlugins();
const { currentSavedPluginsStatus, updateSavedPluginsStatus, pendingSavedPluginsStatus } = useStore_SavedPluginsStatus(); const { currentSavedPluginsStatus, updateSavedPluginsStatus, pendingSavedPluginsStatus } = useStore_SavedPluginsStatus();
@@ -252,6 +252,7 @@ export const usePlugins = () => {
updateFetchedPluginsInfo(updated_list); updateFetchedPluginsInfo(updated_list);
} catch (error) { } catch (error) {
console.error("Error fetching plugin info list: ", error); console.error("Error fetching plugin info list: ", error);
errorFetchedPluginsInfo();
} }
store.is_initialized_fetched_plugin_info = true; store.is_initialized_fetched_plugin_info = true;

View File

@@ -206,7 +206,12 @@ export const useReceiveRoutes = () => {
"/set/data/main_window_geometry": () => {}, "/set/data/main_window_geometry": () => {},
"/run/open_filepath_logs": () => console.log("Opened Directory, Message Logs"), "/run/open_filepath_logs": () => console.log("Opened Directory, Message Logs"),
"/run/open_filepath_config_file": () => console.log("Opened Directory, Config File"), "/run/open_filepath_config_file": () => console.log("Opened Directory, Config File"),
"/run/software_update_info": updateLatestSoftwareVersionInfo, "/run/software_update_info": (payload) => {
updateLatestSoftwareVersionInfo(prev => ({
is_update_available: payload.is_update_available,
new_version: payload.new_version || prev.data.new_version,
}));
},
"/run/connected_network": handleNetworkConnection, "/run/connected_network": handleNetworkConnection,
// Main Page // Main Page

View File

@@ -119,7 +119,7 @@ export const { atomInstance: Atom_MainFunctionsStateMemory, useHook: useStore_Ma
export const { atomInstance: Atom_OpenedQuickSetting, useHook: useStore_OpenedQuickSetting } = createAtomWithHook("", "OpenedQuickSetting"); export const { atomInstance: Atom_OpenedQuickSetting, useHook: useStore_OpenedQuickSetting } = createAtomWithHook("", "OpenedQuickSetting");
export const { atomInstance: Atom_LatestSoftwareVersionInfo, useHook: useStore_LatestSoftwareVersionInfo } = createAtomWithHook({ export const { atomInstance: Atom_LatestSoftwareVersionInfo, useHook: useStore_LatestSoftwareVersionInfo } = createAtomWithHook({
is_update_available: false, is_update_available: false,
new_version: "", new_version: "0.0.0",
}, "LatestSoftwareVersionInfo"); }, "LatestSoftwareVersionInfo");
export const { atomInstance: Atom_InitProgress, useHook: useStore_InitProgress } = createAtomWithHook(0, "InitProgress"); export const { atomInstance: Atom_InitProgress, useHook: useStore_InitProgress } = createAtomWithHook(0, "InitProgress");
export const { atomInstance: Atom_IsBreakPoint, useHook: useStore_IsBreakPoint } = createAtomWithHook(false, "IsBreakPoint"); export const { atomInstance: Atom_IsBreakPoint, useHook: useStore_IsBreakPoint } = createAtomWithHook(false, "IsBreakPoint");