From ecae996cc2001c4cdf05da21afdbd4efa56b7774 Mon Sep 17 00:00:00 2001 From: NeeEoo Date: Fri, 19 Apr 2024 19:37:57 +0200 Subject: [PATCH] Fix Zip Folder mods --- .../backend/assets/ModsFolderLibrary.hx | 2 +- .../funkin/backend/assets/ZipFolderLibrary.hx | 48 ++++++++++++------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/source/funkin/backend/assets/ModsFolderLibrary.hx b/source/funkin/backend/assets/ModsFolderLibrary.hx index 23fa0d43..be052548 100644 --- a/source/funkin/backend/assets/ModsFolderLibrary.hx +++ b/source/funkin/backend/assets/ModsFolderLibrary.hx @@ -89,7 +89,7 @@ class ModsFolderLibrary extends AssetLibrary implements IModsAssetLibrary { return __getFiles(folder, false); public function __getFiles(folder:String, folders:Bool = false) { - if (!folder.endsWith("/")) folder = folder + "/"; + if (!folder.endsWith("/")) folder += "/"; if (!__parseAsset(folder)) return []; var path = getAssetPath(); try { diff --git a/source/funkin/backend/assets/ZipFolderLibrary.hx b/source/funkin/backend/assets/ZipFolderLibrary.hx index 805d05fc..f213403e 100644 --- a/source/funkin/backend/assets/ZipFolderLibrary.hx +++ b/source/funkin/backend/assets/ZipFolderLibrary.hx @@ -31,6 +31,8 @@ class ZipFolderLibrary extends AssetLibrary implements IModsAssetLibrary { public var zip:SysZip; public var assets:Map = []; + public var lowerCaseAssets:Map = []; + public var nameMap:Map = []; public function new(zipPath:String, libName:String, ?modName:String) { this.zipPath = zipPath; @@ -43,8 +45,10 @@ class ZipFolderLibrary extends AssetLibrary implements IModsAssetLibrary { zip = SysZip.openFromFile(zipPath); zip.read(); - for(entry in zip.entries) - assets[entry.fileName.toLowerCase()] = entry; + for(entry in zip.entries) { + lowerCaseAssets[entry.fileName.toLowerCase()] = assets[entry.fileName.toLowerCase()] = assets[entry.fileName] = entry; + nameMap.set(entry.fileName.toLowerCase(), entry.fileName); + } super(); } @@ -92,6 +96,8 @@ class ZipFolderLibrary extends AssetLibrary implements IModsAssetLibrary { } _parsedAsset = _parsedAsset.toLowerCase(); + if(nameMap.exists(_parsedAsset)) + _parsedAsset = nameMap.get(_parsedAsset); return true; } @@ -111,35 +117,45 @@ class ZipFolderLibrary extends AssetLibrary implements IModsAssetLibrary { return '[ZIP]$zipPath/$_parsedAsset'; } + // TODO: rewrite this to 1 function, like ModsFolderLibrary public function getFiles(folder:String):Array { - var content:Array = []; - - if (!folder.endsWith("/")) folder = folder + "/"; + if (!folder.endsWith("/")) folder += "/"; if (!__parseAsset(folder)) return []; + var content:Array = []; + + var checkPath = _parsedAsset.toLowerCase(); + @:privateAccess - for(k=>e in assets) { - if (k.toLowerCase().startsWith(_parsedAsset)) { + for(k=>e in lowerCaseAssets) { + if (k.toLowerCase().startsWith(checkPath)) { + if(nameMap.exists(k)) + k = nameMap.get(k); var fileName = k.substr(_parsedAsset.length); - if (!fileName.contains("/")) - content.push(fileName); + if (!fileName.contains("/") && fileName.length > 0) + content.pushOnce(fileName); } } return content; } public function getFolders(folder:String):Array { - var content:Array = []; - - if (!folder.endsWith("/")) folder = folder + "/"; + if (!folder.endsWith("/")) folder += "/"; if (!__parseAsset(folder)) return []; + var content:Array = []; + + var checkPath = _parsedAsset.toLowerCase(); + @:privateAccess - for(k=>e in assets) { - if (k.toLowerCase().startsWith(_parsedAsset)) { + for(k=>e in lowerCaseAssets) { + if (k.toLowerCase().startsWith(checkPath)) { + if(nameMap.exists(k)) + k = nameMap.get(k); var fileName = k.substr(_parsedAsset.length); - if (fileName.contains("/")) { - var s = fileName.split("/")[0]; + var index = fileName.indexOf("/"); + if (index != -1 && fileName.length > 0) { + var s = fileName.substr(0, index); content.pushOnce(s); } }