Fix directory subpart classification

The parallel primitive directory and subfile arrays had mismatched entries, causing parts/s/ files to receive a false subfile flag. Pair each directory path with its flag so directory subparts follow the same mesh loading path as archived subparts.
This commit is contained in:
Leonardo Zide committed 2026-10-21 22:49:11 -07:00
1 parent 1182f883e7
commit 069b3b60ab
1 file changed
+8 -5
+8 -5
View File
@@ -840,18 +840,22 @@ bool lcPiecesLibrary::OpenDirectory(const QDir& LibraryDir, bool ShowProgress)
mHasUnofficial = !FileLists[static_cast<int>(lcLibraryFolderType::Unofficial)].isEmpty();
ReadDirectoryDescriptions(FileLists, ShowProgress);
constexpr std::pair<const char*, bool> PrimitiveDirectories[] =
{
{ "p/", false },
{ "parts/s/", true }
};
for (unsigned int BaseFolderIdx = 0; BaseFolderIdx < LC_ARRAY_COUNT(BaseFolders); BaseFolderIdx++)
{
std::unique_ptr<lcLibrarySource> Source(new lcLibrarySource);
Source->Type = lcLibrarySourceType::Library;
const char* PrimitiveDirectories[] = { "p/", "parts/s/" };
bool SubFileDirectories[] = { false, false, true };
QDir BaseDir(LibraryDir.absoluteFilePath(QLatin1String(BaseFolders[BaseFolderIdx])));
for (int DirectoryIdx = 0; DirectoryIdx < (int)(LC_ARRAY_COUNT(PrimitiveDirectories)); DirectoryIdx++)
for (const auto& [Path, SubFile] : PrimitiveDirectories)
{
QString ChildPath = BaseDir.absoluteFilePath(QLatin1String(PrimitiveDirectories[DirectoryIdx]));
QString ChildPath = BaseDir.absoluteFilePath(QLatin1String(Path));
QDirIterator DirIterator(ChildPath, QStringList() << QLatin1String("*.dat"), QDir::Files | QDir::Hidden | QDir::Readable, QDirIterator::Subdirectories);
while (DirIterator.hasNext())
@@ -870,7 +874,6 @@ bool lcPiecesLibrary::OpenDirectory(const QDir& LibraryDir, bool ShowProgress)
if (BaseFolderIdx == static_cast<int>(lcLibraryFolderType::Unofficial))
mHasUnofficial = true;
const bool SubFile = SubFileDirectories[DirectoryIdx];
Source->Primitives[Name] = std::make_unique<lcLibraryPrimitive>(std::move(FileName), RelativeName, lcZipFileType::Count, 0, !SubFile && IsStudPrimitive(Name.c_str()), IsStudStylePrimitive(Name.c_str()), SubFile);
}
}