From 069b3b60abc9f1e62554ffef522d1b8eed245d5c Mon Sep 17 00:00:00 2001 From: Leonardo Zide Date: Wed, 21 Oct 2026 22:49:11 -0700 Subject: [PATCH] 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. --- common/lc_library.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/common/lc_library.cpp b/common/lc_library.cpp index 7ecb90cf..8d7632ac 100644 --- a/common/lc_library.cpp +++ b/common/lc_library.cpp @@ -840,18 +840,22 @@ bool lcPiecesLibrary::OpenDirectory(const QDir& LibraryDir, bool ShowProgress) mHasUnofficial = !FileLists[static_cast(lcLibraryFolderType::Unofficial)].isEmpty(); ReadDirectoryDescriptions(FileLists, ShowProgress); + constexpr std::pair PrimitiveDirectories[] = + { + { "p/", false }, + { "parts/s/", true } + }; + for (unsigned int BaseFolderIdx = 0; BaseFolderIdx < LC_ARRAY_COUNT(BaseFolders); BaseFolderIdx++) { std::unique_ptr 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(lcLibraryFolderType::Unofficial)) mHasUnofficial = true; - const bool SubFile = SubFileDirectories[DirectoryIdx]; Source->Primitives[Name] = std::make_unique(std::move(FileName), RelativeName, lcZipFileType::Count, 0, !SubFile && IsStudPrimitive(Name.c_str()), IsStudStylePrimitive(Name.c_str()), SubFile); } }