Skip to content

Commit f6c4bf5

Browse files
committed
Clean Code Update
1 parent 0c3a899 commit f6c4bf5

25 files changed

Lines changed: 687 additions & 703 deletions

games/game_cassettebeasts.py

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from datetime import datetime
33
from functools import cached_property
44
from io import BytesIO
5-
from typing import Any, Optional
5+
from typing import Any
66
from pathlib import Path
77
import json
88
import math
@@ -12,7 +12,7 @@
1212
import zlib
1313

1414
import mobase
15-
from PyQt6.QtCore import QDateTime, QDir, QFile, QFileInfo
15+
from PyQt6.QtCore import QDir, QFileInfo
1616

1717
from ..basic_features import BasicLocalSavegames
1818
from ..basic_features.basic_save_game_info import (BasicGameSaveGame,BasicGameSaveGameInfo)
@@ -33,40 +33,38 @@ def __init__(self, organizer: mobase.IOrganizer):
3333

3434
def dataLooksValid(self, filetree: mobase.IFileTree) -> mobase.ModDataChecker.CheckReturn:
3535
for e in filetree:
36-
if e is not None and e.isFile() and e.suffix().casefold() == "pck":
36+
if e.suffix().casefold() == "pck":
3737
return mobase.ModDataChecker.VALID
3838
return mobase.ModDataChecker.FIXABLE
3939

40-
def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree:
41-
GameDataPath = self.organizer.managedGame().GameDataPath + "/"
40+
def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree | None:
41+
GameDataPath = getattr(self.organizer.managedGame(), "GameDataPath", "") + "/"
4242
treefixed = 0
4343
for branch in filetree:
4444
mod_name = filetree.name()
4545
if mod_name == "":
4646
mod_name = branch.name()
4747
mod_path = os.path.join(self.organizer.modsPath(), mod_name)
48-
if filetree.createOrphanTree("OrphanTree") is None and os.path.exists(mod_path) and branch.suffix().casefold() == "pck":
48+
if not filetree.createOrphanTree("OrphanTree") and os.path.exists(mod_path) and branch.suffix().casefold() == "pck":
4949
os.makedirs(os.path.join(mod_path, GameDataPath), exist_ok=True)
5050
shutil.move(os.path.join(mod_path, branch.name()), os.path.join(mod_path, GameDataPath, branch.name()))
5151
treefixed = 1
5252
else:
53-
if branch is not None:
54-
if branch.isDir():
55-
for e in branch:
56-
if e is not None and e.isFile() and e.suffix().casefold() == "pck":
57-
filetree.move(e, GameDataPath, mobase.IFileTree.MERGE)
58-
treefixed = 1
59-
elif branch.suffix().casefold() == "pck":
53+
if isinstance(branch, mobase.IFileTree):
54+
for e in branch:
55+
if e.suffix().casefold() == "pck":
56+
filetree.move(e, GameDataPath, mobase.IFileTree.MERGE)
57+
treefixed = 1
58+
elif branch.suffix().casefold() == "pck":
6059
filetree.move(branch, GameDataPath, mobase.IFileTree.MERGE)
6160
treefixed = 1
6261
if treefixed == 0:
6362
return None
6463
return filetree
6564

6665
class CassetteBlock:
67-
def __init__(self):
68-
compressed_size: str = "(unknown)"
69-
data: str = "(unknown)"
66+
compressed_size: int = 0
67+
data: bytes = b''
7068

7169
class CassetteBeastsSaveGame(BasicGameSaveGame):
7270
def __init__(self, filepath: Path):
@@ -86,11 +84,11 @@ def __init__(self, filepath: Path):
8684
with open(filepath, 'rb') as infile:
8785
infile.read(4)
8886

89-
compression_mode, blocksize, raw_size = struct.unpack("III", infile.read(12))
87+
blocksize, raw_size = struct.unpack("III", infile.read(12))
9088

9189
num_blocks = math.ceil(raw_size / blocksize)
9290

93-
blocks = []
91+
blocks: list[CassetteBlock] = []
9492

9593
for _bnum in range(num_blocks):
9694
block = CassetteBlock()
@@ -149,17 +147,23 @@ def getLastSaved(self) -> str:
149147
def getPlayTime(self) -> str:
150148
return self.elapsed
151149

152-
def getMetadata(p: Path, save: mobase.ISaveGame) -> Mapping[str, str]:
153-
if not save.errorMessage:
154-
return {
150+
def getMetadata(p: Path, save: mobase.ISaveGame) -> Mapping[str, str] | None:
151+
err = getattr(save, "errorMessage", "")
152+
if err:
153+
return {"Error loading file:": err}
154+
155+
# If this is our concrete save-game class, the type checker knows the methods.
156+
if isinstance(save, BasicGameSaveGame):
157+
return
158+
{
155159
"Character": save.getName(),
156160
"Last Saved": save.getLastSaved(),
157161
"Play Time": save.getPlayTime(),
158162
"Cheated": save.getCheated()
159163
}
160-
return {
161-
"Error loading file:": save.errorMessage
162-
}
164+
else:
165+
return None
166+
163167

164168
class CassetteBeastsGame(BasicGame):
165169
Name = "Cassette Beasts Support Plugin"
@@ -178,7 +182,7 @@ def init(self, organizer: mobase.IOrganizer) -> bool:
178182
super().init(organizer)
179183
self.dataChecker = CassetteBeastsModDataChecker(organizer)
180184
self._register_feature(self.dataChecker)
181-
self._register_feature(BasicLocalSavegames(QDir(self.GameSavesDirectory)))
185+
self._register_feature(BasicLocalSavegames(QDir(self.GameSavesDirectory))) # type: ignore
182186
self._register_feature(
183187
BasicGameSaveGameInfo(None, getMetadata)
184188
)

games/game_crimeboss.py

Lines changed: 44 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class Content(IntEnum):
2727

2828

2929
class CrimeBossModDataContent(mobase.ModDataContent):
30-
contents: list[int] = []
30+
content: list[int] = []
3131
GAMECONTENTS: list[tuple[Content, str, str, bool] | tuple[Content, str, str]] = [
3232
(Content.UCAS, "UCAS", ":/MO/gui/content/geometries"),
3333
(Content.UTOC, "UTOC", ":/MO/gui/content/inifile"),
@@ -44,15 +44,15 @@ def walkContent(self, path: str, entry: mobase.FileTreeEntry):
4444
if entry.isFile():
4545
match entry.suffix().casefold():
4646
case "utoc":
47-
self.contents.add(Content.UTOC)
47+
self.content.append(Content.UTOC)
4848
case "ucas":
49-
self.contents.add(Content.UCAS)
49+
self.content.append(Content.UCAS)
5050
case "pak":
51-
self.contents.add(Content.PAK)
51+
self.content.append(Content.PAK)
5252
case "lua":
53-
self.contents.add(Content.UE4SS)
53+
self.content.append(Content.UE4SS)
5454
case "dll":
55-
self.contents.add(Content.DLL)
55+
self.content.append(Content.DLL)
5656
case "bk2":
5757
self.contents.add(Content.BK2)
5858
case _:
@@ -72,7 +72,7 @@ def __init__(self, organizer: mobase.IOrganizer):
7272
self.organizer.modList().onModInstalled(self._Fix_Installed_Mod)
7373
self.needsNameFix = False
7474

75-
def move_overwrite_merge(self, source, destination):
75+
def move_overwrite_merge(self, source: str, destination: str):
7676
if not os.path.exists(destination):
7777
shutil.move(source, destination)
7878
return
@@ -88,11 +88,11 @@ def move_overwrite_merge(self, source, destination):
8888
def _Fix_Installed_Mod(self, mod: mobase.IModInterface):
8989
if not self.needsNameFix:
9090
return
91-
GameDataNativeMods = self.organizer.managedGame().GameDataNativeMods
91+
GameDataNativeMods = getattr(self.organizer.managedGame(), "GameDataNativeMods", "")
9292
filetree: mobase.IFileTree = mod.fileTree()
9393
fixed = False
9494
modname = mod.name()
95-
if filetree is not None and filetree.exists(GameDataNativeMods + "/FOLDERNAME", mobase.IFileTree.DIRECTORY):
95+
if filetree.exists(GameDataNativeMods + "/FOLDERNAME", mobase.IFileTree.DIRECTORY):
9696
path = mod.absolutePath()
9797
old_path = os.path.join(path, GameDataNativeMods + "/FOLDERNAME")
9898
new_path = os.path.join(path, GameDataNativeMods + f"/{modname}")
@@ -103,41 +103,43 @@ def _Fix_Installed_Mod(self, mod: mobase.IModInterface):
103103
self.needsNameFix = False
104104

105105
def dataLooksValid(self, filetree: mobase.IFileTree) -> mobase.ModDataChecker.CheckReturn:
106-
GameDataUE4SSMods = self.organizer.managedGame().GameDataUE4SSMods
107-
GameDataPakMods = self.organizer.managedGame().GameDataPakMods
108-
GameDataNativeMods = self.organizer.managedGame().GameDataNativeMods
106+
GameDataUE4SSMods = getattr(self.organizer.managedGame(), "GameDataUE4SSMods", "")
107+
GameDataPakMods = getattr(self.organizer.managedGame(), "GameDataPakMods", "")
108+
GameDataNativeMods = getattr(self.organizer.managedGame(), "GameDataNativeMods", "")
109+
GameDataMovies = getattr(self.organizer.managedGame(), "GameDataMovies", "")
109110
if filetree.exists(GameDataPakMods, mobase.IFileTree.DIRECTORY):
110111
return mobase.ModDataChecker.VALID
111112
if filetree.exists(os.path.dirname(GameDataUE4SSMods), mobase.IFileTree.DIRECTORY):
112113
return mobase.ModDataChecker.VALID
113114
if filetree.exists(GameDataNativeMods, mobase.IFileTree.DIRECTORY) and not filetree.exists("UE4SS.dll", mobase.IFileTree.FILE):
114115
return mobase.ModDataChecker.VALID
116+
if filetree.exists(GameDataMovies, mobase.IFileTree.DIRECTORY):
117+
return mobase.ModDataChecker.VALID
115118
return mobase.ModDataChecker.FIXABLE
116119

117120
def fileExistsInNextSubDir(self, filetree: mobase.IFileTree, name: str):
118121
for branch in filetree:
119-
if branch is not None and branch.isDir():
122+
if isinstance(branch, mobase.IFileTree):
120123
for e in branch:
121-
if e is not None and e.name() == name:
124+
if e.name() == name:
122125
return True
123126
return False
124127

125128
def allMoveTo(self, filetree: mobase.IFileTree, toMoveTo: str):
126129
entriesToMove: list[mobase.FileTreeEntry] = []
127130
retVal = 0
128131
for e in filetree:
129-
if e is not None:
130-
entriesToMove.append(e)
132+
entriesToMove.append(e)
131133
for e in entriesToMove:
132134
filetree.move(e, toMoveTo, mobase.IFileTree.MERGE)
133135
retVal = 1
134136
return retVal
135137

136-
def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree:
137-
GameDataUE4SSMods = self.organizer.managedGame().GameDataUE4SSMods + "/"
138-
GameDataPakMods = self.organizer.managedGame().GameDataPakMods + "/"
139-
GameDataNativeMods = self.organizer.managedGame().GameDataNativeMods + "/"
140-
GameDataMovies = self.organizer.managedGame().GameDataMovies + "/"
138+
def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree | None:
139+
GameDataUE4SSMods = getattr(self.organizer.managedGame(), "GameDataUE4SSMods", "") + "/"
140+
GameDataPakMods = getattr(self.organizer.managedGame(), "GameDataPakMods", "") + "/"
141+
GameDataNativeMods = getattr(self.organizer.managedGame(), "GameDataNativeMods", "") + "/"
142+
GameDataMovies = getattr(self.organizer.managedGame(), "GameDataMovies", "") + "/"
141143
treefixed = 0
142144
if filetree.exists("UE4SS.dll", mobase.IFileTree.FILE):
143145
treefixed = self.allMoveTo(filetree, os.path.dirname(os.path.dirname(GameDataUE4SSMods)) + "/")
@@ -154,28 +156,27 @@ def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree:
154156
allowedUnzippedExt = ["pak", "utoc", "ucas", "bk2", "dll"]
155157
entriesToMove: list[mobase.FileTreeEntry] = []
156158
for e in filetree:
157-
if e is not None:
158-
if e.isFile():
159-
fileext = e.suffix().casefold()
160-
if fileext in allowedUnzippedExt:
161-
mod_name = filetree.name()
162-
if mod_name == "":
163-
mod_name = e.name()
164-
mod_path = os.path.join(self.organizer.modsPath(), mod_name)
165-
if filetree.createOrphanTree("OrphanTree") is None and os.path.exists(mod_path):
166-
match e.suffix().casefold():
167-
case "pak" | "utoc" | "ucas":
168-
os.makedirs(os.path.join(mod_path, GameDataPakMods), exist_ok=True)
169-
shutil.move(os.path.join(mod_path, e.name()), os.path.join(mod_path, GameDataPakMods, e.name()))
170-
case "bk2":
171-
os.makedirs(os.path.join(mod_path, GameDataMovies), exist_ok=True)
172-
shutil.move(os.path.join(mod_path, e.name()), os.path.join(mod_path, GameDataMovies, e.name()))
173-
case _:
174-
pass
175-
treefixed = 1
176-
else:
177-
entriesToMove.append(e)
178-
if entriesToMove is not None:
159+
if e.isFile():
160+
fileext = e.suffix().casefold()
161+
if fileext in allowedUnzippedExt:
162+
mod_name = filetree.name()
163+
if mod_name == "":
164+
mod_name = e.name()
165+
mod_path = os.path.join(self.organizer.modsPath(), mod_name)
166+
if not filetree.createOrphanTree("OrphanTree") and os.path.exists(mod_path):
167+
match e.suffix().casefold():
168+
case "pak" | "utoc" | "ucas":
169+
os.makedirs(os.path.join(mod_path, GameDataPakMods), exist_ok=True)
170+
shutil.move(os.path.join(mod_path, e.name()), os.path.join(mod_path, GameDataPakMods, e.name()))
171+
case "bk2":
172+
os.makedirs(os.path.join(mod_path, GameDataMovies), exist_ok=True)
173+
shutil.move(os.path.join(mod_path, e.name()), os.path.join(mod_path, GameDataMovies, e.name()))
174+
case _:
175+
pass
176+
treefixed = 1
177+
else:
178+
entriesToMove.append(e)
179+
if entriesToMove:
179180
for e in entriesToMove:
180181
match e.suffix().casefold():
181182
case "pak" | "utoc" | "ucas":

games/game_emuvr.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,33 +16,32 @@ def __init__(self, organizer: mobase.IOrganizer):
1616
self.organizer: mobase.IOrganizer = organizer
1717

1818
def dataLooksValid(self, filetree: mobase.IFileTree) -> mobase.ModDataChecker.CheckReturn:
19-
GameDataUGCMods = self.organizer.managedGame().GameDataUGCMods
19+
GameDataUGCMods = getattr(self.organizer.managedGame(), "GameDataUGCMods", "")
2020
if filetree.exists(GameDataUGCMods, mobase.IFileTree.DIRECTORY):
2121
return mobase.ModDataChecker.VALID
2222
return mobase.ModDataChecker.FIXABLE
2323

24-
def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree:
25-
GameDataUGCMods = self.organizer.managedGame().GameDataUGCMods + "/"
24+
def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree | None:
25+
GameDataUGCMods = getattr(self.organizer.managedGame(), "GameDataUGCMods", "") + "/"
2626
treefixed = 0
2727
for branch in filetree:
2828
mod_name = filetree.name()
2929
if mod_name == "":
3030
mod_name = branch.name()
3131
mod_path = os.path.join(self.organizer.modsPath(), mod_name)
32-
if filetree.createOrphanTree("OrphanTree") is None and os.path.exists(mod_path) and branch.suffix().casefold() == "ugc":
32+
if not filetree.createOrphanTree("OrphanTree") and os.path.exists(mod_path) and branch.suffix().casefold() == "ugc":
3333
os.makedirs(os.path.join(mod_path, GameDataUGCMods), exist_ok=True)
3434
shutil.move(os.path.join(mod_path, branch.name()), os.path.join(mod_path, GameDataUGCMods, branch.name()))
3535
treefixed = 1
3636
else:
37-
if branch is not None:
38-
if branch.isDir():
39-
for e in branch:
40-
if e is not None and e.isFile() and e.suffix().casefold() == "ugc":
41-
filetree.move(e, GameDataUGCMods, mobase.IFileTree.MERGE)
42-
treefixed = 1
43-
elif branch.suffix().casefold() == "ugc":
44-
filetree.move(branch, GameDataUGCMods, mobase.IFileTree.MERGE)
45-
treefixed = 1
37+
if isinstance(branch, mobase.IFileTree):
38+
for e in branch:
39+
if e.isFile() and e.suffix().casefold() == "ugc":
40+
filetree.move(e, GameDataUGCMods, mobase.IFileTree.MERGE)
41+
treefixed = 1
42+
elif branch.suffix().casefold() == "ugc":
43+
filetree.move(branch, GameDataUGCMods, mobase.IFileTree.MERGE)
44+
treefixed = 1
4645
if treefixed == 0:
4746
return None
4847
return filetree

0 commit comments

Comments
 (0)