fix: import modrinth packs with weird overrides structure

Probably because of Packwiz limitations, or an space optimizer that did
this :)
This commit is contained in:
flow 2022-05-16 10:50:46 -03:00
parent 62e099ace5
commit 82760f4b91
No known key found for this signature in database
GPG Key ID: 8D0F221F0A59F469

View File

@ -297,20 +297,40 @@ nonstd::optional<QStringList> MMCZip::extractSubDir(QuaZip *zip, const QString &
{ {
continue; continue;
} }
name.remove(0, subdir.size()); name.remove(0, subdir.size());
QString absFilePath = directory.absoluteFilePath(name); auto original_name = name;
// Fix weird "folders with a single file get squashed" thing
QString path;
if(name.contains('/') && !name.endsWith('/')){
path = name.section('/', 0, -2) + "/";
FS::ensureFolderPathExists(path);
name = name.split('/').last();
}
QString absFilePath;
if(name.isEmpty()) if(name.isEmpty())
{ {
absFilePath += "/"; absFilePath = directory.absoluteFilePath(name) + "/";
} }
else
{
absFilePath = directory.absoluteFilePath(path + name);
}
if (!JlCompress::extractFile(zip, "", absFilePath)) if (!JlCompress::extractFile(zip, "", absFilePath))
{ {
qWarning() << "Failed to extract file" << name << "to" << absFilePath; qWarning() << "Failed to extract file" << original_name << "to" << absFilePath;
JlCompress::removeFile(extracted); JlCompress::removeFile(extracted);
return nonstd::nullopt; return nonstd::nullopt;
} }
extracted.append(absFilePath); extracted.append(absFilePath);
qDebug() << "Extracted file" << name; QFile::setPermissions(absFilePath, QFileDevice::Permission::ReadUser | QFileDevice::Permission::WriteUser | QFileDevice::Permission::ExeUser);
qDebug() << "Extracted file" << name << "to" << absFilePath;
} while (zip->goToNextFile()); } while (zip->goToNextFile());
return extracted; return extracted;
} }