diff --git a/games/game_dungeonsiege2.py b/games/game_dungeonsiege2.py index 448c851..c111293 100644 --- a/games/game_dungeonsiege2.py +++ b/games/game_dungeonsiege2.py @@ -1,5 +1,7 @@ # -*- encoding: utf-8 -*- +from typing import List, Tuple + from PyQt5.QtCore import QFileInfo import mobase @@ -7,7 +9,55 @@ import mobase from ..basic_game import BasicGame -class DarkMessiahOfMightAndMagicGame(BasicGame): +class DungeonSiegeIIModDataChecker(mobase.ModDataChecker): + def __init__(self): + super().__init__() + + def get_resources_and_maps( + self, tree: mobase.IFileTree + ) -> Tuple[List[mobase.FileTreeEntry], List[mobase.FileTreeEntry]]: + + ress: List[mobase.FileTreeEntry] = [] + maps: List[mobase.FileTreeEntry] = [] + + for e in tree: + if e.isFile(): + if e.suffix().lower() == "ds2res": + ress.append(e) + elif e.suffix().lower() == "ds2map": + maps.append(e) + + return ress, maps + + def dataLooksValid( + self, tree: mobase.IFileTree + ) -> mobase.ModDataChecker.CheckReturn: + # Check if we have a Resources / Maps folder or .ds2res/.ds2map + ress, maps = self.get_resources_and_maps(tree) + + if not ress and not maps: + if tree.exists("Resources") or tree.exists("Maps"): + return mobase.ModDataChecker.VALID + else: + return mobase.ModDataChecker.INVALID + + return mobase.ModDataChecker.FIXABLE + + def fix(self, tree: mobase.IFileTree) -> mobase.IFileTree: + ress, maps = self.get_resources_and_maps(tree) + + if ress: + rfolder = tree.addDirectory("Resources") + for r in ress: + rfolder.insert(r, mobase.IFileTree.REPLACE) + if maps: + rfolder = tree.addDirectory("Maps") + for r in maps: + rfolder.insert(r, mobase.IFileTree.REPLACE) + return tree + + +class DungeonSiegeIIGame(BasicGame): Name = "Dungeon Siege II" Author = "Holt59" Version = "0.1.0" @@ -24,6 +74,7 @@ class DarkMessiahOfMightAndMagicGame(BasicGame): def init(self, organizer: mobase.IOrganizer): super().init(organizer) + self._featureMap[mobase.ModDataChecker] = DungeonSiegeIIModDataChecker() return True def executables(self): diff --git a/games/game_stardewvalley.py b/games/game_stardewvalley.py index 8d47acc..3ede10e 100644 --- a/games/game_stardewvalley.py +++ b/games/game_stardewvalley.py @@ -11,15 +11,17 @@ class StardewValleyModDataChecker(mobase.ModDataChecker): def __init__(self): super().__init__() - def getDataFolderName(self) -> str: - return "mods" - - def dataLooksValid(self, tree: mobase.IFileTree) -> bool: + def dataLooksValid( + self, tree: mobase.IFileTree + ) -> mobase.ModDataChecker.CheckReturn: count_ok = 0 for e in tree: if e.isDir(): count_ok = e.exists("manifest.json", mobase.IFileTree.FILE) # type: ignore - return count_ok > 0 + + if count_ok > 0: + return mobase.ModDataChecker.VALID + return mobase.ModDataChecker.INVALID class StardewValleyGame(BasicGame):