PyAPI: add preferences.filepaths.extension_repos.new/remove methods
Provide convenient access to adding/removing repositories, useful for testing.
This commit is contained in:
@@ -81,6 +81,7 @@ void BKE_preferences_asset_library_default_add(struct UserDef *userdef) ATTR_NON
|
||||
|
||||
bUserExtensionRepo *BKE_preferences_extension_repo_add(UserDef *userdef,
|
||||
const char *name,
|
||||
const char *module,
|
||||
const char *dirpath);
|
||||
void BKE_preferences_extension_repo_remove(UserDef *userdef, bUserExtensionRepo *repo);
|
||||
|
||||
|
||||
@@ -158,6 +158,7 @@ static size_t strncpy_py_module(char *dst, const char *src, const size_t dst_max
|
||||
|
||||
bUserExtensionRepo *BKE_preferences_extension_repo_add(UserDef *userdef,
|
||||
const char *name,
|
||||
const char *module,
|
||||
const char *dirpath)
|
||||
{
|
||||
bUserExtensionRepo *repo = DNA_struct_default_alloc(bUserExtensionRepo);
|
||||
@@ -167,7 +168,7 @@ bUserExtensionRepo *BKE_preferences_extension_repo_add(UserDef *userdef,
|
||||
BKE_preferences_extension_repo_name_set(userdef, repo, name);
|
||||
|
||||
/* Set the unique module-name. */
|
||||
BKE_preferences_extension_repo_module_set(userdef, repo, name);
|
||||
BKE_preferences_extension_repo_module_set(userdef, repo, module);
|
||||
|
||||
/* Set the directory. */
|
||||
STRNCPY(repo->dirpath, dirpath);
|
||||
|
||||
@@ -251,7 +251,8 @@ static int preferences_extension_repo_add_exec(bContext *C, wmOperator *op)
|
||||
|
||||
BLI_path_split_file_part(directory, name, sizeof(name));
|
||||
|
||||
bUserExtensionRepo *new_repo = BKE_preferences_extension_repo_add(&U, name, directory);
|
||||
const char *module = name;
|
||||
bUserExtensionRepo *new_repo = BKE_preferences_extension_repo_add(&U, name, module, directory);
|
||||
|
||||
/* Activate new repository in the UI for further setup. */
|
||||
U.active_extension_repo = BLI_findindex(&U.extension_repos, new_repo);
|
||||
|
||||
@@ -423,6 +423,42 @@ static void rna_userdef_script_directory_remove(ReportList *reports, PointerRNA
|
||||
USERDEF_TAG_DIRTY;
|
||||
}
|
||||
|
||||
static bUserExtensionRepo *rna_userdef_extension_repo_new(const char *name,
|
||||
const char *module,
|
||||
const char *directory,
|
||||
const char *remote_path)
|
||||
{
|
||||
Main *bmain = G.main;
|
||||
BKE_callback_exec_null(bmain, BKE_CB_EVT_EXTENSION_REPOS_UPDATE_PRE);
|
||||
|
||||
bUserExtensionRepo *repo = BKE_preferences_extension_repo_add(
|
||||
&U, name ? name : "", module ? module : "", directory ? directory : "");
|
||||
if (remote_path) {
|
||||
STRNCPY(repo->remote_path, remote_path);
|
||||
}
|
||||
|
||||
BKE_callback_exec_null(bmain, BKE_CB_EVT_EXTENSION_REPOS_UPDATE_POST);
|
||||
USERDEF_TAG_DIRTY;
|
||||
return repo;
|
||||
}
|
||||
|
||||
static void rna_userdef_extension_repo_remove(ReportList *reports, PointerRNA *ptr)
|
||||
{
|
||||
Main *bmain = G.main;
|
||||
BKE_callback_exec_null(bmain, BKE_CB_EVT_EXTENSION_REPOS_UPDATE_PRE);
|
||||
|
||||
bUserExtensionRepo *repo = static_cast<bUserExtensionRepo *>(ptr->data);
|
||||
if (BLI_findindex(&U.extension_repos, repo) == -1) {
|
||||
BKE_report(reports, RPT_ERROR, "Extension repository not found");
|
||||
return;
|
||||
}
|
||||
BKE_preferences_extension_repo_remove(&U, repo);
|
||||
RNA_POINTER_INVALIDATE(ptr);
|
||||
|
||||
BKE_callback_exec_null(bmain, BKE_CB_EVT_EXTENSION_REPOS_UPDATE_POST);
|
||||
USERDEF_TAG_DIRTY;
|
||||
}
|
||||
|
||||
static void rna_userdef_load_ui_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
|
||||
{
|
||||
UserDef *userdef = (UserDef *)ptr->data;
|
||||
@@ -6534,6 +6570,40 @@ static void rna_def_userdef_script_directory_collection(BlenderRNA *brna, Proper
|
||||
RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, ParameterFlag(0));
|
||||
}
|
||||
|
||||
static void rna_def_userdef_extension_repos_collection(BlenderRNA *brna, PropertyRNA *cprop)
|
||||
{
|
||||
StructRNA *srna;
|
||||
FunctionRNA *func;
|
||||
PropertyRNA *parm;
|
||||
|
||||
RNA_def_property_srna(cprop, "UserExtensionRepoCollection");
|
||||
srna = RNA_def_struct(brna, "UserExtensionRepoCollection", nullptr);
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "User Extension Repos", "Collection of user extension repos");
|
||||
|
||||
func = RNA_def_function(srna, "new", "rna_userdef_extension_repo_new");
|
||||
RNA_def_function_flag(func, FUNC_NO_SELF);
|
||||
RNA_def_function_ui_description(func, "Add a new repository");
|
||||
|
||||
RNA_def_string(func, "name", nullptr, sizeof(bUserExtensionRepo::name), "Name", "");
|
||||
RNA_def_string(func, "module", nullptr, sizeof(bUserExtensionRepo::module), "Module", "");
|
||||
RNA_def_string(
|
||||
func, "directory", nullptr, sizeof(bUserExtensionRepo::dirpath), "Directories", "");
|
||||
RNA_def_string(
|
||||
func, "remote_path", nullptr, sizeof(bUserExtensionRepo::remote_path), "Remote Path", "");
|
||||
|
||||
/* return type */
|
||||
parm = RNA_def_pointer(func, "repo", "UserExtensionRepo", "", "Newly added repo");
|
||||
RNA_def_function_return(func, parm);
|
||||
|
||||
func = RNA_def_function(srna, "remove", "rna_userdef_extension_repo_remove");
|
||||
RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_REPORTS);
|
||||
RNA_def_function_ui_description(func, "Remove repos");
|
||||
parm = RNA_def_pointer(func, "repo", "UserExtensionRepo", "", "Repo to remove");
|
||||
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
|
||||
RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, ParameterFlag(0));
|
||||
}
|
||||
|
||||
static void rna_def_userdef_filepaths(BlenderRNA *brna)
|
||||
{
|
||||
PropertyRNA *prop;
|
||||
@@ -6751,6 +6821,7 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
|
||||
prop = RNA_def_property(srna, "extension_repos", PROP_COLLECTION, PROP_NONE);
|
||||
RNA_def_property_struct_type(prop, "UserExtensionRepo");
|
||||
RNA_def_property_ui_text(prop, "Extension Repos", "");
|
||||
rna_def_userdef_extension_repos_collection(brna, prop);
|
||||
|
||||
prop = RNA_def_property(srna, "active_extension_repo", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_ui_text(prop,
|
||||
|
||||
Reference in New Issue
Block a user