Skip to content

Commit cd3edaf

Browse files
committed
feat: improve mod data checker to handle nested mod structures
1 parent 8d84709 commit cd3edaf

1 file changed

Lines changed: 21 additions & 16 deletions

File tree

games/game_sts2.py

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,34 @@
66

77
import mobase
88

9-
from ..basic_features import BasicModDataChecker, GlobPatterns
109
from ..basic_features.basic_save_game_info import BasicGameSaveGame
1110
from ..basic_game import BasicGame
1211
from ..steam_utils import find_steam_path
1312

1413

15-
class SlayTheSpire2ModDataChecker(BasicModDataChecker):
16-
def __init__(self):
17-
super().__init__(
18-
GlobPatterns(
19-
valid=[
20-
"*.pck",
21-
"*.dll",
22-
"*.json",
23-
],
24-
move={
25-
"*/*.pck": "",
26-
"*/*.dll": "",
27-
"*/*.json": "",
28-
},
29-
)
14+
class SlayTheSpire2ModDataChecker(mobase.ModDataChecker):
15+
_VALID_EXTENSIONS = (".pck", ".dll", ".json")
16+
17+
def _has_mod_files(self, filetree: mobase.FileTreeEntry) -> bool:
18+
return any(
19+
entry.isFile() and entry.name().endswith(self._VALID_EXTENSIONS)
20+
for entry in filetree
3021
)
3122

23+
def dataLooksValid(self, filetree: mobase.IFileTree) -> mobase.ModDataChecker.CheckReturn:
24+
if self._has_mod_files(filetree):
25+
return mobase.ModDataChecker.VALID
26+
if any(entry.isDir() and self._has_mod_files(entry) for entry in filetree):
27+
return mobase.ModDataChecker.FIXABLE
28+
return mobase.ModDataChecker.INVALID
29+
30+
def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree:
31+
for entry in list(filetree):
32+
if entry.isDir() and self._has_mod_files(entry):
33+
filetree.merge(entry)
34+
entry.detach()
35+
return filetree
36+
3237

3338
class SlayTheSpire2Game(BasicGame):
3439
Name = "Slay the Spire 2 Support Plugin"

0 commit comments

Comments
 (0)