aboutsummaryrefslogtreecommitdiff
path: root/core/src/Model/Assets.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/Model/Assets.cpp')
-rw-r--r--core/src/Model/Assets.cpp116
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
+}