[Bf-blender-cvs] [02c7c2e2493] asset-browser: Ensure custom asset repository names are unique
Julian Eisel
noreply at git.blender.org
Mon Oct 26 15:03:24 CET 2020
Commit: 02c7c2e2493c44f6c5ee04aada68219a9ab730ee
Author: Julian Eisel
Date: Mon Oct 26 15:01:42 2020 +0100
Branches: asset-browser
https://developer.blender.org/rB02c7c2e2493c44f6c5ee04aada68219a9ab730ee
Ensure custom asset repository names are unique
These names are used as identifiers for the UI, we have to ensure their
uniqueness.
===================================================================
M source/blender/blenkernel/BKE_preferences.h
M source/blender/blenkernel/intern/preferences.c
M source/blender/makesrna/intern/rna_userdef.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_preferences.h b/source/blender/blenkernel/BKE_preferences.h
index 26df568f5f2..116c93c083f 100644
--- a/source/blender/blenkernel/BKE_preferences.h
+++ b/source/blender/blenkernel/BKE_preferences.h
@@ -35,6 +35,10 @@ struct bUserAssetRepository *BKE_preferences_asset_repository_add(struct UserDef
const char *name,
const char *path)
ATTR_NONNULL(1);
+void BKE_preferences_asset_repository_name_set(struct UserDef *userdef,
+ struct bUserAssetRepository *repository,
+ const char *name) ATTR_NONNULL();
+
void BKE_preferences_asset_repository_remove(struct UserDef *userdef,
struct bUserAssetRepository *repository)
ATTR_NONNULL();
diff --git a/source/blender/blenkernel/intern/preferences.c b/source/blender/blenkernel/intern/preferences.c
index 2faca033e2c..0e9f514de88 100644
--- a/source/blender/blenkernel/intern/preferences.c
+++ b/source/blender/blenkernel/intern/preferences.c
@@ -27,6 +27,8 @@
#include "BLI_listbase.h"
#include "BLI_path_util.h"
#include "BLI_string.h"
+#include "BLI_string_utf8.h"
+#include "BLI_string_utils.h"
#include "BKE_appdir.h"
#include "BKE_preferences.h"
@@ -50,7 +52,7 @@ bUserAssetRepository *BKE_preferences_asset_repository_add(UserDef *userdef,
BLI_addtail(&userdef->asset_repositories, repository);
if (name) {
- BLI_strncpy(repository->name, IFACE_("Default"), sizeof(repository->name));
+ BKE_preferences_asset_repository_name_set(userdef, repository, name);
}
if (path) {
BLI_strncpy(repository->path, path, sizeof(repository->path));
@@ -59,6 +61,19 @@ bUserAssetRepository *BKE_preferences_asset_repository_add(UserDef *userdef,
return repository;
}
+void BKE_preferences_asset_repository_name_set(UserDef *userdef,
+ bUserAssetRepository *repository,
+ const char *name)
+{
+ BLI_strncpy_utf8(repository->name, name, sizeof(repository->name));
+ BLI_uniquename(&userdef->asset_repositories,
+ repository,
+ name,
+ '.',
+ offsetof(bUserAssetRepository, name),
+ sizeof(repository->name));
+}
+
/**
* Unlink and free a repository preference member.
* \note Free's \a repository itself.
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index d2109a0fac0..aeaf9282218 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -184,6 +184,7 @@ static const EnumPropertyItem rna_enum_userdef_viewport_aa_items[] = {
# include "BKE_mesh_runtime.h"
# include "BKE_paint.h"
# include "BKE_pbvh.h"
+# include "BKE_preferences.h"
# include "BKE_screen.h"
# include "DEG_depsgraph.h"
@@ -334,6 +335,12 @@ static void rna_userdef_language_update(Main *UNUSED(bmain),
USERDEF_TAG_DIRTY;
}
+static void rna_userdef_asset_repository_name_set(PointerRNA *ptr, const char *value)
+{
+ bUserAssetRepository *repository = (bUserAssetRepository *)ptr->data;
+ BKE_preferences_asset_repository_name_set(&U, repository, value);
+}
+
static void rna_userdef_script_autoexec_update(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
@@ -5968,10 +5975,10 @@ static void rna_def_userdef_filepaths_asset_repository(BlenderRNA *brna)
"Asset Repository",
"Settings to define a reusable repository for Asset Browsers to use");
- /* TODO ensure unique name, they are used as identifiers. */
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(
prop, "Name", "Identifier (not necessarily unique) for the asset repository");
+ RNA_def_property_string_funcs(prop, NULL, NULL, "rna_userdef_asset_repository_name_set");
RNA_def_struct_name_property(srna, prop);
RNA_def_property_update(prop, 0, "rna_userdef_update");
More information about the Bf-blender-cvs
mailing list