diff options
Diffstat (limited to 'core/src/Model/Assets.cpp')
-rw-r--r-- | core/src/Model/Assets.cpp | 116 |
1 files changed, 67 insertions, 49 deletions
diff --git a/core/src/Model/Assets.cpp b/core/src/Model/Assets.cpp index e4eee54..a1e9730 100644 --- a/core/src/Model/Assets.cpp +++ b/core/src/Model/Assets.cpp @@ -4,54 +4,16 @@ #include <fstream> #include <utility> +using namespace std::literals::string_view_literals; namespace fs = std::filesystem; Asset::Asset() { } -std::unique_ptr<Asset> AssetCategory::CreateEmptyUnique(const SavedAsset& diskForm) const -{ - return std::unique_ptr<Asset>(CreateEmpty(diskForm)); -} - -std::unique_ptr<Asset> AssetCategory::LoadUnique(const SavedAsset& diskForm) const -{ - return std::unique_ptr<Asset>(Load(diskForm)); -} - -void AssetCategory::DiscoverFilesByExtension(const std::function<void(SavedAsset)>& callback, const std::filesystem::path& containerDir, std::string_view extension) -{ - for (auto entry : fs::directory_iterator(containerDir)) { - if (!entry.is_regular_file()) continue; - - // If the caller provided an extension to match against, and it doesn't equal to current file extension, skip - if (!extension.empty() && - entry.path().extension() != extension) - { - continue; - } - - callback(SavedAsset{ - .Path = entry.path(), - .Name = entry.path().stem().string(), - }); - } -} - -void AssetCategory::DiscoverFilesByHeader(const std::function<void(SavedAsset)>& callback, const std::filesystem::__cxx11::path& containerDir, const std::function<bool(std::istream&)>& validater) -{ - // TODO -} - -AssetList::AssetList(const AssetCategory& loader) - : mLoader{ &loader } -{ -} - void AssetList::Reload() { - mLoader->DiscoverFiles([this](SavedAsset asset) -> void { + DiscoverFiles([this](SavedAsset asset) -> void { Create(std::move(asset)); }); } @@ -71,8 +33,12 @@ const SavedAsset& AssetList::Create(SavedAsset asset) auto [iter, DISCARD] = mAssets.insert(asset.Name, SavedAsset{}); auto& savedAsset = iter.value(); - mLoader->CreateEmpty(asset); savedAsset = std::move(asset); + if (savedAsset.Uuid.is_nil()) { + savedAsset.Uuid = uuids::uuid_random_generator{}(); + } + + SaveEmptyInstance(savedAsset); return savedAsset; } @@ -80,24 +46,51 @@ const SavedAsset& AssetList::Create(SavedAsset asset) std::unique_ptr<Asset> AssetList::CreateAndLoad(SavedAsset assetIn) { auto& savedAsset = Create(std::move(assetIn)); - auto asset = std::unique_ptr<Asset>(mLoader->CreateEmpty(savedAsset)); + auto asset = std::unique_ptr<Asset>(CreateEmptyInstance(savedAsset)); return asset; } -std::unique_ptr<Asset> AssetList::LoadFromDisk(std::string_view name) const +std::unique_ptr<Asset> AssetList::Load(std::string_view name) const { if (auto savedAsset = FindByName(name)) { - auto asset = mLoader->LoadUnique(*savedAsset); + auto asset = Load(*savedAsset); return asset; + } else { + return nullptr; } } -bool AssetList::Rename(std::string_view oldName, std::string_view newName) +std::unique_ptr<Asset> AssetList::Load(const SavedAsset& asset) const +{ + return std::unique_ptr<Asset>(LoadImpl(asset)); +} + +const SavedAsset* AssetList::Rename(std::string_view oldName, std::string_view newName) { + auto iter = mAssets.find(oldName); + if (iter == mAssets.end()) return nullptr; + + auto info = std::move(iter.value()); + info.Name = newName; + + auto [newIter, DISCARD] = mAssets.insert(newName, std::move(info)); + mAssets.erase(iter); + + return &newIter.value(); } bool AssetList::Remove(std::string_view name) { + auto iter = mAssets.find(name); + if (iter == mAssets.end()) { + return false; + } + auto& asset = iter.value(); + + fs::remove(RetrievePathFromAsset(asset)); + mAssets.erase(iter); + + return true; } int AssetList::GetCacheSizeLimit() const @@ -110,17 +103,42 @@ void AssetList::SetCacheSizeLimit(int limit) mCacheSizeLimit = limit; } -void AssetList::DrawBigIcons(DrawState& state) +void AssetList::DrawBigIcons(ListState& state) { // TODO } -void AssetList::DrawDetails(DrawState& state) +void AssetList::DrawDetails(ListState& state) { - mLoader->SetupDetailsTable("AssetDetailsTable"); + SetupDetailsTable("AssetDetailsTable"); for (auto& asset : mAssets) { - mLoader->DrawDetailsTableRow(asset); + DrawDetailsTableRow(asset); ImGui::TableNextRow(); } ImGui::EndTable(); } + +void AssetList::DiscoverFilesByExtension(const std::function<void(SavedAsset)>& callback, const fs::path& containerDir, std::string_view extension) const +{ + for (auto entry : fs::directory_iterator(containerDir)) { + if (!entry.is_regular_file()) continue; + + // If the caller provided an extension to match against, and it doesn't equal to current file extension, skip + if (!extension.empty() && + entry.path().extension() != extension) + { + continue; + } + + callback(SavedAsset{ + .Name = RetrieveNameFromFile(entry.path()), + .Uuid = RetrieveUuidFromFile(entry.path()), + // TODO load payload + }); + } +} + +void AssetList::DiscoverFilesByHeader(const std::function<void(SavedAsset)>& callback, const fs::path& containerDir, const std::function<bool(std::istream&)>& validater) const +{ + // TODO +} |