From 4229377532e05f8db5107670ebb06e61b8db8e44 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 8 Jul 2025 10:40:09 +1000 Subject: [PATCH] fix(app): ensure cancel events are emitted for current item when bulk canceling There was a bug where bulk cancel operations would cancel the current queue item in the DB but not emit the status changed events correctly. --- .../services/session_queue/session_queue_sqlite.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/invokeai/app/services/session_queue/session_queue_sqlite.py b/invokeai/app/services/session_queue/session_queue_sqlite.py index 195e4dbda8..886f2ea205 100644 --- a/invokeai/app/services/session_queue/session_queue_sqlite.py +++ b/invokeai/app/services/session_queue/session_queue_sqlite.py @@ -404,6 +404,8 @@ class SqliteSessionQueue(SessionQueueBase): AND status != 'canceled' AND status != 'completed' AND status != 'failed' + -- We will cancel the current item separately below - skip it here + AND status != 'in_progress' """ params = [queue_id] + batch_ids cursor.execute( @@ -442,6 +444,8 @@ class SqliteSessionQueue(SessionQueueBase): AND status != 'canceled' AND status != 'completed' AND status != 'failed' + -- We will cancel the current item separately below - skip it here + AND status != 'in_progress' """ params = (queue_id, destination) cursor.execute( @@ -544,6 +548,8 @@ class SqliteSessionQueue(SessionQueueBase): AND status != 'canceled' AND status != 'completed' AND status != 'failed' + -- We will cancel the current item separately below - skip it here + AND status != 'in_progress' """ params = [queue_id] cursor.execute( @@ -564,12 +570,9 @@ class SqliteSessionQueue(SessionQueueBase): tuple(params), ) self._conn.commit() + if current_queue_item is not None and current_queue_item.queue_id == queue_id: - batch_status = self.get_batch_status(queue_id=queue_id, batch_id=current_queue_item.batch_id) - queue_status = self.get_queue_status(queue_id=queue_id) - self.__invoker.services.events.emit_queue_item_status_changed( - current_queue_item, batch_status, queue_status - ) + self._set_queue_item_status(current_queue_item.item_id, "canceled") except Exception: self._conn.rollback() raise