Merge pull request #331 from aclist/fix/early-cancel

fix: check cancel event in loop prior to mod directory creation
This commit is contained in:
aclist 2026-06-05 22:42:55 +09:00 committed by GitHub
commit adf498fcb5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 16 additions and 16 deletions

View File

@ -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

View File

@ -278,8 +278,7 @@ 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.controller.is_cancel_pending():
# TODO: some facility to also close spawned steam process
return
if is_dayz_running():
@ -298,11 +297,7 @@ class ConnectionManager:
prefs = self.controller.get_prefs()
for title, mod, stamp, size in self.missing_mods:
# 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()
if self.controller.is_cancel_pending():
return
enqueue_mod(mod, self.appid)
time.sleep(3)
@ -316,12 +311,11 @@ class ConnectionManager:
# NOTE: Steam updates mod chunks in parallel, will finish at the same time
while mod_path.is_dir() is False:
if self.controller.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.controller.is_cancel_pending():
return
cur_size = get_mod_dir_size(mod_path)
if cur_size == size:

View File

@ -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