Fix last queue item not removing & don't autoselect init workflows

This commit is contained in:
space-nuko
2023-05-22 21:35:13 -05:00
parent a3259898e9
commit 16a22c746c
3 changed files with 36 additions and 22 deletions

View File

@@ -42,6 +42,12 @@ if (typeof window !== "undefined") {
nodes.ComfyReroute.setDefaultTextVisibility(!!localStorage["Comfy.ComfyReroute.DefaultVisibility"]); nodes.ComfyReroute.setDefaultTextVisibility(!!localStorage["Comfy.ComfyReroute.DefaultVisibility"]);
} }
export type OpenWorkflowOptions = {
setActive?: boolean,
refreshCombos?: boolean | Record<string, ComfyNodeDef>,
warnMissingNodeTypes?: boolean,
}
/* /*
* Queued prompt that hasn't been sent to the backend yet. * Queued prompt that hasn't been sent to the backend yet.
*/ */
@@ -208,8 +214,12 @@ export default class ComfyApp {
// We failed to restore a workflow so load the default // We failed to restore a workflow so load the default
if (!restored) { if (!restored) {
await this.initDefaultWorkflow("defaultWorkflow", defs); const options: OpenWorkflowOptions = {
await this.initDefaultWorkflow("upscale", defs); refreshCombos: defs,
setActive: false
}
await this.initDefaultWorkflow("defaultWorkflow", options);
await this.initDefaultWorkflow("upscale", options);
} }
// Save current workflow automatically // Save current workflow automatically
@@ -296,7 +306,7 @@ export default class ComfyApp {
const workflows = state.workflows as SerializedAppState[]; const workflows = state.workflows as SerializedAppState[];
await Promise.all(workflows.map(w => { await Promise.all(workflows.map(w => {
return this.openWorkflow(w, defs, false).catch(error => { return this.openWorkflow(w, { refreshCombos: defs, warnMissingNodeTypes: false, setActive: false }).catch(error => {
console.error("Failed restoring previous workflow", error) console.error("Failed restoring previous workflow", error)
notify(`Failed restoring previous workflow: ${error}`, { type: "error" }) notify(`Failed restoring previous workflow: ${error}`, { type: "error" })
}) })
@@ -586,9 +596,11 @@ export default class ComfyApp {
setColor(BuiltInSlotType.ACTION, "lightseagreen") setColor(BuiltInSlotType.ACTION, "lightseagreen")
} }
async openWorkflow(data: SerializedAppState, async openWorkflow(data: SerializedAppState, options: OpenWorkflowOptions = {
refreshCombos: boolean | Record<string, ComfyNodeDef> = true, setActive: true,
warnMissingNodeTypes: boolean = true refreshCombos: true,
warnMissingNodeTypes: true
}
): Promise<ComfyWorkflow> { ): Promise<ComfyWorkflow> {
if (data.version !== COMFYBOX_SERIAL_VERSION) { if (data.version !== COMFYBOX_SERIAL_VERSION) {
const mes = `Invalid ComfyBox saved data format: ${data.version} ` const mes = `Invalid ComfyBox saved data format: ${data.version} `
@@ -600,7 +612,7 @@ export default class ComfyApp {
let workflow: ComfyWorkflow; let workflow: ComfyWorkflow;
try { try {
workflow = workflowState.openWorkflow(this.lCanvas, data); workflow = workflowState.openWorkflow(this.lCanvas, data, options.setActive);
} }
catch (error) { catch (error) {
modalState.pushModal({ modalState.pushModal({
@@ -612,7 +624,7 @@ export default class ComfyApp {
return Promise.reject(error) return Promise.reject(error)
} }
if (workflow.missingNodeTypes.size > 0 && warnMissingNodeTypes) { if (workflow.missingNodeTypes.size > 0 && options.warnMissingNodeTypes) {
modalState.pushModal({ modalState.pushModal({
svelteComponent: MissingNodeTypesModal, svelteComponent: MissingNodeTypesModal,
svelteProps: { svelteProps: {
@@ -624,10 +636,10 @@ export default class ComfyApp {
// Restore canvas offset/zoom // Restore canvas offset/zoom
this.lCanvas.deserialize(data.canvas) this.lCanvas.deserialize(data.canvas)
if (refreshCombos) { if (options.refreshCombos) {
let defs = null; let defs = null;
if (typeof refreshCombos === "object") if (typeof options.refreshCombos === "object")
defs = refreshCombos; defs = options.refreshCombos;
await this.refreshComboInNodes(workflow, defs); await this.refreshComboInNodes(workflow, defs);
} }
@@ -705,7 +717,7 @@ export default class ComfyApp {
selectionState.clear(); selectionState.clear();
} }
async initDefaultWorkflow(name: string = "defaultWorkflow", defs?: Record<string, ComfyNodeDef>) { async initDefaultWorkflow(name: string = "defaultWorkflow", options?: OpenWorkflowOptions) {
let state = null; let state = null;
try { try {
const graphResponse = await fetch(`/workflows/${name}.json`); const graphResponse = await fetch(`/workflows/${name}.json`);
@@ -716,7 +728,7 @@ export default class ComfyApp {
notify(`Failed to load default graph ${name}: ${error} `, { type: "error" }) notify(`Failed to load default graph ${name}: ${error} `, { type: "error" })
state = structuredClone(blankGraph) state = structuredClone(blankGraph)
} }
await this.openWorkflow(state, defs) await this.openWorkflow(state, options)
} }
clear() { clear() {

View File

@@ -76,11 +76,11 @@
let _runningEntries: QueueUIEntry[] = [] let _runningEntries: QueueUIEntry[] = []
let _entries: QueueUIEntry[] = [] let _entries: QueueUIEntry[] = []
$: if (mode === "queue" && (changed || ($queuePending && $queuePending.length != _queuedEntries.length))) { $: if (mode === "queue" && (changed || $queuePending.length != _queuedEntries.length || $queueRunning.length != _runningEntries.length)) {
updateFromQueue(); updateFromQueue();
changed = false; changed = false;
} }
else if (mode === "history" && (changed || ($queueCompleted && $queueCompleted.length != _entries.length))) { else if (mode === "history" && (changed || $queueCompleted.length != _entries.length)) {
updateFromHistory(); updateFromHistory();
changed = false; changed = false;
} }

View File

@@ -245,8 +245,8 @@ type WorkflowStateOps = {
getWorkflowByNodeID: (id: NodeID) => ComfyWorkflow | null getWorkflowByNodeID: (id: NodeID) => ComfyWorkflow | null
getActiveWorkflow: () => ComfyWorkflow | null getActiveWorkflow: () => ComfyWorkflow | null
createNewWorkflow: (canvas: ComfyGraphCanvas, title?: string, setActive?: boolean) => ComfyWorkflow, createNewWorkflow: (canvas: ComfyGraphCanvas, title?: string, setActive?: boolean) => ComfyWorkflow,
openWorkflow: (canvas: ComfyGraphCanvas, data: SerializedAppState) => ComfyWorkflow, openWorkflow: (canvas: ComfyGraphCanvas, data: SerializedAppState, setActive?: boolean) => ComfyWorkflow,
addWorkflow: (canvas: ComfyGraphCanvas, data: ComfyWorkflow) => void, addWorkflow: (canvas: ComfyGraphCanvas, data: ComfyWorkflow, setActive?: boolean) => void,
closeWorkflow: (canvas: ComfyGraphCanvas, index: number) => void, closeWorkflow: (canvas: ComfyGraphCanvas, index: number) => void,
closeAllWorkflows: (canvas: ComfyGraphCanvas) => void, closeAllWorkflows: (canvas: ComfyGraphCanvas) => void,
setActiveWorkflow: (canvas: ComfyGraphCanvas, index: number | WorkflowInstID) => ComfyWorkflow | null, setActiveWorkflow: (canvas: ComfyGraphCanvas, index: number | WorkflowInstID) => ComfyWorkflow | null,
@@ -299,7 +299,7 @@ function createNewWorkflow(canvas: ComfyGraphCanvas, title: string = "New Workfl
state.openedWorkflows.push(workflow); state.openedWorkflows.push(workflow);
state.openedWorkflowsByID[workflow.id] = workflow; state.openedWorkflowsByID[workflow.id] = workflow;
if (setActive) if (setActive || state.activeWorkflowID == null)
setActiveWorkflow(canvas, state.openedWorkflows.length - 1) setActiveWorkflow(canvas, state.openedWorkflows.length - 1)
store.set(state) store.set(state)
@@ -307,20 +307,22 @@ function createNewWorkflow(canvas: ComfyGraphCanvas, title: string = "New Workfl
return workflow; return workflow;
} }
function openWorkflow(canvas: ComfyGraphCanvas, data: SerializedAppState): ComfyWorkflow { function openWorkflow(canvas: ComfyGraphCanvas, data: SerializedAppState, setActive: boolean = true): ComfyWorkflow {
const [workflow, layoutState] = ComfyWorkflow.create("Workflow") const [workflow, layoutState] = ComfyWorkflow.create("Workflow")
workflow.deserialize(layoutState, { graph: data.workflow, layout: data.layout, attrs: data.attrs }) workflow.deserialize(layoutState, { graph: data.workflow, layout: data.layout, attrs: data.attrs })
addWorkflow(canvas, workflow); addWorkflow(canvas, workflow, setActive);
return workflow; return workflow;
} }
function addWorkflow(canvas: ComfyGraphCanvas, workflow: ComfyWorkflow) { function addWorkflow(canvas: ComfyGraphCanvas, workflow: ComfyWorkflow, setActive: boolean = true) {
const state = get(store); const state = get(store);
state.openedWorkflows.push(workflow); state.openedWorkflows.push(workflow);
state.openedWorkflowsByID[workflow.id] = workflow; state.openedWorkflowsByID[workflow.id] = workflow;
setActiveWorkflow(canvas, state.openedWorkflows.length - 1)
if (setActive || state.activeWorkflowID == null)
setActiveWorkflow(canvas, state.openedWorkflows.length - 1)
store.set(state) store.set(state)