[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