diff --git a/dzgui/api/mods.py b/dzgui/api/mods.py index b8ed4b8..234835d 100644 --- a/dzgui/api/mods.py +++ b/dzgui/api/mods.py @@ -2,9 +2,10 @@ import hashlib import logging import re -from concurrent.futures import wait -from concurrent.futures import ThreadPoolExecutor +from concurrent.futures import ThreadPoolExecutor, wait +from dataclasses import dataclass from pathlib import Path +from typing import Any from dzgui.api.steam import get_app_path from dzgui.api.servers import get_rules, fqip_to_record @@ -17,8 +18,7 @@ from dzgui.const.constants import ( from dzgui.config.query import lookup from dzgui.const.enum import Preferences - -from typing import Any +from dzgui.init.migrate import clean_legacy_versions_file logger = logging.getLogger(APP_NAME) @@ -116,10 +116,12 @@ def remove_stale_signatures( config: Path, versions: Path, ids: list[int] | None = None ) -> None: if versions.is_file() is False: - logger.warning("Creating new version signatures file") + logger.debug("Creating new version signatures file") versions.touch() return + clean_legacy_versions_file(versions) + path = lookup(config, Preferences.DEFAULT) steam_path = Path(path) if ids is None: diff --git a/dzgui/app_init.py b/dzgui/app_init.py index 4903b20..96ff4d1 100644 --- a/dzgui/app_init.py +++ b/dzgui/app_init.py @@ -18,8 +18,8 @@ from dzgui.config.query import lookup from dzgui.config.userprefs import UserPrefs from dzgui.config.xdg import get_xdg_paths, parse_filepaths from dzgui.init.migrate import ( - has_new_config, copy_state_files, + has_new_config, migrate_cols_file, ) from dzgui.init.prereqs import has_flatpak_client, has_steam_client diff --git a/dzgui/config/userprefs.py b/dzgui/config/userprefs.py index a392235..d65b8b3 100644 --- a/dzgui/config/userprefs.py +++ b/dzgui/config/userprefs.py @@ -6,7 +6,8 @@ if TYPE_CHECKING: from dzgui.util.ip import Coords -# NOTE: mutable dataclass, 'use_miles' key changes on demand +# NOTE: mutable dataclass: 'use_miles' key changes on demand +# 'frozen' cannot be True @dataclass(slots=True) class UserPrefs: is_steam_deck: bool diff --git a/dzgui/init/migrate.py b/dzgui/init/migrate.py index 2a5c0bc..0ff3ce2 100644 --- a/dzgui/init/migrate.py +++ b/dzgui/init/migrate.py @@ -1,12 +1,21 @@ import json +import logging +import re import shutil from pathlib import Path from typing import Any -from dzgui.const.constants import LEGACY_CONFIG_PATH, LEGACY_COLS_PATH, LEGACY_IPS_PATH +from dzgui.const.constants import ( + APP_NAME, + LEGACY_CONFIG_PATH, + LEGACY_COLS_PATH, + LEGACY_IPS_PATH, +) from dzgui.config.convert import rc2json from dzgui.util._json import read_json, write_json +logger = logging.getLogger(APP_NAME) + def migrate_legacy_conf(config: Path) -> Any: old_conf = Path.home() / LEGACY_CONFIG_PATH @@ -70,3 +79,15 @@ def copy_ipdb(ips_path: Path) -> None: return # TODO: ensure that month file is copied shutil.copy(legacy, ips_path) + + +def clean_legacy_versions_file(versions: Path) -> None: + # NOTE: handling for #523 + try: + pat = r"^(\d+),(\d+)$" + lines = versions.read_text().splitlines() + clean = [line for line in lines if re.match(pat, line)] + concat = "\n".join(clean) + versions.write_text(concat) + except Exception as e: + logger.warning(e) diff --git a/tests/test_legacy_version_file.py b/tests/test_legacy_version_file.py new file mode 100644 index 0000000..3117b37 --- /dev/null +++ b/tests/test_legacy_version_file.py @@ -0,0 +1,25 @@ +from typing import TYPE_CHECKING + +from dzgui.init.migrate import clean_legacy_versions_file + +if TYPE_CHECKING: + from pathlib import Path + + +def test_null_signature_stripping(tmp_path: "Path") -> None: + tmp = tmp_path.joinpath("dzg.versions") + lines = [ + "1111,2222", + "3333,4444", + "5555,null", + "foo", + ",4555", + "1111", + " ", + ",,,", + "-1", + ] + expect = ["1111,2222", "3333,4444"] + tmp.write_text("\n".join(lines)) + clean_legacy_versions_file(tmp) + assert expect == tmp.read_text().splitlines()