From 58a7878f60d85fd1540a942d8ca748de7d51a058 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 20 Jun 2026 18:26:34 +0900 Subject: [PATCH 01/15] fix: append mission param dynamically (#372) --- dzgui/api/steam.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dzgui/api/steam.py b/dzgui/api/steam.py index 397080c..cc9e99d 100644 --- a/dzgui/api/steam.py +++ b/dzgui/api/steam.py @@ -170,8 +170,10 @@ def launch_offline( "-skipintro", f"-name={name}", f"-mod={symlinks}", - f"-mission={mission}", ] + if len(mission) > 0: + arg = f"-mission={mission}" + params.append(arg) proc = subprocess.run([*client_args, *params]) return proc.returncode From 075a2e5a744f08f2f450a0ac2afe954aa8842eb2 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 20 Jun 2026 18:26:49 +0900 Subject: [PATCH 02/15] chore: update rate limit consts --- dzgui/const/constants.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dzgui/const/constants.py b/dzgui/const/constants.py index cee5a63..58af7f2 100644 --- a/dzgui/const/constants.py +++ b/dzgui/const/constants.py @@ -4,7 +4,8 @@ UDP_PORT = 27016 VM_FILE = "/proc/sys/vm/max_map_count" MIN_COUNT = 1048576 -RATE_LIMIT_THRESHOLD = 3 +API_RATE_LIMIT = 1 +CLIENT_RATE_LIMIT = 3 REQUEST_TIMEOUT = 10 APPNAME_DAYZ = "DayZ" From 9225f3bc06a660b07aab4ee19049de7b3ca0cc97 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 20 Jun 2026 18:27:46 +0900 Subject: [PATCH 03/15] chore: update strings --- dzgui/strings/dialogs.py | 3 ++- dzgui/strings/preconnect.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/dzgui/strings/dialogs.py b/dzgui/strings/dialogs.py index 57c27a6..460250d 100644 --- a/dzgui/strings/dialogs.py +++ b/dzgui/strings/dialogs.py @@ -1,5 +1,6 @@ waiting_for_launch = "Waiting for DayZ to launch" -waiting_for_mods = "Waiting for Steam to update mods" +waiting_for_mods = "Queueing up mods (step 1/2)" +waiting_for_directories = "Steam is staging mods (step 2/2)" fetching_update = "Fetching update" failed_to_update = "Failed to update DZGUI executable" diff --git a/dzgui/strings/preconnect.py b/dzgui/strings/preconnect.py index 7b18939..07e5e57 100644 --- a/dzgui/strings/preconnect.py +++ b/dzgui/strings/preconnect.py @@ -10,6 +10,7 @@ warnings = "Warnings" errors = "Errors" mods = "Mods" total_mods = "Total mods: " +up_to_date = "All mods are up to date." all_updated = "All mods updated." "If you recently installed {build} or moved it to a different drive, " "restart Steam to allow these changes to synchronize, then try again." From ed20a7cc84e75a40c76a82a2529c308986b2308e Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 20 Jun 2026 18:28:59 +0900 Subject: [PATCH 04/15] fix: update table checkmarks when mods are synched (#370) --- dzgui/controllers/emitter.py | 4 ++++ dzgui/views/pages/preconnect.py | 10 ++++++++-- dzgui/views/trees/tree_server_mods.py | 5 +++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/dzgui/controllers/emitter.py b/dzgui/controllers/emitter.py index c90aef7..46c5700 100644 --- a/dzgui/controllers/emitter.py +++ b/dzgui/controllers/emitter.py @@ -172,3 +172,7 @@ class Emitter(GObject.GObject): @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=()) def invalid_custom_mods(self) -> None: pass + + @GObject.Signal(flags=GObject.SignalFlags.RUN_LAST, arg_types=()) + def all_mods_synched(self) -> None: + pass diff --git a/dzgui/views/pages/preconnect.py b/dzgui/views/pages/preconnect.py index 02ec5fc..d913e1e 100644 --- a/dzgui/views/pages/preconnect.py +++ b/dzgui/views/pages/preconnect.py @@ -23,6 +23,7 @@ from gi.repository import Gdk, Gtk # noqa E402 if TYPE_CHECKING: from dzgui.managers.connection import Prerequisites from dzgui.controllers.mc import Controller + from dzgui.controllers.emitter import Emitter @dataclass @@ -191,9 +192,14 @@ class PreConnectionAssistant(Gtk.Box): self.add(self.scrolled_box) self.add(self.button_box) + emitter = self.controller.get_emitter() + emitter.connect("all_mods_synched", self._on_mods_synched) self.connect("key-press-event", self._on_keypress) self.connect("map", self._on_map) + def _on_mods_synched(self, emitter: "Emitter") -> None: + self.tree.mark_mods_synched() + def _on_map(self, widget: Self) -> None: widgets = ( self.tree_frame, @@ -297,10 +303,10 @@ class PreConnectionAssistant(Gtk.Box): self._hide_mod_area() else: self._show_mod_area() - msg = "All mods are up to date." + msg = preconnect.up_to_date self.mod_count.set_text(msg) - if prereqs.required_space == 0: + if prereqs.required_space != 0: self.ok.set_label(preconnect.connect) pretty = number(prereqs.required_space) diff --git a/dzgui/views/trees/tree_server_mods.py b/dzgui/views/trees/tree_server_mods.py index 0659c31..4991846 100644 --- a/dzgui/views/trees/tree_server_mods.py +++ b/dzgui/views/trees/tree_server_mods.py @@ -13,6 +13,7 @@ from gi.repository import Gtk, GLib, Gdk, Pango # noqa if TYPE_CHECKING: from dzgui.controllers.mc import Controller + from dzgui.controllers.emitter import Emitter class ServerModTreeView(ContextMixin, TreeView): # type: ignore @@ -48,6 +49,10 @@ class ServerModTreeView(ContextMixin, TreeView): # type: ignore case _: pass + def mark_mods_synched(self) -> None: + for row in self.mod_store: + row[2] = server_mods.checkmark + # TODO: could be problematic if user downloads mods out of band def _on_row_activated( self, From 3ae0c8428a0b08c77208555be1adddb329db3f3f Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 20 Jun 2026 18:29:39 +0900 Subject: [PATCH 05/15] change: ease rate limit --- dzgui/managers/connection.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/dzgui/managers/connection.py b/dzgui/managers/connection.py index 27c2806..0a0fc74 100644 --- a/dzgui/managers/connection.py +++ b/dzgui/managers/connection.py @@ -25,17 +25,17 @@ from dzgui.api.mods import ( update_signatures, ) from dzgui.const.constants import ( + API_RATE_LIMIT, APP_NAME, APPID_DAYZ, APPID_DAYZ_EXP, APPNAME_DAYZ, APPNAME_DAYZ_EXP_HUMAN, - RATE_LIMIT_THRESHOLD, ) from dzgui.const.enum import NotebookPage, Preferences from dzgui.init.proc import is_dayz_running, is_steam_running from dzgui.managers.threading import call_on_thread, StoredFunc, ThreadingManager -from dzgui.strings.dialogs import waiting_for_launch, waiting_for_mods +from dzgui.strings.dialogs import waiting_for_launch, waiting_for_mods, waiting_for_directories from dzgui.strings.server_mods import checkmark, resync from dzgui.util.format import format_mib from dzgui.util.strings import dialog, server_timeout @@ -276,7 +276,6 @@ class ConnectionManager: self.thread_man.set_cleanup_func(func) return - self.thread_man.show_cancel(False) self.thread_man.update_dialog(waiting_for_launch) while True: # FIXME: cancel should not be visible here per setting above @@ -303,8 +302,9 @@ class ConnectionManager: if self.controller.is_cancel_pending(): return subscribe(key, int(mod)) - time.sleep(RATE_LIMIT_THRESHOLD) + time.sleep(API_RATE_LIMIT) + self.thread_man.update_dialog(waiting_for_directories) for title, mod, stamp, size in self.missing_mods: mod_path = self.workshop / mod @@ -322,8 +322,12 @@ class ConnectionManager: time.sleep(1) update_signatures(self.missing_mods, prefs.paths.version) - # TODO: just push steam path directly rebuild_symlinks(prefs.paths.config) + + # NOTE: update table status in main loop + self.thread_man.update_emitter("all_mods_synched") + + # TODO: just push steam path directly self._connect_steam(menu_only) @call_on_thread(waiting_for_mods, show_cancel=True) From 780402d14fdeb9324adaf61a8a79075850e63fdf Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 20 Jun 2026 18:29:54 +0900 Subject: [PATCH 06/15] change: ease rate limit --- dzgui/managers/mods.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dzgui/managers/mods.py b/dzgui/managers/mods.py index af27090..4d0170c 100644 --- a/dzgui/managers/mods.py +++ b/dzgui/managers/mods.py @@ -12,10 +12,10 @@ from dzgui.api.mods import ( remove_stale_signatures, ) from dzgui.const.constants import ( + API_RATE_LIMIT, APP_NAME, APPID_DAYZ, APPID_DAYZ_EXP, - RATE_LIMIT_THRESHOLD, ) from dzgui.const.enum import Preferences from dzgui.managers.threading import call_on_thread, StoredFunc, ThreadingManager @@ -109,6 +109,7 @@ class ModManager: def unsub_all_mods(self, mods: list[tuple[str, Gtk.TreeIter]]) -> None: for mod, _iter in mods: self.unsub_atomic_mod(mod) + time.sleep(API_RATE_LIMIT) iters = [_iter for mod, _iter in mods] func = StoredFunc(self._on_mods_unsubbed, iters) @@ -136,7 +137,7 @@ class ModManager: symlink.unlink() except PeFile.AppNotInstalledError: pass - time.sleep(RATE_LIMIT_THRESHOLD) + time.sleep(API_RATE_LIMIT) def _on_mods_unsubbed(self, iters: list[Gtk.TreeIter]) -> None: if self.store is None: From 796f6b84356fff5437d8378b3bb50bd2c94f38fc Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 20 Jun 2026 18:30:08 +0900 Subject: [PATCH 07/15] feat: call emitter from ThreadingManager --- dzgui/managers/threading.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dzgui/managers/threading.py b/dzgui/managers/threading.py index adecb7a..c20f324 100644 --- a/dzgui/managers/threading.py +++ b/dzgui/managers/threading.py @@ -81,6 +81,11 @@ class ThreadingManager: def set_job_count(self, jobs: int) -> None: self.jobs = jobs + def update_emitter(self, signal: str) -> None: + if self.controller: + emitter = self.controller.get_emitter() + GLib.idle_add(lambda: emitter.emit(signal)) + def update_dialog(self, msg: str) -> None: GLib.idle_add(lambda: self.wait_dialog.update_text(msg)) From 5e3392ddeceadb318a6e8a92b9a092d6613478f5 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 20 Jun 2026 18:30:35 +0900 Subject: [PATCH 08/15] chore: drop unused import --- dzgui/views/trees/tree_server_mods.py | 1 - 1 file changed, 1 deletion(-) diff --git a/dzgui/views/trees/tree_server_mods.py b/dzgui/views/trees/tree_server_mods.py index 4991846..fe1169c 100644 --- a/dzgui/views/trees/tree_server_mods.py +++ b/dzgui/views/trees/tree_server_mods.py @@ -13,7 +13,6 @@ from gi.repository import Gtk, GLib, Gdk, Pango # noqa if TYPE_CHECKING: from dzgui.controllers.mc import Controller - from dzgui.controllers.emitter import Emitter class ServerModTreeView(ContextMixin, TreeView): # type: ignore From fa8792ba69ff5c11ec9fbd0f7670c48082e4f7ad Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 20 Jun 2026 19:45:27 +0900 Subject: [PATCH 09/15] chore: add logging when opening options page --- dzgui/controllers/mc.py | 7 +++++-- dzgui/views/pages/options.py | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index ae0bf6d..f2a93cd 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -23,7 +23,7 @@ from dzgui.managers.contextmenu import ContextMenuManager from dzgui.managers.notes import NoteManager from dzgui.model.servers import ServerModelManager from dzgui.util.diag import write_diagnostic -from dzgui.util.format import format_player_count +from dzgui.util.format import format_exception, format_player_count from dzgui.util.open_links import open_user_workshop, open_workshop_page from dzgui.views.dialogs.filepicker import FilePicker from dzgui.views.dialogs.generic import ExceptionDialog @@ -203,7 +203,10 @@ class Controller(GObject.GObject): try: # TODO: where to put config file check self.mediator.grid.notebook.settings.populate_settings() - except Exception: + except Exception as e: + msg = format_exception(e) + print(msg) + logger.critical(msg) return case ButtonType.MODS: self.load_mods() diff --git a/dzgui/views/pages/options.py b/dzgui/views/pages/options.py index 066a7cf..aea0417 100644 --- a/dzgui/views/pages/options.py +++ b/dzgui/views/pages/options.py @@ -392,7 +392,7 @@ class Options(Gtk.Box): if prefs.paths.config.is_file() is False: dialog = ExceptionDialog(self.controller, strings.config_not_found) dialog.run() - raise Exception + raise OSError(f"Config file '{prefs.paths.config}' not found") config = query.get_config(prefs.paths.config) From 5c85c746f113288d86c754998a4477c783a0f270 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 20 Jun 2026 23:28:48 +0900 Subject: [PATCH 10/15] fix: update button label conditionally --- dzgui/views/pages/preconnect.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dzgui/views/pages/preconnect.py b/dzgui/views/pages/preconnect.py index d913e1e..463228d 100644 --- a/dzgui/views/pages/preconnect.py +++ b/dzgui/views/pages/preconnect.py @@ -307,12 +307,12 @@ class PreConnectionAssistant(Gtk.Box): self.mod_count.set_text(msg) if prereqs.required_space != 0: - self.ok.set_label(preconnect.connect) - pretty = number(prereqs.required_space) suffix = f" Need to download {pretty} MiB of mod updates." prefix = preconnect.total_mods self.mod_count.set_text(f"{prefix}{str(total_mods)}.{suffix}") + else: + self.ok.set_label(preconnect.connect) if prereqs.is_last_server: self.connect_last.show() From 879d0650d4e80432dd6349b3ad672e299ec4e12e Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sun, 21 Jun 2026 22:17:38 +0900 Subject: [PATCH 11/15] fix: insert missing values prior to serialization --- dzgui/config/convert.py | 6 ++++++ tests/fixtures/dztuirc_1 | 45 ++++++++++++++++++++++++++++++++++++++++ tests/fixtures/dztuirc_2 | 45 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 tests/fixtures/dztuirc_1 create mode 100644 tests/fixtures/dztuirc_2 diff --git a/dzgui/config/convert.py b/dzgui/config/convert.py index 8061adb..26fabf2 100644 --- a/dzgui/config/convert.py +++ b/dzgui/config/convert.py @@ -3,6 +3,8 @@ import shlex from pathlib import Path from typing import Any +from dzgui.const.boilerplate import config_boilerplate + """ Convert legacy dztuirc to config.json @@ -89,4 +91,8 @@ def rc2json(file: Path) -> str: keys["ip_list"] = ips keys["use_miles"] = False keys["start_tab"] = 0 + # NOTE: workaround for DZGUI 6 logic (see #375) + for key in config_boilerplate.keys(): + if key not in keys: + keys[key] = config_boilerplate[key] return json.dumps(keys, indent=2) diff --git a/tests/fixtures/dztuirc_1 b/tests/fixtures/dztuirc_1 new file mode 100644 index 0000000..9ba40aa --- /dev/null +++ b/tests/fixtures/dztuirc_1 @@ -0,0 +1,45 @@ +#Path to DayZ installation +steam_path="/tmp" + +#Battlemetrics API key +api_key="" + +#Favorited server IP:PORT array +ip_list=( +) + +#Favorite server to fast-connect to (limit one) +fav_server="" + +#Favorite server label (human readable) +fav_label="" + +#Custom player name (optional, required by some servers) +name="" + +#Set to 1 to perform dry-run and print launch options +debug="1" + +#Toggle stable/testing branch +branch="testing" + +#Start in fullscreen +fullscreen="false" + +#Steam API key +steam_api="" + +#Auto-install mods +auto_install="2" + +#Automod staging directory +staging_dir="/tmp" + +#Path to default Steam client +default_steam_path="/tmp" + +#Preferred Steam launch command (for Flatpak support) +preferred_client="steam" + +#DZGUI source path +src_path="" diff --git a/tests/fixtures/dztuirc_2 b/tests/fixtures/dztuirc_2 new file mode 100644 index 0000000..6869f4a --- /dev/null +++ b/tests/fixtures/dztuirc_2 @@ -0,0 +1,45 @@ +#Path to DayZ installation +steam_path="/tmp" + +#Battlemetrics API key +api_key="" + +#Favorited server IP:PORT array +ip_list=( +) + +#Favorite server to fast-connect to (limit one) +fav_server="" + +#Favorite server label (human readable) +fav_label="" + +#Custom player name (optional, required by some servers) +name="" + +#Set to 1 to perform dry-run and print launch options +debug="" + +#Toggle stable/testing branch +branch="testing" + +#Start in fullscreen +fullscreen="false" + +#Steam API key +steam_api="" + +#Auto-install mods +auto_install="0" + +#Automod staging directory +staging_dir="/tmp" + +#Path to default Steam client +default_steam_path="/tmp" + +#Preferred Steam launch command (for Flatpak support) +preferred_client="steam" + +#DZGUI source path +src_path="" From a2aeac0242760184d186dc74eaeb831cd648cb3d Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sun, 21 Jun 2026 22:18:02 +0900 Subject: [PATCH 12/15] fix: workaround for circular import in tests --- dzgui/api/steam.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dzgui/api/steam.py b/dzgui/api/steam.py index 397080c..88df5b4 100644 --- a/dzgui/api/steam.py +++ b/dzgui/api/steam.py @@ -10,7 +10,6 @@ from shlex import shlex from pathlib import Path from dzgui.init.prereqs import has_steam_client -from dzgui.api.mods import _hash from dzgui.const.constants import ( APPID_DAYZ, APP_NAME, @@ -58,6 +57,9 @@ def get_steam_paths() -> list[tuple[Path, str]]: def concat_mods(mods: list[str]) -> str: + # TODO: circular import workaround + from dzgui.api.mods import _hash + hashes = [] for mod in mods: md5sum = _hash(mod) From 8695793af41128957c537f0412ef05205a56144c Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sun, 21 Jun 2026 22:18:35 +0900 Subject: [PATCH 13/15] chore: add config test --- pyproject.toml | 1 + tests/test_config.py | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3f66822..374fec6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -107,6 +107,7 @@ config-settings-package = { pygobject-stubs = { config = "Gtk3,Gdk3,Soup2" } } [tool.pytest.ini_options] markers = [ "config: config file keys/values", + "mods: tests mod metadata/link creation", "pefile: validate PE files", "post_install: requires a completed installation", "slow: long-running tests", diff --git a/tests/test_config.py b/tests/test_config.py index 4cfd754..72c0460 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -1,6 +1,7 @@ import json import pytest +from dzgui.const.boilerplate import config_boilerplate from dzgui.config.query import get_config from dzgui.config.xdg import get_xdg_paths, parse_filepaths from dzgui.config import convert @@ -11,7 +12,11 @@ pytestmark = pytest.mark.config @pytest.fixture def legacy_config(): - return fixture_path("dztuirc_one") + return fixture_path("dztuirc_1") + +@pytest.fixture +def unset_values(): + return fixture_path("dztuirc_3") @pytest.fixture @@ -60,8 +65,8 @@ def test_contains_invalid_values(keys, config): @pytest.mark.parametrize( "fixture, expect", [ - ("dztuirc_one", (False, True, True)), - ("dztuirc_two", (False, False, False)), + ("dztuirc_1", (False, True, True)), + ("dztuirc_2", (False, False, False)), ], ) def test_bool_conversion(fixture, expect): @@ -86,5 +91,12 @@ def test_key_conversion(legacy_config): for key in keys: assert key not in j +def test_missing_values(unset_values): + j = convert.rc2json(unset_values) + j = json.loads(j) + assert j.keys() == config_boilerplate.keys() + + + # TODO: test that when a config file is created from scratch, it contains all values From a559485d0a09e049a8a5a2676ac6c512ec1dbf78 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sun, 21 Jun 2026 22:20:38 +0900 Subject: [PATCH 14/15] chore: change structure of fixtures --- .../fixtures/cpp/{meta1.cpp => mod1/meta.cpp} | 0 .../fixtures/cpp/{meta2.cpp => mod2/meta.cpp} | 0 .../fixtures/cpp/{meta3.cpp => mod3/meta.cpp} | 0 .../fixtures/cpp/{meta4.cpp => mod4/meta.cpp} | 0 .../fixtures/cpp/{meta5.cpp => mod5/meta.cpp} | 0 .../fixtures/cpp/{meta6.cpp => mod6/meta.cpp} | 0 tests/fixtures/cpp/test.py | 3 -- tests/fixtures/{dztuirc_one => dztuirc_3} | 3 -- tests/fixtures/dztuirc_two | 45 ------------------- tests/test_modmeta.py | 18 +++----- 10 files changed, 7 insertions(+), 62 deletions(-) rename tests/fixtures/cpp/{meta1.cpp => mod1/meta.cpp} (100%) rename tests/fixtures/cpp/{meta2.cpp => mod2/meta.cpp} (100%) rename tests/fixtures/cpp/{meta3.cpp => mod3/meta.cpp} (100%) rename tests/fixtures/cpp/{meta4.cpp => mod4/meta.cpp} (100%) rename tests/fixtures/cpp/{meta5.cpp => mod5/meta.cpp} (100%) rename tests/fixtures/cpp/{meta6.cpp => mod6/meta.cpp} (100%) delete mode 100644 tests/fixtures/cpp/test.py rename tests/fixtures/{dztuirc_one => dztuirc_3} (94%) delete mode 100644 tests/fixtures/dztuirc_two diff --git a/tests/fixtures/cpp/meta1.cpp b/tests/fixtures/cpp/mod1/meta.cpp similarity index 100% rename from tests/fixtures/cpp/meta1.cpp rename to tests/fixtures/cpp/mod1/meta.cpp diff --git a/tests/fixtures/cpp/meta2.cpp b/tests/fixtures/cpp/mod2/meta.cpp similarity index 100% rename from tests/fixtures/cpp/meta2.cpp rename to tests/fixtures/cpp/mod2/meta.cpp diff --git a/tests/fixtures/cpp/meta3.cpp b/tests/fixtures/cpp/mod3/meta.cpp similarity index 100% rename from tests/fixtures/cpp/meta3.cpp rename to tests/fixtures/cpp/mod3/meta.cpp diff --git a/tests/fixtures/cpp/meta4.cpp b/tests/fixtures/cpp/mod4/meta.cpp similarity index 100% rename from tests/fixtures/cpp/meta4.cpp rename to tests/fixtures/cpp/mod4/meta.cpp diff --git a/tests/fixtures/cpp/meta5.cpp b/tests/fixtures/cpp/mod5/meta.cpp similarity index 100% rename from tests/fixtures/cpp/meta5.cpp rename to tests/fixtures/cpp/mod5/meta.cpp diff --git a/tests/fixtures/cpp/meta6.cpp b/tests/fixtures/cpp/mod6/meta.cpp similarity index 100% rename from tests/fixtures/cpp/meta6.cpp rename to tests/fixtures/cpp/mod6/meta.cpp diff --git a/tests/fixtures/cpp/test.py b/tests/fixtures/cpp/test.py deleted file mode 100644 index 453b6d7..0000000 --- a/tests/fixtures/cpp/test.py +++ /dev/null @@ -1,3 +0,0 @@ -from dzgui.api.mods import tokenize - -print(tokenize("meta4.cpp")) diff --git a/tests/fixtures/dztuirc_one b/tests/fixtures/dztuirc_3 similarity index 94% rename from tests/fixtures/dztuirc_one rename to tests/fixtures/dztuirc_3 index 9ba40aa..c7a32f4 100644 --- a/tests/fixtures/dztuirc_one +++ b/tests/fixtures/dztuirc_3 @@ -23,9 +23,6 @@ debug="1" #Toggle stable/testing branch branch="testing" -#Start in fullscreen -fullscreen="false" - #Steam API key steam_api="" diff --git a/tests/fixtures/dztuirc_two b/tests/fixtures/dztuirc_two deleted file mode 100644 index 6869f4a..0000000 --- a/tests/fixtures/dztuirc_two +++ /dev/null @@ -1,45 +0,0 @@ -#Path to DayZ installation -steam_path="/tmp" - -#Battlemetrics API key -api_key="" - -#Favorited server IP:PORT array -ip_list=( -) - -#Favorite server to fast-connect to (limit one) -fav_server="" - -#Favorite server label (human readable) -fav_label="" - -#Custom player name (optional, required by some servers) -name="" - -#Set to 1 to perform dry-run and print launch options -debug="" - -#Toggle stable/testing branch -branch="testing" - -#Start in fullscreen -fullscreen="false" - -#Steam API key -steam_api="" - -#Auto-install mods -auto_install="0" - -#Automod staging directory -staging_dir="/tmp" - -#Path to default Steam client -default_steam_path="/tmp" - -#Preferred Steam launch command (for Flatpak support) -preferred_client="steam" - -#DZGUI source path -src_path="" diff --git a/tests/test_modmeta.py b/tests/test_modmeta.py index f2f4ca4..8002825 100644 --- a/tests/test_modmeta.py +++ b/tests/test_modmeta.py @@ -1,17 +1,13 @@ import pytest +from pathlib import Path + from dzgui.api.mods import tokenize from tests.fixtures import fixture_path @pytest.mark.mods -@pytest.mark.parametrize("fixture", [ - fixture_path("cpp/meta1.cpp"), - fixture_path("cpp/meta2.cpp"), - fixture_path("cpp/meta3.cpp"), - fixture_path("cpp/meta4.cpp"), - fixture_path("cpp/meta5.cpp"), - fixture_path("cpp/meta6.cpp"), - ] -) -def test_modmeta(fixture: str) -> None: - meta = tokenize(fixture) +@pytest.mark.parametrize("i", range(1, 7)) +def test_modmeta(i: int) -> None: + fixture = fixture_path(f"cpp/mod{i}") + path = Path(fixture) + meta = tokenize(path) assert meta["name"] == "ModName" From 98c45afe7f9210595db733a6335fff1cc2ced64c Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sun, 21 Jun 2026 23:51:42 +0900 Subject: [PATCH 15/15] chore: drop print statement --- dzgui/controllers/mc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index f2a93cd..aa2960c 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -205,7 +205,6 @@ class Controller(GObject.GObject): self.mediator.grid.notebook.settings.populate_settings() except Exception as e: msg = format_exception(e) - print(msg) logger.critical(msg) return case ButtonType.MODS: