Blender V5.0
preferences.cc File Reference
#include <cstring>
#include "BLI_fileops.h"
#include "BLI_listbase.h"
#include "BLI_path_utils.hh"
#include "BLI_string.h"
#include "BLI_string_utf8.h"
#include "BLI_string_utils.hh"
#include "BKE_appdir.hh"
#include "BKE_asset.hh"
#include "BKE_preferences.h"
#include "BLT_translation.hh"
#include "BLO_read_write.hh"
#include "DNA_defaults.h"
#include "DNA_userdef_types.h"

Go to the source code of this file.

Namespaces

namespace  blender
namespace  blender::bke
namespace  blender::bke::preferences

Macros

#define U   BLI_STATIC_ASSERT(false, "Global 'U' not allowed, only use arguments passed in!")

Functions

bool blender::bke::preferences::exists ()
Asset Libraries
bUserAssetLibraryBKE_preferences_asset_library_add (UserDef *userdef, const char *name, const char *dirpath)
void BKE_preferences_asset_library_remove (UserDef *userdef, bUserAssetLibrary *library)
void BKE_preferences_asset_library_name_set (UserDef *userdef, bUserAssetLibrary *library, const char *name)
void BKE_preferences_asset_library_path_set (bUserAssetLibrary *library, const char *path)
bUserAssetLibraryBKE_preferences_asset_library_find_index (const UserDef *userdef, int index)
bUserAssetLibraryBKE_preferences_asset_library_find_by_name (const UserDef *userdef, const char *name)
bUserAssetLibraryBKE_preferences_asset_library_containing_path (const UserDef *userdef, const char *path)
int BKE_preferences_asset_library_get_index (const UserDef *userdef, const bUserAssetLibrary *library)
void BKE_preferences_asset_library_default_add (UserDef *userdef)
Extension Repositories
static size_t strncpy_py_module (char *dst, const char *src, const size_t dst_maxncpy)
bUserExtensionRepoBKE_preferences_extension_repo_add (UserDef *userdef, const char *name, const char *module, const char *custom_dirpath)
void BKE_preferences_extension_repo_remove (UserDef *userdef, bUserExtensionRepo *repo)
bUserExtensionRepoBKE_preferences_extension_repo_add_default_remote (UserDef *userdef)
bUserExtensionRepoBKE_preferences_extension_repo_add_default_user (UserDef *userdef)
bUserExtensionRepoBKE_preferences_extension_repo_add_default_system (UserDef *userdef)
void BKE_preferences_extension_repo_add_defaults_all (UserDef *userdef)
void BKE_preferences_extension_repo_name_set (UserDef *userdef, bUserExtensionRepo *repo, const char *name)
void BKE_preferences_extension_repo_module_set (UserDef *userdef, bUserExtensionRepo *repo, const char *module)
bool BKE_preferences_extension_repo_module_is_valid (const bUserExtensionRepo *repo)
void BKE_preferences_extension_repo_custom_dirpath_set (bUserExtensionRepo *repo, const char *path)
size_t BKE_preferences_extension_repo_dirpath_get (const bUserExtensionRepo *repo, char *dirpath, const int dirpath_maxncpy)
size_t BKE_preferences_extension_repo_user_dirpath_get (const bUserExtensionRepo *repo, char *dirpath, const int dirpath_maxncpy)
bUserExtensionRepoBKE_preferences_extension_repo_find_index (const UserDef *userdef, int index)
bUserExtensionRepoBKE_preferences_extension_repo_find_by_module (const UserDef *userdef, const char *module)
static bool url_char_is_delimiter (const char ch)
bUserExtensionRepoBKE_preferences_extension_repo_find_by_remote_url_prefix (const UserDef *userdef, const char *remote_url_full, const bool only_enabled)
int BKE_preferences_extension_repo_remote_scheme_end (const char *url)
void BKE_preferences_extension_remote_to_name (const char *remote_url, char name[sizeof(bUserExtensionRepo::name)])
int BKE_preferences_extension_repo_get_index (const UserDef *userdef, const bUserExtensionRepo *repo)
void BKE_preferences_extension_repo_read_data (BlendDataReader *reader, bUserExtensionRepo *repo)
void BKE_preferences_extension_repo_write_data (BlendWriter *writer, const bUserExtensionRepo *repo)
#bUserAssetShelfSettings
static bUserAssetShelfSettingsasset_shelf_settings_new (UserDef *userdef, const char *shelf_idname)
static bUserAssetShelfSettingsasset_shelf_settings_ensure (UserDef *userdef, const char *shelf_idname)
bUserAssetShelfSettingsBKE_preferences_asset_shelf_settings_get (const UserDef *userdef, const char *shelf_idname)
bool BKE_preferences_asset_shelf_settings_is_catalog_path_enabled (const UserDef *userdef, const char *shelf_idname, const char *catalog_path)
bool BKE_preferences_asset_shelf_settings_ensure_catalog_path_enabled (UserDef *userdef, const char *shelf_idname, const char *catalog_path)

Detailed Description

User defined asset library API.

Definition in file preferences.cc.

Macro Definition Documentation

◆ U

#define U   BLI_STATIC_ASSERT(false, "Global 'U' not allowed, only use arguments passed in!")

Definition at line 31 of file preferences.cc.

Function Documentation

◆ asset_shelf_settings_ensure()

bUserAssetShelfSettings * asset_shelf_settings_ensure ( UserDef * userdef,
const char * shelf_idname )
static

◆ asset_shelf_settings_new()

◆ BKE_preferences_asset_library_add()

◆ BKE_preferences_asset_library_containing_path()

bUserAssetLibrary * BKE_preferences_asset_library_containing_path ( const UserDef * userdef,
const char * path )

Definition at line 117 of file preferences.cc.

References UserDef::asset_libraries, BLI_path_contains(), and LISTBASE_FOREACH.

◆ BKE_preferences_asset_library_default_add()

◆ BKE_preferences_asset_library_find_by_name()

bUserAssetLibrary * BKE_preferences_asset_library_find_by_name ( const UserDef * userdef,
const char * name )

Definition at line 110 of file preferences.cc.

References UserDef::asset_libraries, BLI_findstring(), name, and offsetof.

◆ BKE_preferences_asset_library_find_index()

bUserAssetLibrary * BKE_preferences_asset_library_find_index ( const UserDef * userdef,
int index )

Definition at line 105 of file preferences.cc.

References UserDef::asset_libraries, and BLI_findlink().

◆ BKE_preferences_asset_library_get_index()

int BKE_preferences_asset_library_get_index ( const UserDef * userdef,
const bUserAssetLibrary * library )

Definition at line 128 of file preferences.cc.

References UserDef::asset_libraries, and BLI_findindex().

◆ BKE_preferences_asset_library_name_set()

void BKE_preferences_asset_library_name_set ( UserDef * userdef,
bUserAssetLibrary * library,
const char * name )

◆ BKE_preferences_asset_library_path_set()

void BKE_preferences_asset_library_path_set ( struct bUserAssetLibrary * library,
const char * path )

Set the library path, ensuring it is pointing to a directory. Single blend files can only act as "Current File" library; libraries on disk should always be directories. If the path does not exist, that's fine; it can created as directory if necessary later.

Definition at line 97 of file preferences.cc.

References BLI_is_file(), BLI_path_parent_dir(), bUserAssetLibrary::dirpath, and STRNCPY().

◆ BKE_preferences_asset_library_remove()

void BKE_preferences_asset_library_remove ( struct UserDef * userdef,
struct bUserAssetLibrary * library )

Unlink and free a library preference member.

Note
Free's library itself.

Definition at line 79 of file preferences.cc.

References UserDef::asset_libraries, and BLI_freelinkN().

Referenced by preferences_asset_library_remove_exec(), and blender::asset_system::tests::AssetCatalogTest::save_from_memory_into_existing_asset_lib().

◆ BKE_preferences_asset_shelf_settings_ensure_catalog_path_enabled()

bool BKE_preferences_asset_shelf_settings_ensure_catalog_path_enabled ( UserDef * userdef,
const char * shelf_idname,
const char * catalog_path )

Enable a catalog path for a asset shelf identified by shelf_idname. Will create the shelf settings in the Preferences if necessary.

Returns
true if the catalog was newly enabled. The Preferences should be tagged as dirty then.

Definition at line 596 of file preferences.cc.

References asset_shelf_settings_ensure(), BKE_asset_catalog_path_list_add_path(), BKE_preferences_asset_shelf_settings_is_catalog_path_enabled(), and bUserAssetShelfSettings::enabled_catalog_paths.

Referenced by BKE_blendfile_userdef_from_defaults(), BKE_preferences_extension_remote_to_name(), blo_do_versions_userdef(), and blender::ed::asset::shelf::settings_set_catalog_path_enabled().

◆ BKE_preferences_asset_shelf_settings_get()

◆ BKE_preferences_asset_shelf_settings_is_catalog_path_enabled()

bool BKE_preferences_asset_shelf_settings_is_catalog_path_enabled ( const UserDef * userdef,
const char * shelf_idname,
const char * catalog_path )

◆ BKE_preferences_extension_remote_to_name()

void BKE_preferences_extension_remote_to_name ( const char * remote_url,
char name[sizeof(bUserExtensionRepo::name)] )

◆ BKE_preferences_extension_repo_add()

◆ BKE_preferences_extension_repo_add_default_remote()

◆ BKE_preferences_extension_repo_add_default_system()

◆ BKE_preferences_extension_repo_add_default_user()

bUserExtensionRepo * BKE_preferences_extension_repo_add_default_user ( UserDef * userdef)

◆ BKE_preferences_extension_repo_add_defaults_all()

void BKE_preferences_extension_repo_add_defaults_all ( UserDef * userdef)

◆ BKE_preferences_extension_repo_custom_dirpath_set()

void BKE_preferences_extension_repo_custom_dirpath_set ( bUserExtensionRepo * repo,
const char * path )

◆ BKE_preferences_extension_repo_dirpath_get()

◆ BKE_preferences_extension_repo_find_by_module()

bUserExtensionRepo * BKE_preferences_extension_repo_find_by_module ( const UserDef * userdef,
const char * module )

◆ BKE_preferences_extension_repo_find_by_remote_url_prefix()

bUserExtensionRepo * BKE_preferences_extension_repo_find_by_remote_url_prefix ( const UserDef * userdef,
const char * remote_url_full,
const bool only_enabled )

◆ BKE_preferences_extension_repo_find_index()

bUserExtensionRepo * BKE_preferences_extension_repo_find_index ( const UserDef * userdef,
int index )

Definition at line 354 of file preferences.cc.

References BLI_findlink(), and UserDef::extension_repos.

Referenced by BKE_preferences_asset_library_get_index().

◆ BKE_preferences_extension_repo_get_index()

int BKE_preferences_extension_repo_get_index ( const UserDef * userdef,
const bUserExtensionRepo * repo )

Definition at line 528 of file preferences.cc.

References BLI_findindex(), and UserDef::extension_repos.

Referenced by BKE_preferences_extension_remote_to_name().

◆ BKE_preferences_extension_repo_module_is_valid()

bool BKE_preferences_extension_repo_module_is_valid ( const bUserExtensionRepo * repo)

Check the module name is valid, while this should always be the case, use this as an additional safely check before performing destructive operations such as recursive file removal to prevent file/memory corruption causing user data loss.

Definition at line 288 of file preferences.cc.

References bUserExtensionRepo::module, strncpy_py_module(), and STRNLEN.

Referenced by BKE_preferences_asset_library_get_index(), and preferences_extension_repo_remove_exec().

◆ BKE_preferences_extension_repo_module_set()

void BKE_preferences_extension_repo_module_set ( UserDef * userdef,
bUserExtensionRepo * repo,
const char * module )

◆ BKE_preferences_extension_repo_name_set()

void BKE_preferences_extension_repo_name_set ( UserDef * userdef,
bUserExtensionRepo * repo,
const char * name )

◆ BKE_preferences_extension_repo_read_data()

void BKE_preferences_extension_repo_read_data ( BlendDataReader * reader,
bUserExtensionRepo * repo )

◆ BKE_preferences_extension_repo_remote_scheme_end()

int BKE_preferences_extension_repo_remote_scheme_end ( const char * url)

Skip the https or http part of a URL https://, return zero if none is found.

Definition at line 440 of file preferences.cc.

References ARRAY_SIZE, and i.

Referenced by BKE_preferences_asset_library_get_index(), BKE_preferences_extension_remote_to_name(), BKE_preferences_extension_repo_find_by_remote_url_prefix(), and drop_extension_url_poll().

◆ BKE_preferences_extension_repo_remove()

void BKE_preferences_extension_repo_remove ( UserDef * userdef,
bUserExtensionRepo * repo )

◆ BKE_preferences_extension_repo_user_dirpath_get()

size_t BKE_preferences_extension_repo_user_dirpath_get ( const bUserExtensionRepo * repo,
char * dirpath,
const int dirpath_maxncpy )

Returns a user editable directory associated with this repository. Needed so extensions may have local data.

Definition at line 342 of file preferences.cc.

References BKE_appdir_folder_id_user_notest(), BLENDER_USER_EXTENSIONS, BLI_path_join, and bUserExtensionRepo::module.

Referenced by BKE_preferences_asset_library_get_index(), preferences_extension_repo_remove_exec(), and preferences_extension_repo_remove_invoke().

◆ BKE_preferences_extension_repo_write_data()

void BKE_preferences_extension_repo_write_data ( BlendWriter * writer,
const bUserExtensionRepo * repo )

◆ strncpy_py_module()

size_t strncpy_py_module ( char * dst,
const char * src,
const size_t dst_maxncpy )
static

A string copy that ensures: [A-Za-z]+[A-Za-z0-9_]*.

Definition at line 160 of file preferences.cc.

Referenced by BKE_preferences_extension_repo_module_is_valid(), and BKE_preferences_extension_repo_module_set().

◆ url_char_is_delimiter()

bool url_char_is_delimiter ( const char ch)
static