57 lines
2.0 KiB
C++
57 lines
2.0 KiB
C++
#include "ProjectBrowserModelSupport.h"
|
|
|
|
namespace XCEngine::UI::Editor::App {
|
|
|
|
using namespace ProjectBrowserModelSupport;
|
|
|
|
void ProjectBrowserModel::RefreshAssetList() {
|
|
EnsureValidCurrentFolder();
|
|
|
|
m_assetEntries.clear();
|
|
const FolderEntry* currentFolder = FindFolderEntry(m_currentFolderId);
|
|
if (currentFolder == nullptr) {
|
|
return;
|
|
}
|
|
|
|
std::vector<std::filesystem::directory_entry> entries = {};
|
|
std::error_code errorCode = {};
|
|
const std::filesystem::directory_iterator end = {};
|
|
for (std::filesystem::directory_iterator iterator(currentFolder->absolutePath, errorCode);
|
|
!errorCode && iterator != end;
|
|
iterator.increment(errorCode)) {
|
|
if (!iterator->exists(errorCode) || IsMetaFile(iterator->path())) {
|
|
continue;
|
|
}
|
|
if (!iterator->is_directory(errorCode) && !iterator->is_regular_file(errorCode)) {
|
|
continue;
|
|
}
|
|
|
|
entries.push_back(*iterator);
|
|
}
|
|
|
|
std::sort(
|
|
entries.begin(),
|
|
entries.end(),
|
|
[](const std::filesystem::directory_entry& lhs, const std::filesystem::directory_entry& rhs) {
|
|
const bool lhsDirectory = lhs.is_directory();
|
|
const bool rhsDirectory = rhs.is_directory();
|
|
if (lhsDirectory != rhsDirectory) {
|
|
return lhsDirectory && !rhsDirectory;
|
|
}
|
|
|
|
return ToLowerCopy(PathToUtf8String(lhs.path().filename())) <
|
|
ToLowerCopy(PathToUtf8String(rhs.path().filename()));
|
|
});
|
|
|
|
for (const std::filesystem::directory_entry& entry : entries) {
|
|
AssetEntry assetEntry = {};
|
|
assetEntry.itemId = BuildRelativeItemId(entry.path(), m_assetsRootPath);
|
|
assetEntry.absolutePath = entry.path();
|
|
assetEntry.displayName = BuildAssetDisplayName(entry.path(), entry.is_directory());
|
|
assetEntry.directory = entry.is_directory();
|
|
m_assetEntries.push_back(std::move(assetEntry));
|
|
}
|
|
}
|
|
|
|
} // namespace XCEngine::UI::Editor::App
|