diff options
Diffstat (limited to 'source/blender/editors/asset')
-rw-r--r-- | source/blender/editors/asset/intern/asset_indexer.cc | 36 |
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, |