feat(ui): add warning socket event handling

This commit is contained in:
psychedelicious 2023-06-13 20:51:35 +10:00
parent abee37eab3
commit 09f396ce84
8 changed files with 80 additions and 0 deletions

View File

@ -551,6 +551,7 @@
},
"toast": {
"serverError": "Server Error",
"serverWarning": "Server Warning",
"disconnected": "Disconnected from Server",
"connected": "Connected to Server",
"canceled": "Processing Canceled",

View File

@ -73,6 +73,7 @@ import { addImageCategoriesChangedListener } from './listeners/imageCategoriesCh
import { addControlNetImageProcessedListener } from './listeners/controlNetImageProcessed';
import { addControlNetAutoProcessListener } from './listeners/controlNetAutoProcess';
import { addUpdateImageUrlsOnConnectListener } from './listeners/updateImageUrlsOnConnect';
import { addInvocationWarningEventListener } from './listeners/socketio/socketInvocationWarning';
export const listenerMiddleware = createListenerMiddleware();
@ -149,6 +150,7 @@ addGeneratorProgressListener();
addGraphExecutionStateCompleteListener();
addInvocationCompleteListener();
addInvocationErrorListener();
addInvocationWarningEventListener();
addInvocationStartedListener();
addSocketConnectedListener();
addSocketDisconnectedListener();

View File

@ -0,0 +1,21 @@
import { startAppListening } from '../..';
import { log } from 'app/logging/useLogger';
import {
appSocketInvocationWarning,
socketInvocationWarning,
} from 'services/events/actions';
const moduleLog = log.child({ namespace: 'socketio' });
export const addInvocationWarningEventListener = () => {
startAppListening({
actionCreator: socketInvocationWarning,
effect: (action, { dispatch, getState }) => {
moduleLog.warn(
action.payload,
`Invocation warning (${action.payload.data.node.type})`
);
dispatch(appSocketInvocationWarning(action.payload));
},
});
};

View File

@ -23,6 +23,7 @@ import {
appSocketInvocationComplete,
appSocketInvocationError,
appSocketInvocationStarted,
appSocketInvocationWarning,
appSocketSubscribed,
appSocketUnsubscribed,
} from 'services/events/actions';
@ -334,6 +335,20 @@ export const systemSlice = createSlice({
);
});
/**
* Invocation Warning
*/
builder.addCase(appSocketInvocationWarning, (state, action) => {
const { data } = action.payload;
state.toastQueue.push(
makeToast({
title: t('toast.serverWarning'),
description: data.warning,
status: 'warning',
})
);
});
/**
* Graph Execution State Complete
*/

View File

@ -6,6 +6,7 @@ export const tabMap = [
'nodes',
// 'postprocessing',
// 'training',
'prompt',
] as const;
export type InvokeTabName = (typeof tabMap)[number];

View File

@ -5,6 +5,7 @@ import {
InvocationCompleteEvent,
InvocationErrorEvent,
InvocationStartedEvent,
InvocationWarningEvent,
} from 'services/events/types';
// Common socket action payload data
@ -131,6 +132,24 @@ export const appSocketInvocationError = createAction<
BaseSocketPayload & { data: InvocationErrorEvent }
>('socket/appSocketInvocationError');
/**
* Socket.IO Invocation Warning
*
* Do not use. Only for use in middleware.
*/
export const socketInvocationWarning = createAction<
BaseSocketPayload & { data: InvocationWarningEvent }
>('socket/socketInvocationWarning');
/**
* Socket.IO Invocation Warning
*
* Do not use. Only for use in middleware.
*/
export const appSocketInvocationWarning = createAction<
BaseSocketPayload & { data: InvocationWarningEvent }
>('socket/appSocketInvocationWarning');
/**
* Socket.IO Graph Execution State Complete
*

View File

@ -63,6 +63,18 @@ export type InvocationErrorEvent = {
error: string;
};
/**
* A `invocation_warning` socket.io event.
*
* @example socket.on('invocation_warning', (data: InvocationWarningEvent) => { ... }
*/
export type InvocationWarningEvent = {
graph_execution_state_id: string;
node: BaseNode;
source_node_id: string;
warning: string;
};
/**
* A `invocation_started` socket.io event.
*
@ -95,6 +107,7 @@ export type ServerToClientEvents = {
generator_progress: (payload: GeneratorProgressEvent) => void;
invocation_complete: (payload: InvocationCompleteEvent) => void;
invocation_error: (payload: InvocationErrorEvent) => void;
invocation_warning: (payload: InvocationWarningEvent) => void;
invocation_started: (payload: InvocationStartedEvent) => void;
graph_execution_state_complete: (
payload: GraphExecutionStateCompleteEvent

View File

@ -11,6 +11,7 @@ import {
socketConnected,
socketDisconnected,
socketSubscribed,
socketInvocationWarning,
} from '../actions';
import { ClientToServerEvents, ServerToClientEvents } from '../types';
import { Logger } from 'roarr';
@ -94,6 +95,13 @@ export const setEventListeners = (arg: SetEventListenersArg) => {
dispatch(socketInvocationError({ data, timestamp: getTimestamp() }));
});
/**
* Invocation warning
*/
socket.on('invocation_warning', (data) => {
dispatch(socketInvocationWarning({ data, timestamp: getTimestamp() }));
});
/**
* Invocation complete
*/