Steps to reproduce were:
- Open a .blend file that is located inside of an asset library and
contains assets.
- Save and close the file.
- Open a new file (Ctrl+N -> General).
- Open asset browser and load the asset library from above.
- If the assets from the file above still show up, press refresh button.
- -> Assets from the file above don't appear.
Likely fixes the underlying issue for T102610. A followup will be needed
to correct the empty asset index files written because of this bug.
We're in the process of moving responsibilities from the file/asset
browser backend to the asset system. 1efc94bb2f introduces a new
representation for asset, which would own the asset metadata now instead
of the file data.
Since the file-list code still does the loading of asset libraries,
ownership of the asset metadata has to be transferred to the asset
system. However, the asset indexing still requires it to be available,
so it can update the index with latest data. So transfer the ownership,
but still keep a non-owning pointer set.
Differential Revision: https://developer.blender.org/D16665
Reviewed by: Bastien Montagne
74 lines
2.4 KiB
C++
74 lines
2.4 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup bke
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "BLI_compiler_attrs.h"
|
|
#include "BLI_utildefines.h"
|
|
|
|
#include "DNA_asset_types.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct AssetLibraryReference;
|
|
struct AssetMetaData;
|
|
struct BlendDataReader;
|
|
struct BlendWriter;
|
|
struct ID;
|
|
struct IDProperty;
|
|
struct PreviewImage;
|
|
|
|
typedef void (*PreSaveFn)(void *asset_ptr, struct AssetMetaData *asset_data);
|
|
|
|
typedef struct AssetTypeInfo {
|
|
/**
|
|
* For local assets (assets in the current .blend file), a callback to execute before the file is
|
|
* saved.
|
|
*/
|
|
PreSaveFn pre_save_fn;
|
|
} AssetTypeInfo;
|
|
|
|
struct AssetMetaData *BKE_asset_metadata_create(void);
|
|
void BKE_asset_metadata_free(struct AssetMetaData **asset_data);
|
|
|
|
struct AssetTagEnsureResult {
|
|
struct AssetTag *tag;
|
|
/* Set to false if a tag of this name was already present. */
|
|
bool is_new;
|
|
};
|
|
|
|
struct AssetTag *BKE_asset_metadata_tag_add(struct AssetMetaData *asset_data, const char *name);
|
|
/**
|
|
* Make sure there is a tag with name \a name, create one if needed.
|
|
*/
|
|
struct AssetTagEnsureResult BKE_asset_metadata_tag_ensure(struct AssetMetaData *asset_data,
|
|
const char *name);
|
|
void BKE_asset_metadata_tag_remove(struct AssetMetaData *asset_data, struct AssetTag *tag);
|
|
|
|
/** Clean up the catalog ID (white-spaces removed, length reduced, etc.) and assign it. */
|
|
void BKE_asset_metadata_catalog_id_clear(struct AssetMetaData *asset_data);
|
|
void BKE_asset_metadata_catalog_id_set(struct AssetMetaData *asset_data,
|
|
bUUID catalog_id,
|
|
const char *catalog_simple_name);
|
|
|
|
void BKE_asset_library_reference_init_default(struct AssetLibraryReference *library_ref);
|
|
|
|
void BKE_asset_metadata_idprop_ensure(struct AssetMetaData *asset_data, struct IDProperty *prop);
|
|
struct IDProperty *BKE_asset_metadata_idprop_find(const struct AssetMetaData *asset_data,
|
|
const char *name) ATTR_WARN_UNUSED_RESULT;
|
|
|
|
struct PreviewImage *BKE_asset_metadata_preview_get_from_id(const struct AssetMetaData *asset_data,
|
|
const struct ID *owner_id);
|
|
|
|
void BKE_asset_metadata_write(struct BlendWriter *writer, struct AssetMetaData *asset_data);
|
|
void BKE_asset_metadata_read(struct BlendDataReader *reader, struct AssetMetaData *asset_data);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|