From b615869278fcede95272d1ea4e8d1d132ce2ba3c Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 4 Jun 2026 19:45:13 +0900 Subject: [PATCH 1/2] fix: check cancel event in loop prior to mod directory creation --- dzgui/managers/connection.py | 37 +++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/dzgui/managers/connection.py b/dzgui/managers/connection.py index a8f5cb2..4599452 100644 --- a/dzgui/managers/connection.py +++ b/dzgui/managers/connection.py @@ -278,10 +278,11 @@ class ConnectionManager: self.thread_man.show_cancel(False) self.thread_man.update_dialog(waiting_for_launch) while True: - # TODO: check cancel event - if self.controller.get_exit_event().is_set(): + if self.is_cancel_pending(): # TODO: some facility to also close spawned steam process return + # if self.controller.get_exit_event().is_set(): + # return if is_dayz_running(): break time.sleep(1) @@ -293,17 +294,27 @@ class ConnectionManager: self.controller.add_to_history(self.history, self.record) self.controller.open_page(NotebookPage.SERVERS) + def is_cancel_pending(self) -> bool: + if self.controller.get_exit_event().is_set(): + return True + if self.controller.get_cancel_event().is_set(): + self.controller.clear_cancel_event() + return True + return False + def _update_mods(self, raise_window: bool, menu_only: bool = False) -> None: # NOTE: fast enqueue all mods in auto mode prefs = self.controller.get_prefs() for title, mod, stamp, size in self.missing_mods: + if self.is_cancel_pending(): + return # TODO: check cancel and exit events - if self.controller.get_exit_event().is_set(): - return - if self.controller.get_cancel_event().is_set(): - self.controller.clear_cancel_event() - return + # if self.controller.get_exit_event().is_set(): + # return + # if self.controller.get_cancel_event().is_set(): + # self.controller.clear_cancel_event() + # return enqueue_mod(mod, self.appid) time.sleep(3) @@ -316,13 +327,17 @@ class ConnectionManager: # NOTE: Steam updates mod chunks in parallel, will finish at the same time while mod_path.is_dir() is False: + if self.is_cancel_pending(): + return time.sleep(1) while True: - if self.controller.get_exit_event().is_set(): - return - if self.controller.get_cancel_event().is_set(): - self.controller.clear_cancel_event() + if self.is_cancel_pending(): return + # if self.controller.get_exit_event().is_set(): + # return + # if self.controller.get_cancel_event().is_set(): + # self.controller.clear_cancel_event() + # return cur_size = get_mod_dir_size(mod_path) if cur_size == size: break From 9fa2840d1b6727bcbfed3b81c89e2f3e019e5ff0 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Fri, 5 Jun 2026 22:39:13 +0900 Subject: [PATCH 2/2] chore: abstract cancel check function to controller --- dzgui/controllers/mc.py | 10 ++++++++++ dzgui/managers/connection.py | 29 ++++------------------------- dzgui/model/servers.py | 6 +----- 3 files changed, 15 insertions(+), 30 deletions(-) diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index 53a8b14..2aaf407 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -525,3 +525,13 @@ class Controller(GObject.GObject): def present_window(self) -> None: self.mediator.window.present_with_time(Gdk.CURRENT_TIME) + + def is_cancel_pending(self) -> bool: + if self.get_exit_event().is_set(): + return True + if self.get_cancel_event().is_set(): + self.clear_cancel_event() + return True + return False + + diff --git a/dzgui/managers/connection.py b/dzgui/managers/connection.py index 4599452..9fefb74 100644 --- a/dzgui/managers/connection.py +++ b/dzgui/managers/connection.py @@ -278,11 +278,9 @@ class ConnectionManager: self.thread_man.show_cancel(False) self.thread_man.update_dialog(waiting_for_launch) while True: - if self.is_cancel_pending(): + if self.controller.is_cancel_pending(): # TODO: some facility to also close spawned steam process return - # if self.controller.get_exit_event().is_set(): - # return if is_dayz_running(): break time.sleep(1) @@ -294,27 +292,13 @@ class ConnectionManager: self.controller.add_to_history(self.history, self.record) self.controller.open_page(NotebookPage.SERVERS) - def is_cancel_pending(self) -> bool: - if self.controller.get_exit_event().is_set(): - return True - if self.controller.get_cancel_event().is_set(): - self.controller.clear_cancel_event() - return True - return False - def _update_mods(self, raise_window: bool, menu_only: bool = False) -> None: # NOTE: fast enqueue all mods in auto mode prefs = self.controller.get_prefs() for title, mod, stamp, size in self.missing_mods: - if self.is_cancel_pending(): + if self.controller.is_cancel_pending(): return - # TODO: check cancel and exit events - # if self.controller.get_exit_event().is_set(): - # return - # if self.controller.get_cancel_event().is_set(): - # self.controller.clear_cancel_event() - # return enqueue_mod(mod, self.appid) time.sleep(3) @@ -327,17 +311,12 @@ class ConnectionManager: # NOTE: Steam updates mod chunks in parallel, will finish at the same time while mod_path.is_dir() is False: - if self.is_cancel_pending(): + if self.controller.is_cancel_pending(): return time.sleep(1) while True: - if self.is_cancel_pending(): + if self.controller.is_cancel_pending(): return - # if self.controller.get_exit_event().is_set(): - # return - # if self.controller.get_cancel_event().is_set(): - # self.controller.clear_cancel_event() - # return cur_size = get_mod_dir_size(mod_path) if cur_size == size: break diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index a336409..1a61bba 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -138,13 +138,9 @@ class ServerModelManager: futures = [executor.submit(Servers.test_ip, i, port, event) for i in ports] for future in as_completed(futures): try: - if self.controller.get_exit_event().is_set(): + if self.controller.is_cancel_pending(): event.set() return - if self.controller.get_cancel_event().is_set(): - event.set() - self.controller.clear_cancel_event() - return res = future.result(timeout=LAN_TIMEOUT) if res is None: continue