mirror of
https://github.com/ModOrganizer2/modorganizer-basic_games.git
synced 2026-07-27 14:07:29 -07:00
59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
from pathlib import Path
|
|
|
|
import mobase
|
|
|
|
from ...basic_features import BasicModDataChecker, GlobPatterns, utils
|
|
from . import bg3_utils
|
|
|
|
|
|
class BG3ModDataChecker(BasicModDataChecker):
|
|
def __init__(self):
|
|
super().__init__(
|
|
GlobPatterns(
|
|
valid=[
|
|
"*.pak",
|
|
str(Path("Mods") / "*.pak"), # standard mods
|
|
"bin", # native mods / Script Extender
|
|
"Script Extender", # mods which are configured via jsons in this folder
|
|
"Data", # loose file mods
|
|
]
|
|
+ [str(Path("*") / f) for f in bg3_utils.loose_file_folders],
|
|
move={
|
|
"Root/": "", # root builder not needed
|
|
"*.dll": "bin/",
|
|
"ScriptExtenderSettings.json": "bin/",
|
|
}
|
|
| {f: "Data/" for f in bg3_utils.loose_file_folders},
|
|
delete=["info.json", "*.txt"],
|
|
)
|
|
)
|
|
|
|
def dataLooksValid(
|
|
self, filetree: mobase.IFileTree
|
|
) -> mobase.ModDataChecker.CheckReturn:
|
|
status = mobase.ModDataChecker.INVALID
|
|
rp = self._regex_patterns
|
|
for entry in filetree:
|
|
name = entry.name().casefold()
|
|
if rp.unfold.match(name):
|
|
if utils.is_directory(entry):
|
|
status = self.dataLooksValid(entry)
|
|
else:
|
|
status = mobase.ModDataChecker.INVALID
|
|
break
|
|
elif rp.valid.match(name):
|
|
if status is mobase.ModDataChecker.INVALID:
|
|
status = mobase.ModDataChecker.VALID
|
|
elif isinstance(entry, mobase.IFileTree):
|
|
status = (
|
|
mobase.ModDataChecker.VALID
|
|
if all(rp.valid.match(e.pathFrom(filetree)) for e in entry)
|
|
else mobase.ModDataChecker.INVALID
|
|
)
|
|
elif rp.delete.match(name) or rp.move_match(name) is not None:
|
|
status = mobase.ModDataChecker.FIXABLE
|
|
else:
|
|
status = mobase.ModDataChecker.INVALID
|
|
break
|
|
return status
|