Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/asset/intern/asset_indexer.cc')
-rw-r--r--source/blender/editors/asset/intern/asset_indexer.cc36
1 files changed, 34 insertions, 2 deletions
diff --git a/source/blender/editors/asset/intern/asset_indexer.cc b/source/blender/editors/asset/intern/asset_indexer.cc
index a9c6e3798c9..336ccff900c 100644
--- a/source/blender/editors/asset/intern/asset_indexer.cc
+++ b/source/blender/editors/asset/intern/asset_indexer.cc
@@ -39,6 +39,7 @@
#include "BKE_appdir.h"
#include "BKE_asset.h"
#include "BKE_asset_catalog.hh"
+#include "BKE_idprop.hh"
#include "BKE_preferences.h"
#include "CLG_log.h"
@@ -49,6 +50,7 @@ namespace blender::ed::asset::index {
using namespace blender::io::serialize;
using namespace blender::bke;
+using namespace blender::bke::idprop;
/**
* \file asset_indexer.cc
@@ -69,12 +71,13 @@ using namespace blender::bke;
* "catalog_name": "<catalog_name>",
* "description": "<description>",
* "author": "<author>",
- * "tags": ["<tag>"]
+ * "tags": ["<tag>"],
+ * "properties": [..]
* }]
* }
* \endcode
*
- * NOTE: entries, author, description and tags are optional attributes.
+ * NOTE: entries, author, description, tags and properties are optional attributes.
*
* NOTE: File browser uses name and idcode separate. Inside the index they are joined together like
* #ID.name.
@@ -88,6 +91,7 @@ constexpr StringRef ATTRIBUTE_ENTRIES_CATALOG_NAME("catalog_name");
constexpr StringRef ATTRIBUTE_ENTRIES_DESCRIPTION("description");
constexpr StringRef ATTRIBUTE_ENTRIES_AUTHOR("author");
constexpr StringRef ATTRIBUTE_ENTRIES_TAGS("tags");
+constexpr StringRef ATTRIBUTE_ENTRIES_PROPERTIES("properties");
/** Abstract class for #BlendFile and #AssetIndexFile. */
class AbstractFile {
@@ -216,6 +220,20 @@ struct AssetEntryReader {
BKE_asset_metadata_tag_add(asset_data, tag_name.c_str());
}
}
+
+ void add_properties_to_meta_data(AssetMetaData *asset_data) const
+ {
+ BLI_assert(asset_data->properties == nullptr);
+ const DictionaryValue::LookupValue *value_ptr = lookup.lookup_ptr(
+ ATTRIBUTE_ENTRIES_PROPERTIES);
+ if (value_ptr == nullptr) {
+ return;
+ }
+
+ const Value &value = *(value_ptr->get());
+ IDProperty *properties = convert_from_serialize_value(value);
+ asset_data->properties = properties;
+ }
};
struct AssetEntryWriter {
@@ -274,6 +292,15 @@ struct AssetEntryWriter {
tag_items.append_as(new StringValue(tag->name));
}
}
+
+ void add_properties(const IDProperty *properties)
+ {
+ std::unique_ptr<Value> value = convert_to_serialize_values(properties);
+ if (value == nullptr) {
+ return;
+ }
+ attributes.append_as(std::pair(ATTRIBUTE_ENTRIES_PROPERTIES, value.release()));
+ }
};
static void init_value_from_file_indexer_entry(AssetEntryWriter &result,
@@ -298,6 +325,10 @@ static void init_value_from_file_indexer_entry(AssetEntryWriter &result,
result.add_tags(&asset_data.tags);
}
+ if (asset_data.properties != nullptr) {
+ result.add_properties(asset_data.properties);
+ }
+
/* TODO: asset_data.IDProperties */
}
@@ -363,6 +394,7 @@ static void init_indexer_entry_from_value(FileIndexerEntry &indexer_entry,
asset_data->catalog_id = entry.get_catalog_id();
entry.add_tags_to_meta_data(asset_data);
+ entry.add_properties_to_meta_data(asset_data);
}
static int init_indexer_entries_from_value(FileIndexerEntries &indexer_entries,