Skip to content

Commit 23f7fac

Browse files
committed
Allowed for installation of mods without subfolders.
Finalized Raid Install Process.
1 parent 1dc56f7 commit 23f7fac

3 files changed

Lines changed: 70 additions & 71 deletions

File tree

games/game_payday1.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,6 @@
2020
from ..basic_game import BasicGame
2121

2222

23-
def sanitizeFolderName(name: str) -> str:
24-
# Remove invalid characters for Windows folder names
25-
invalid_chars = '+&<>:"|?*\\/'
26-
for char in invalid_chars:
27-
name = name.replace(char, "")
28-
# Remove control characters (ASCII 0-31)
29-
name = "".join(c for c in name if ord(c) >= 32)
30-
# Remove trailing periods and spaces
31-
name = name.rstrip(". ")
32-
# If name is empty after sanitization, use a default
33-
if not name:
34-
name = "Unnamed"
35-
return name
36-
37-
3823
class Content(IntEnum):
3924
TEXTURE = auto()
4025
MESH = auto()
@@ -118,6 +103,21 @@ def __init__(self, organizer: mobase.IOrganizer):
118103
"units",
119104
]
120105

106+
def sanitizeFolderName(self, name: str) -> str:
107+
# Remove invalid characters for Windows folder names
108+
invalid_chars = '+&<>:"|?*\\/'
109+
for char in invalid_chars:
110+
name = name.replace(char, "")
111+
# Remove control characters (ASCII 0-31)
112+
name = "".join(c for c in name if ord(c) >= 32)
113+
# Remove trailing periods and spaces
114+
name = name.rstrip(". ")
115+
# If name is empty after sanitization, use a default
116+
if not name:
117+
name = "FOLDERNAME"
118+
self.needsNameFix = True
119+
return name
120+
121121
def moveOverwriteMerge(self, source: str, destination: str):
122122
if not os.path.exists(destination):
123123
shutil.move(source, destination)
@@ -136,7 +136,7 @@ def fixInstalledMod(self, mod: mobase.IModInterface):
136136
return
137137
filetree: mobase.IFileTree = mod.fileTree()
138138
fixed = False
139-
modname = sanitizeFolderName(mod.name())
139+
modname = self.sanitizeFolderName(mod.name())
140140
if filetree.exists("mods/FOLDERNAME", mobase.IFileTree.DIRECTORY):
141141
path = mod.absolutePath()
142142
old_path = os.path.join(path, "mods/FOLDERNAME")
@@ -263,7 +263,7 @@ def collectModCandidates(
263263
self, tree: mobase.IFileTree | mobase.FileTreeEntry
264264
) -> bool:
265265
if isinstance(tree, mobase.IFileTree):
266-
sanitizedName = sanitizeFolderName(tree.name())
266+
sanitizedName = self.sanitizeFolderName(tree.name())
267267
hasDisallowedPath = False
268268
disallowedFolders = {"assets", "levels", "lua", "map_replacements"}
269269
tree_path = tree.path()
@@ -281,7 +281,7 @@ def collectModCandidates(
281281
):
282282
self.addModDetectionCandidate(
283283
tree,
284-
sanitizeFolderName(tree.name()),
284+
self.sanitizeFolderName(tree.name()),
285285
"BLT",
286286
"mods/" + sanitizedName + "/",
287287
)
@@ -291,7 +291,7 @@ def collectModCandidates(
291291
):
292292
self.addModDetectionCandidate(
293293
tree,
294-
sanitizeFolderName(tree.name()),
294+
self.sanitizeFolderName(tree.name()),
295295
"Map Core",
296296
"maps/" + sanitizedName + "/",
297297
)
@@ -303,7 +303,7 @@ def collectModCandidates(
303303
):
304304
self.addModDetectionCandidate(
305305
tree,
306-
sanitizeFolderName(tree.name()),
306+
self.sanitizeFolderName(tree.name()),
307307
"SuperBLT",
308308
"assets/mod_overrides/" + sanitizedName + "/",
309309
)
@@ -313,7 +313,7 @@ def collectModCandidates(
313313
if tree.exists(validFolder, mobase.IFileTree.DIRECTORY):
314314
self.addModDetectionCandidate(
315315
tree,
316-
sanitizeFolderName(tree.name()),
316+
self.sanitizeFolderName(tree.name()),
317317
"Override",
318318
"assets/mod_overrides/" + sanitizedName + "/",
319319
)
@@ -329,7 +329,7 @@ def walkEntry(self, path: str, entry: mobase.FileTreeEntry):
329329
def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree | None:
330330
self.modDetectionCandidates = []
331331
newtree = filetree.createOrphanTree("Fixed Tree")
332-
332+
self.collectModCandidates(filetree)
333333
filetree.walk(self.walkEntry, "/")
334334

335335
if len(self.modDetectionCandidates) == 1:

games/game_payday2.py

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,6 @@
2020
from ..basic_game import BasicGame
2121

2222

23-
def sanitizeFolderName(name: str) -> str:
24-
# Remove invalid characters for Windows folder names
25-
invalid_chars = '+&<>:"|?*\\/'
26-
for char in invalid_chars:
27-
name = name.replace(char, "")
28-
# Remove control characters (ASCII 0-31)
29-
name = "".join(c for c in name if ord(c) >= 32)
30-
# Remove trailing periods and spaces
31-
name = name.rstrip(". ")
32-
# If name is empty after sanitization, use a default
33-
if not name:
34-
name = "Unnamed"
35-
return name
36-
37-
3823
class Content(IntEnum):
3924
TEXTURE = auto()
4025
MESH = auto()
@@ -118,6 +103,21 @@ def __init__(self, organizer: mobase.IOrganizer):
118103
"units",
119104
]
120105

106+
def sanitizeFolderName(self, name: str) -> str:
107+
# Remove invalid characters for Windows folder names
108+
invalid_chars = '+&<>:"|?*\\/'
109+
for char in invalid_chars:
110+
name = name.replace(char, "")
111+
# Remove control characters (ASCII 0-31)
112+
name = "".join(c for c in name if ord(c) >= 32)
113+
# Remove trailing periods and spaces
114+
name = name.rstrip(". ")
115+
# If name is empty after sanitization, use a default
116+
if not name:
117+
name = "FOLDERNAME"
118+
self.needsNameFix = True
119+
return name
120+
121121
def moveOverwriteMerge(self, source: str, destination: str):
122122
if not os.path.exists(destination):
123123
shutil.move(source, destination)
@@ -136,7 +136,7 @@ def fixInstalledMod(self, mod: mobase.IModInterface):
136136
return
137137
filetree: mobase.IFileTree = mod.fileTree()
138138
fixed = False
139-
modname = sanitizeFolderName(mod.name())
139+
modname = self.sanitizeFolderName(mod.name())
140140
if filetree.exists("mods/FOLDERNAME", mobase.IFileTree.DIRECTORY):
141141
path = mod.absolutePath()
142142
old_path = os.path.join(path, "mods/FOLDERNAME")
@@ -263,7 +263,7 @@ def collectModCandidates(
263263
self, tree: mobase.IFileTree | mobase.FileTreeEntry
264264
) -> bool:
265265
if isinstance(tree, mobase.IFileTree):
266-
sanitizedName = sanitizeFolderName(tree.name())
266+
sanitizedName = self.sanitizeFolderName(tree.name())
267267
hasDisallowedPath = False
268268
disallowedFolders = {"assets", "levels", "lua", "map_replacements"}
269269
tree_path = tree.path()
@@ -281,7 +281,7 @@ def collectModCandidates(
281281
):
282282
self.addModDetectionCandidate(
283283
tree,
284-
sanitizeFolderName(tree.name()),
284+
self.sanitizeFolderName(tree.name()),
285285
"SuperBLT",
286286
"mods/" + sanitizedName + "/",
287287
)
@@ -291,7 +291,7 @@ def collectModCandidates(
291291
):
292292
self.addModDetectionCandidate(
293293
tree,
294-
sanitizeFolderName(tree.name()),
294+
self.sanitizeFolderName(tree.name()),
295295
"Map Core",
296296
"maps/" + sanitizedName + "/",
297297
)
@@ -303,7 +303,7 @@ def collectModCandidates(
303303
):
304304
self.addModDetectionCandidate(
305305
tree,
306-
sanitizeFolderName(tree.name()),
306+
self.sanitizeFolderName(tree.name()),
307307
"Beard Lib",
308308
"assets/mod_overrides/" + sanitizedName + "/",
309309
)
@@ -313,14 +313,14 @@ def collectModCandidates(
313313
if tree.exists(validFolder, mobase.IFileTree.DIRECTORY):
314314
self.addModDetectionCandidate(
315315
tree,
316-
sanitizeFolderName(tree.name()),
316+
self.sanitizeFolderName(tree.name()),
317317
"Override",
318318
"assets/mod_overrides/" + sanitizedName + "/",
319319
)
320320
return True
321321
return False
322322

323-
def walk_entry(self, path: str, entry: mobase.FileTreeEntry):
323+
def walkEntry(self, path: str, entry: mobase.FileTreeEntry):
324324
if entry.isDir():
325325
if isinstance(entry, mobase.IFileTree):
326326
self.collectModCandidates(entry)
@@ -329,8 +329,8 @@ def walk_entry(self, path: str, entry: mobase.FileTreeEntry):
329329
def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree | None:
330330
self.modDetectionCandidates = []
331331
newtree = filetree.createOrphanTree("Fixed Tree")
332-
333-
filetree.walk(self.walk_entry, "/")
332+
self.collectModCandidates(filetree)
333+
filetree.walk(self.walkEntry, "/")
334334

335335
if len(self.modDetectionCandidates) == 1:
336336
selectedIndexes = {0}
@@ -345,10 +345,9 @@ def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree | None:
345345
print(
346346
f"Installing Mod: {candidate['name']} to {candidate['destination']}"
347347
)
348-
if self.moveTreeContent(
348+
self.moveTreeContent(
349349
candidate["tree"], newtree, candidate["destination"]
350-
):
351-
self.needsNameFix = True
350+
)
352351

353352
return newtree if len(newtree) > 0 else filetree
354353

games/game_raid2.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,6 @@
2020
from ..basic_game import BasicGame
2121

2222

23-
def sanitizeFolderName(name: str) -> str:
24-
# Remove invalid characters for Windows folder names
25-
invalid_chars = '+&<>:"|?*\\/'
26-
for char in invalid_chars:
27-
name = name.replace(char, "")
28-
# Remove control characters (ASCII 0-31)
29-
name = "".join(c for c in name if ord(c) >= 32)
30-
# Remove trailing periods and spaces
31-
name = name.rstrip(". ")
32-
# If name is empty after sanitization, use a default
33-
if not name:
34-
name = "Unnamed"
35-
return name
36-
37-
3823
class Content(IntEnum):
3924
TEXTURE = auto()
4025
MESH = auto()
@@ -119,6 +104,21 @@ def __init__(self, organizer: mobase.IOrganizer):
119104
"units",
120105
]
121106

107+
def sanitizeFolderName(self, name: str) -> str:
108+
# Remove invalid characters for Windows folder names
109+
invalid_chars = '+&<>:"|?*\\/'
110+
for char in invalid_chars:
111+
name = name.replace(char, "")
112+
# Remove control characters (ASCII 0-31)
113+
name = "".join(c for c in name if ord(c) >= 32)
114+
# Remove trailing periods and spaces
115+
name = name.rstrip(". ")
116+
# If name is empty after sanitization, use a default
117+
if not name:
118+
name = "FOLDERNAME"
119+
self.needsNameFix = True
120+
return name
121+
122122
def moveOverwriteMerge(self, source: str, destination: str):
123123
if not os.path.exists(destination):
124124
shutil.move(source, destination)
@@ -137,7 +137,7 @@ def fixInstalledMod(self, mod: mobase.IModInterface):
137137
return
138138
filetree: mobase.IFileTree = mod.fileTree()
139139
fixed = False
140-
modname = sanitizeFolderName(mod.name())
140+
modname = self.sanitizeFolderName(mod.name())
141141
if filetree.exists("mods/FOLDERNAME", mobase.IFileTree.DIRECTORY):
142142
path = mod.absolutePath()
143143
old_path = os.path.join(path, "mods/FOLDERNAME")
@@ -231,7 +231,7 @@ def collectModCandidates(
231231
hasDisallowedPath = True
232232
if not hasDisallowedPath:
233233
if isinstance(tree, mobase.IFileTree):
234-
sanitizedName = sanitizeFolderName(tree.name())
234+
sanitizedName = self.sanitizeFolderName(tree.name())
235235
if (
236236
tree.exists("mod.txt", mobase.IFileTree.FILE)
237237
or tree.exists("mod.xml", mobase.IFileTree.FILE)
@@ -249,7 +249,7 @@ def collectModCandidates(
249249
):
250250
self.addModDetectionCandidate(
251251
tree,
252-
sanitizeFolderName(tree.name()),
252+
self.sanitizeFolderName(tree.name()),
253253
"Beard Lib",
254254
"mods/" + sanitizedName + "/",
255255
)
@@ -259,14 +259,14 @@ def collectModCandidates(
259259
if tree.exists(validFolder, mobase.IFileTree.DIRECTORY):
260260
self.addModDetectionCandidate(
261261
tree,
262-
sanitizeFolderName(tree.name()),
262+
self.sanitizeFolderName(tree.name()),
263263
"Override",
264264
"mods/" + sanitizedName + "/",
265265
)
266266
return True
267267
return False
268268

269-
def walk_entry(self, path: str, entry: mobase.FileTreeEntry):
269+
def walkEntry(self, path: str, entry: mobase.FileTreeEntry):
270270
if entry.isDir():
271271
if isinstance(entry, mobase.IFileTree):
272272
self.collectModCandidates(entry)
@@ -289,8 +289,8 @@ def moveTreeContent(
289289
def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree | None:
290290
self.modDetectionCandidates = []
291291
newtree = filetree.createOrphanTree("Fixed Tree")
292-
293-
filetree.walk(self.walk_entry, "/")
292+
self.collectModCandidates(filetree)
293+
filetree.walk(self.walkEntry, "/")
294294

295295
if len(self.modDetectionCandidates) == 1:
296296
selectedIndexes = {0}

0 commit comments

Comments
 (0)