2020from ..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-
3823class 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
0 commit comments