2020from ..basic_game import BasicGame
2121
2222
23- def sanitize_folder_name (name : str ) -> str :
23+ def sanitizeFolderName (name : str ) -> str :
2424 # Remove invalid characters for Windows folder names
2525 invalid_chars = '+&<>:"|?*\\ /'
2626 for char in invalid_chars :
@@ -136,7 +136,7 @@ def fixInstalledMod(self, mod: mobase.IModInterface):
136136 return
137137 filetree : mobase .IFileTree = mod .fileTree ()
138138 fixed = False
139- modname = sanitize_folder_name (mod .name ())
139+ modname = 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" )
@@ -181,20 +181,6 @@ def dataLooksValid(
181181 return mobase .ModDataChecker .VALID
182182 return mobase .ModDataChecker .FIXABLE
183183
184- def fileExistsInNextSubDir (self , filetree : mobase .IFileTree , name : str ):
185- for branch in filetree :
186- if isinstance (branch , mobase .IFileTree ):
187- for e in branch :
188- if e .name () == name :
189- return True
190- return False
191-
192- def firstTree (self , filetree : mobase .IFileTree ) -> mobase .IFileTree | None :
193- for e in filetree :
194- if isinstance (e , mobase .IFileTree ) and e .isDir ():
195- return e
196- return None
197-
198184 def moveTreeContent (
199185 self ,
200186 sourcetree : mobase .IFileTree ,
@@ -277,6 +263,7 @@ def collectModCandidates(
277263 self , tree : mobase .IFileTree | mobase .FileTreeEntry
278264 ) -> bool :
279265 if isinstance (tree , mobase .IFileTree ):
266+ sanitizedName = sanitizeFolderName (tree .name ())
280267 hasDisallowedPath = False
281268 disallowedFolders = {"assets" , "levels" , "lua" , "map_replacements" }
282269 tree_path = tree .path ()
@@ -287,65 +274,53 @@ def collectModCandidates(
287274 tree .exists (validFolder , mobase .IFileTree .DIRECTORY )
288275 for validFolder in self .folderList
289276 )
290- if (
291- tree .exists ("mod.txt" , mobase .IFileTree .FILE )
292- and not hasFolderListSubfolder
293- ):
294- self .addModDetectionCandidate (
295- tree ,
296- sanitize_folder_name (tree .name ()),
297- "Mods Folder with mod.txt" ,
298- "mods/FOLDERNAME/" ,
299- )
300- return True
301- elif (
302- tree .exists ("main.xml" , mobase .IFileTree .FILE )
303- and tree .exists ("levels" , mobase .IFileTree .DIRECTORY )
304- and not hasDisallowedPath
305- ):
306- self .addModDetectionCandidate (
307- tree ,
308- sanitize_folder_name (tree .name ()),
309- "Maps Folder with main.xml and levels folder" ,
310- "maps/FOLDERNAME/" ,
311- )
312- return True
313- elif (
314- tree .exists ("main.xml" , mobase .IFileTree .FILE )
315- or tree .exists ("add.xml" , mobase .IFileTree .FILE )
316- or tree .exists ("supermod.xml" , mobase .IFileTree .FILE )
317- ):
318- if not hasDisallowedPath :
277+ if not hasDisallowedPath :
278+ if (
279+ tree .exists ("mod.txt" , mobase .IFileTree .FILE )
280+ and not hasFolderListSubfolder
281+ ):
282+ self .addModDetectionCandidate (
283+ tree ,
284+ sanitizeFolderName (tree .name ()),
285+ "BLT" ,
286+ "mods/" + sanitizedName + "/" ,
287+ )
288+ return True
289+ elif tree .exists ("main.xml" , mobase .IFileTree .FILE ) and tree .exists (
290+ "levels" , mobase .IFileTree .DIRECTORY
291+ ):
319292 self .addModDetectionCandidate (
320293 tree ,
321- sanitize_folder_name (tree .name ()),
322- "Mod Override Folder with main.xml/add.xml " ,
323- "assets/mod_overrides/FOLDERNAME /" ,
294+ sanitizeFolderName (tree .name ()),
295+ "Map Core " ,
296+ "maps/" + sanitizedName + " /" ,
324297 )
325298 return True
326- elif tree .exists ("mod_overrides" , mobase .IFileTree .DIRECTORY ):
327- sourcetree = tree .find ("mod_overrides" , mobase .IFileTree .DIRECTORY )
328- if isinstance (sourcetree , mobase .IFileTree ):
299+ elif (
300+ tree .exists ("main.xml" , mobase .IFileTree .FILE )
301+ or tree .exists ("add.xml" , mobase .IFileTree .FILE )
302+ or tree .exists ("supermod.xml" , mobase .IFileTree .FILE )
303+ ):
329304 self .addModDetectionCandidate (
330- sourcetree ,
331- sanitize_folder_name ( sourcetree .name ()),
332- "Mod Override Folder " ,
333- "assets/mod_overrides/FOLDERNAME /" ,
305+ tree ,
306+ sanitizeFolderName ( tree .name ()),
307+ "SuperBLT " ,
308+ "assets/mod_overrides/" + sanitizedName + " /" ,
334309 )
335310 return True
336- elif not hasDisallowedPath :
337- for validFolder in self .folderList :
338- if tree .exists (validFolder , mobase .IFileTree .DIRECTORY ):
339- self .addModDetectionCandidate (
340- tree ,
341- sanitize_folder_name (tree .name ()),
342- "Fallback Mod Override Folder " ,
343- "assets/mod_overrides/FOLDERNAME /" ,
344- )
345- return True
311+ else :
312+ for validFolder in self .folderList :
313+ if tree .exists (validFolder , mobase .IFileTree .DIRECTORY ):
314+ self .addModDetectionCandidate (
315+ tree ,
316+ sanitizeFolderName (tree .name ()),
317+ "Override " ,
318+ "assets/mod_overrides/" + sanitizedName + " /" ,
319+ )
320+ return True
346321 return False
347322
348- def walk_entry (self , path : str , entry : mobase .FileTreeEntry ):
323+ def walkEntry (self , path : str , entry : mobase .FileTreeEntry ):
349324 if entry .isDir ():
350325 if isinstance (entry , mobase .IFileTree ):
351326 self .collectModCandidates (entry )
@@ -355,7 +330,7 @@ def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree | None:
355330 self .modDetectionCandidates = []
356331 newtree = filetree .createOrphanTree ("Fixed Tree" )
357332
358- filetree .walk (self .walk_entry , "/" )
333+ filetree .walk (self .walkEntry , "/" )
359334
360335 if len (self .modDetectionCandidates ) == 1 :
361336 selectedIndexes = {0 }
@@ -366,10 +341,6 @@ def fix(self, filetree: mobase.IFileTree) -> mobase.IFileTree | None:
366341
367342 for index in selectedIndexes :
368343 candidate = self .modDetectionCandidates [index ]
369- candidate ["destination" ] = candidate ["destination" ].replace (
370- "FOLDERNAME" ,
371- candidate ["name" ],
372- )
373344 if isinstance (candidate ["tree" ], mobase .IFileTree ):
374345 print (
375346 f"Installing Mod: { candidate ['name' ]} to { candidate ['destination' ]} "
@@ -404,7 +375,7 @@ def init(self, organizer: mobase.IOrganizer) -> bool:
404375 self .dataChecker = Payday1ModDataChecker (organizer )
405376 self ._register_feature (self .dataChecker )
406377 self ._register_feature (Payday1ModDataContent ())
407- organizer .modList ().onModStateChanged (self .dll_copy )
378+ organizer .modList ().onModStateChanged (self .dllCopy )
408379 return True
409380
410381 def executables (self ):
@@ -415,7 +386,7 @@ def executables(self):
415386 )
416387 ]
417388
418- def dll_copy (self , mods : dict [str , mobase .ModState ]):
389+ def dllCopy (self , mods : dict [str , mobase .ModState ]):
419390 game_path = self .dataDirectory ().absolutePath () + "/"
420391
421392 for key , value in mods .items ():
0 commit comments