diff --git a/launcher/modManager/cmodmanager.cpp b/launcher/modManager/cmodmanager.cpp index 23a8fe061..5766287ad 100644 --- a/launcher/modManager/cmodmanager.cpp +++ b/launcher/modManager/cmodmanager.cpp @@ -22,15 +22,15 @@ namespace { -QString detectModArchive(QString path, QString modName) +QString detectModArchive(QString path, QString modName, std::vector & filesToExtract) { - auto files = ZipArchive::listFiles(qstringToPath(path)); + filesToExtract = ZipArchive::listFiles(qstringToPath(path)); QString modDirName; for(int folderLevel : {0, 1}) //search in subfolder if there is no mod.json in the root { - for(auto file : files) + for(auto file : filesToExtract) { QString filename = QString::fromUtf8(file.c_str()); modDirName = filename.section('/', 0, folderLevel); @@ -275,11 +275,12 @@ bool CModManager::doInstallMod(QString modname, QString archivePath) if(localMods.contains(modname)) return addError(modname, "Mod with such name is already installed"); - QString modDirName = ::detectModArchive(archivePath, modname); + std::vector filesToExtract; + QString modDirName = ::detectModArchive(archivePath, modname, filesToExtract); if(!modDirName.size()) return addError(modname, "Mod archive is invalid or corrupted"); - if(!ZipArchive::extract(qstringToPath(archivePath), qstringToPath(destDir))) + if(!ZipArchive::extract(qstringToPath(archivePath), qstringToPath(destDir), filesToExtract)) { removeModDir(destDir + modDirName); return addError(modname, "Failed to extract mod data");