Skip to content

Commit e18100a

Browse files
psychedelicioushipsterusername
authored andcommitted
refactor(ui): move model install error event handling to own file
No logic change.
1 parent ad0aa0e commit e18100a

File tree

2 files changed

+46
-32
lines changed

2 files changed

+46
-32
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { logger } from 'app/logging/logger';
2+
import type { AppDispatch, RootState } from 'app/store/store';
3+
import { $isHFForbiddenToastOpen } from 'features/modelManagerV2/hooks/useHFForbiddenToast';
4+
import { $isHFLoginToastOpen } from 'features/modelManagerV2/hooks/useHFLoginToast';
5+
import { api } from 'services/api';
6+
import { modelsApi } from 'services/api/endpoints/models';
7+
import type { S } from 'services/api/types';
8+
9+
const log = logger('events');
10+
const selectModelInstalls = modelsApi.endpoints.listModelInstalls.select();
11+
12+
export const buildOnModelInstallError = (getState: () => RootState, dispatch: AppDispatch) => {
13+
return (data: S['ModelInstallErrorEvent']) => {
14+
log.error({ data }, 'Model install error');
15+
16+
const { id, error, error_type } = data;
17+
const installs = selectModelInstalls(getState()).data;
18+
19+
if (error === 'Unauthorized') {
20+
$isHFLoginToastOpen.set(true);
21+
}
22+
23+
if (error === 'Forbidden') {
24+
$isHFForbiddenToastOpen.set({ isEnabled: true, source: data.source });
25+
}
26+
27+
if (!installs?.find((install) => install.id === id)) {
28+
dispatch(api.util.invalidateTags([{ type: 'ModelInstalls' }]));
29+
} else {
30+
dispatch(
31+
modelsApi.util.updateQueryData('listModelInstalls', undefined, (draft) => {
32+
const modelImport = draft.find((m) => m.id === id);
33+
if (modelImport) {
34+
modelImport.status = 'error';
35+
modelImport.error_reason = error_type;
36+
modelImport.error = error;
37+
}
38+
return draft;
39+
})
40+
);
41+
}
42+
};
43+
};

invokeai/frontend/web/src/services/events/setEventListeners.tsx

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ import { $bulkDownloadId } from 'app/store/nanostores/bulkDownloadId';
66
import { $queueId } from 'app/store/nanostores/queueId';
77
import type { AppStore } from 'app/store/store';
88
import { deepClone } from 'common/util/deepClone';
9-
import { $isHFForbiddenToastOpen } from 'features/modelManagerV2/hooks/useHFForbiddenToast';
10-
import { $isHFLoginToastOpen } from 'features/modelManagerV2/hooks/useHFLoginToast';
119
import { $nodeExecutionStates, upsertExecutionState } from 'features/nodes/hooks/useExecutionState';
1210
import { zNodeStatus } from 'features/nodes/types/invocation';
1311
import ErrorToastDescription, { getTitleFromErrorType } from 'features/toast/ErrorToastDescription';
@@ -19,6 +17,7 @@ import { api, LIST_TAG } from 'services/api';
1917
import { modelsApi } from 'services/api/endpoints/models';
2018
import { queueApi, queueItemsAdapter } from 'services/api/endpoints/queue';
2119
import { buildOnInvocationComplete } from 'services/events/onInvocationComplete';
20+
import { buildOnModelInstallError } from 'services/events/onModelInstallError';
2221
import type { ClientToServerEvents, ServerToClientEvents } from 'services/events/types';
2322
import type { Socket } from 'socket.io-client';
2423
import type { JsonObject } from 'type-fest';
@@ -291,36 +290,8 @@ export const setEventListeners = ({ socket, store, setIsConnected }: SetEventLis
291290
dispatch(api.util.invalidateTags([{ type: 'ModelScanFolderResults', id: LIST_TAG }]));
292291
});
293292

294-
socket.on('model_install_error', (data) => {
295-
log.error({ data }, 'Model install error');
296-
297-
const { id, error, error_type } = data;
298-
const installs = selectModelInstalls(getState()).data;
299-
300-
if (error === 'Unauthorized') {
301-
$isHFLoginToastOpen.set(true);
302-
}
303-
304-
if (error === 'Forbidden') {
305-
$isHFForbiddenToastOpen.set({ isEnabled: true, source: data.source });
306-
}
307-
308-
if (!installs?.find((install) => install.id === id)) {
309-
dispatch(api.util.invalidateTags([{ type: 'ModelInstalls' }]));
310-
} else {
311-
dispatch(
312-
modelsApi.util.updateQueryData('listModelInstalls', undefined, (draft) => {
313-
const modelImport = draft.find((m) => m.id === id);
314-
if (modelImport) {
315-
modelImport.status = 'error';
316-
modelImport.error_reason = error_type;
317-
modelImport.error = error;
318-
}
319-
return draft;
320-
})
321-
);
322-
}
323-
});
293+
const onModelInstallError = buildOnModelInstallError(getState, dispatch);
294+
socket.on('model_install_error', onModelInstallError);
324295

325296
socket.on('model_install_cancelled', (data) => {
326297
log.warn({ data }, 'Model install cancelled');

0 commit comments

Comments
 (0)