From 0aafe44b4eb509369ebb172deb60eeee2bbc94f7 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Fri, 1 May 2026 22:54:20 +0900 Subject: [PATCH] feat: set exit event on SIGINT --- dzgui/controllers/mc.py | 12 ++++++++++-- dzgui/model/servers.py | 7 ++++++- dzgui/views/base.py | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index 5368b98..c18f083 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -1,7 +1,7 @@ -import inspect import logging +import threading -from typing import Any, Callable, TYPE_CHECKING +from typing import Any, TYPE_CHECKING import dzgui.util._json as JSON # noqa @@ -84,6 +84,8 @@ class Controller(GObject.GObject): self.loaded = False self.pending_jobs = 1 + self.exit_event = threading.Event() + def get_emitter(self) -> Emitter: return self.emitter @@ -442,3 +444,9 @@ class Controller(GObject.GObject): def get_modtreeview(self) -> "ModTreeView": return self.mediator.modtreeview + + def set_exit_event(self) -> None: + self.exit_event.set() + + def get_exit_event(self) -> None: + return self.exit_event diff --git a/dzgui/model/servers.py b/dzgui/model/servers.py index 2df1068..4c53043 100644 --- a/dzgui/model/servers.py +++ b/dzgui/model/servers.py @@ -91,6 +91,12 @@ class ServerModelManager: futures = [executor.submit(job, key, APPID_DAYZ, param) for param in params] for future in as_completed(futures): try: + + # NOTE: faciliate early aborting on boot via sigint + # this logic not available outside of initial boot + if self.controller.get_exit_event().is_set(): + return + self.thread_man.increment_dialog() res = future.result(timeout=API_TIMEOUT) if res.status != 200 or not res.parsed: @@ -101,7 +107,6 @@ class ServerModelManager: j = res.json servers += j["response"]["servers"] except Exception as e: - # TODO: could store exception in cleanup func logger.critical(e) self.thread_man.set_cleanup_func( StoredFunc(self._cleanup_on_failure) diff --git a/dzgui/views/base.py b/dzgui/views/base.py index bc722ec..d5ec8f7 100644 --- a/dzgui/views/base.py +++ b/dzgui/views/base.py @@ -94,7 +94,6 @@ class OuterWindow(Gtk.Window): self.halt_proc_and_quit() def halt_proc_and_quit(self) -> None: - # MainController.terminate_process() MainController.save_res_and_quit() @@ -319,6 +318,7 @@ class App(Gtk.Application): logger.critical(e) def _catch_sigint(self) -> Literal[True]: + MainController.set_exit_event() self.win.halt_proc_and_quit() return True