aboutsummaryrefslogtreecommitdiff
path: root/libs/basic_games/games/game_schedule1.py
diff options
context:
space:
mode:
Diffstat (limited to 'libs/basic_games/games/game_schedule1.py')
-rw-r--r--libs/basic_games/games/game_schedule1.py112
1 files changed, 112 insertions, 0 deletions
diff --git a/libs/basic_games/games/game_schedule1.py b/libs/basic_games/games/game_schedule1.py
new file mode 100644
index 0000000..8ed98d6
--- /dev/null
+++ b/libs/basic_games/games/game_schedule1.py
@@ -0,0 +1,112 @@
+import json
+from pathlib import Path
+
+from PyQt6.QtCore import QDir
+
+import mobase
+
+from ..basic_features import BasicLocalSavegames, BasicModDataChecker, GlobPatterns
+from ..basic_features.basic_save_game_info import (
+ BasicGameSaveGame,
+ BasicGameSaveGameInfo,
+)
+from ..basic_game import BasicGame
+
+
+def parse_schedule1_save_metadata(save_path: Path, save: mobase.ISaveGame):
+ metadata_file = save_path / "Game.json"
+ try:
+ with open(metadata_file) as file:
+ meta_data = json.load(file)
+ name = meta_data["OrganisationName"]
+ if name != (save_name := save.getName()):
+ name = f"{save_name} ({name})"
+ return {
+ "Name": name,
+ "Game version": meta_data["GameVersion"],
+ }
+ except (FileNotFoundError, json.JSONDecodeError):
+ return None
+
+
+class Schedule1SaveGame(BasicGameSaveGame):
+ def getName(self) -> str:
+ metadata_file = self._filepath / "Game.json"
+ try:
+ with open(metadata_file) as file:
+ meta_data = json.load(file)
+ return meta_data["OrganisationName"]
+ except (FileNotFoundError, json.JSONDecodeError):
+ return (
+ f"[{self.getSaveGroupIdentifier().rstrip('s')}] {self._filepath.stem}"
+ )
+
+ def getSaveGroupIdentifier(self) -> str:
+ return self._filepath.parent.name
+
+
+class Schedule1Game(BasicGame):
+ Name = "Schedule I Support Plugin"
+ Author = "shellbj"
+ Version = "1.0.0"
+
+ GameName = "Schedule I"
+ GameShortName = "scheduleI"
+ GameNexusName = "schedule1"
+ GameNexusId = 7381
+ GameSteamId = 3164500
+
+ GameBinary = "Schedule I.exe"
+ GameValidShortNames = ["schedule1", "scheduleI"]
+ GameDataPath = ""
+ GameSavesDirectory = r"%USERPROFILE%/AppData/LocalLow/TVGS/Schedule I/Saves"
+ GameSupportURL = (
+ r"https://github.com/ModOrganizer2/modorganizer-basic_games/wiki/"
+ "Game:-Schedule-I"
+ )
+
+ def init(self, organizer: mobase.IOrganizer) -> bool:
+ super().init(organizer)
+ self._register_feature(
+ BasicModDataChecker(
+ GlobPatterns(
+ unfold=[
+ # Fixes bad packaging for select mods
+ "ModManager&PhoneApp",
+ "AutoClearCompletedDeals",
+ ],
+ valid=[
+ "meta.ini", # Included in installed mod folder.
+ "Mods",
+ "Plugins",
+ "UserData", # might not be needed
+ ],
+ delete=[
+ "*.md",
+ "icon.png",
+ "fomod", # not sure this is needed either
+ ],
+ move={
+ "*.dll": "Mods/",
+ # If these even exisit outside of mod packs
+ "*.ini": "UserData/",
+ "*.cfg": "UserData/",
+ "*.json": "UserData/",
+ },
+ )
+ )
+ )
+ self._register_feature(BasicLocalSavegames(self))
+ self._register_feature(
+ BasicGameSaveGameInfo(
+ None, # no snapshot to add to the widget
+ parse_schedule1_save_metadata,
+ )
+ )
+ return True
+
+ def listSaves(self, folder: QDir) -> list[mobase.ISaveGame]:
+ return [
+ Schedule1SaveGame(path)
+ for path in Path(folder.absolutePath()).glob("*/SaveGame_[1-5]")
+ ]