Blender V4.3
BKE_bpath.hh File Reference
#include "BLI_utildefines.h"

Go to the source code of this file.

Classes

struct  BPathForeachPathData
 
struct  BPathSummary
 

Functions

Helpers to handle common cases from <tt>IDTypeInfo</tt>'s <tt>foreach_path</tt> functions.
bool BKE_bpath_foreach_path_fixed_process (BPathForeachPathData *bpath_data, char *path, size_t path_maxncpy)
 
bool BKE_bpath_foreach_path_dirfile_fixed_process (BPathForeachPathData *bpath_data, char *path_dir, size_t path_dir_maxncpy, char *path_file, size_t path_file_maxncpy)
 
bool BKE_bpath_foreach_path_allocated_process (BPathForeachPathData *bpath_data, char **path)
 
High level features.
void BKE_bpath_missing_files_check (Main *bmain, ReportList *reports)
 
void BKE_bpath_summary_report (const BPathSummary &summary, ReportList *reports)
 
void BKE_bpath_missing_files_find (Main *bmain, const char *searchpath, ReportList *reports, bool find_all)
 
void BKE_bpath_relative_rebase (Main *bmain, const char *basedir_src, const char *basedir_dst, ReportList *reports, BPathSummary *r_summary=nullptr)
 
void BKE_bpath_relative_convert (Main *bmain, const char *basedir, ReportList *reports, BPathSummary *r_summary=nullptr)
 
void BKE_bpath_absolute_convert (Main *bmain, const char *basedir, ReportList *reports, BPathSummary *r_summary=nullptr)
 
void * BKE_bpath_list_backup (Main *bmain, eBPathForeachFlag flag)
 
void BKE_bpath_list_restore (Main *bmain, eBPathForeachFlag flag, void *path_list_handle)
 
void BKE_bpath_list_free (void *path_list_handle)
 

Core <tt>foreach_path</tt> API.

enum  eBPathForeachFlag {
  BKE_BPATH_FOREACH_PATH_ABSOLUTE = (1 << 0) , BKE_BPATH_FOREACH_PATH_SKIP_LINKED = (1 << 1) , BKE_BPATH_FOREACH_PATH_SKIP_PACKED = (1 << 2) , BKE_BPATH_FOREACH_PATH_RESOLVE_TOKEN = (1 << 3) ,
  BKE_BPATH_TRAVERSE_SKIP_WEAK_REFERENCES = (1 << 5) , BKE_BPATH_FOREACH_PATH_SKIP_MULTIFILE = (1 << 8) , BKE_BPATH_FOREACH_PATH_RELOAD_EDITED = (1 << 9)
}
 
using BPathForeachPathFunctionCallback
 
void BKE_bpath_foreach_path_id (BPathForeachPathData *bpath_data, ID *id)
 
void BKE_bpath_foreach_path_main (BPathForeachPathData *bpath_data)
 

Detailed Description

Warning
All paths manipulated by this API are assumed to be either constant char buffers of FILE_MAX size, or allocated char buffers not bigger than FILE_MAX.

Definition in file BKE_bpath.hh.

Typedef Documentation

◆ BPathForeachPathFunctionCallback

Initial value:
bool (*)(BPathForeachPathData *bpath_data,
char *path_dst,
size_t path_dst_maxncpy,
const char *path_src)

Callback used to iterate over an ID's file paths.

Parameters
path_dstOptionally write to the path (for callbacks that manipulate the path).
Note
When BKE_BPATH_FOREACH_PATH_ABSOLUTE us used, path_src will be absolute and path_dst can be used to access the original path.
Parameters
path_dst_maxncpyThe buffer size of path_dst including the null byte.
Warning
Actions such as BLI_path_abs & BLI_path_rel must not be called directly on path_dst as they assume FILE_MAX size which may not be the case.
Returns
true if the path has been changed, and in that case, result must be written to path_dst.

Definition at line 78 of file BKE_bpath.hh.

Enumeration Type Documentation

◆ eBPathForeachFlag

Enumerator
BKE_BPATH_FOREACH_PATH_ABSOLUTE 

Ensures the absolute_base_path member of BPathForeachPathData is initialized properly with the path of the current .blend file. This can be used by the callbacks to convert relative paths to absolute ones.

BKE_BPATH_FOREACH_PATH_SKIP_LINKED 

Skip paths of linked IDs.

BKE_BPATH_FOREACH_PATH_SKIP_PACKED 

Skip paths when their matching data is packed.

BKE_BPATH_FOREACH_PATH_RESOLVE_TOKEN 

Resolve tokens within a virtual filepath to a single, concrete, filepath.

BKE_BPATH_TRAVERSE_SKIP_WEAK_REFERENCES 
BKE_BPATH_FOREACH_PATH_SKIP_MULTIFILE 

Flags not affecting the generic BPath API. Those may be used by specific IDTypeInfo foreach_path implementations and/or callbacks to implement specific behaviors. Skip paths where a single dir is used with an array of files, eg. sequence strip images or point-caches. In this case only use the first file path is processed.

This is needed for directory manipulation callbacks which might otherwise modify the same directory multiple times.

BKE_BPATH_FOREACH_PATH_RELOAD_EDITED 

Reload data (when the path is edited).

Note
Only used by Image #IDType currently.

Definition at line 26 of file BKE_bpath.hh.

Function Documentation

◆ BKE_bpath_absolute_convert()

void BKE_bpath_absolute_convert ( Main * bmain,
const char * basedir,
ReportList * reports,
BPathSummary * r_summary = nullptr )

Make all relative file paths in given bmain absolute, using given basedir as root.

Definition at line 624 of file bpath.cc.

References absolute_convert_foreach_path_cb(), and bpath_absolute_relative_convert().

Referenced by BKE_main_merge(), BLO_write_file_impl(), make_paths_absolute_exec(), and blender::bke::tests::TEST_F().

◆ BKE_bpath_foreach_path_allocated_process()

bool BKE_bpath_foreach_path_allocated_process ( BPathForeachPathData * bpath_data,
char ** path )

Run the callback on a path, replacing the content of the string as needed.

Parameters
pathA pointer to a MEM-allocated string. If modified, it will be freed and replaced by a new allocated string.
Note
path is expected to be FILE_MAX size or smaller.
Returns
true is path was modified and re-allocated, false otherwise.

Definition at line 185 of file bpath.cc.

References BPathForeachPathData::absolute_base_path, BLI_path_abs(), BLI_strdup(), BPathForeachPathData::callback_function, FILE_MAX, BPathForeachPathData::is_path_modified, MEM_freeN(), and STRNCPY.

Referenced by text_foreach_path().

◆ BKE_bpath_foreach_path_dirfile_fixed_process()

bool BKE_bpath_foreach_path_dirfile_fixed_process ( BPathForeachPathData * bpath_data,
char * path_dir,
size_t path_dir_maxncpy,
char * path_file,
size_t path_file_maxncpy )

Run the callback on a (directory + file) path, replacing the content of the two strings as needed.

Parameters
path_dirA fixed, FILE_MAXDIR-sized char buffer.
path_fileA fixed, FILE_MAXFILE-sized char buffer.
Returns
true is path_dir and/or path_file were modified, false otherwise.

Definition at line 154 of file bpath.cc.

References BPathForeachPathData::absolute_base_path, BLI_path_abs(), BLI_path_join, BLI_path_split_dir_file(), BPathForeachPathData::callback_function, FILE_MAX, BPathForeachPathData::is_path_modified, and STRNCPY.

Referenced by seq_foreach_path_callback().

◆ BKE_bpath_foreach_path_fixed_process()

bool BKE_bpath_foreach_path_fixed_process ( BPathForeachPathData * bpath_data,
char * path,
size_t path_maxncpy )

◆ BKE_bpath_foreach_path_id()

◆ BKE_bpath_foreach_path_main()

◆ BKE_bpath_list_backup()

void * BKE_bpath_list_backup ( Main * bmain,
eBPathForeachFlag flag )

Temp backup of paths from all IDs in given bmain.

Returns
An opaque handle to pass to BKE_bpath_list_restore and BKE_bpath_list_free.

Definition at line 689 of file bpath.cc.

References BKE_bpath_foreach_path_main(), BPathForeachPathData::bmain, bpath_list_append(), flag, and MEM_callocN.

Referenced by BLO_write_file_impl(), and blender::bke::tests::TEST_F().

◆ BKE_bpath_list_free()

void BKE_bpath_list_free ( void * path_list_handle)

Free the temp backup of paths in path_list_handle.

Note
This function assumes that the path list has already been restored with a call to BKE_bpath_list_restore, and is therefore empty.

Definition at line 715 of file bpath.cc.

References BLI_assert, BLI_freelistN(), BLI_listbase_is_empty(), and MEM_freeN().

Referenced by BLO_write_file_impl(), and blender::bke::tests::TEST_F().

◆ BKE_bpath_list_restore()

void BKE_bpath_list_restore ( Main * bmain,
eBPathForeachFlag flag,
void * path_list_handle )

Restore the temp backup of paths from path_list_handle into all IDs in given bmain.

Note
This function assumes that the data in given Main did not change (no addition/deletion/re-ordering of IDs, or their file paths) since the call to BKE_bpath_list_backup that generated the given path_list_handle.

Definition at line 703 of file bpath.cc.

References BKE_bpath_foreach_path_main(), BPathForeachPathData::bmain, bpath_list_restore(), and flag.

Referenced by BLO_write_file_impl(), and blender::bke::tests::TEST_F().

◆ BKE_bpath_missing_files_check()

◆ BKE_bpath_missing_files_find()

void BKE_bpath_missing_files_find ( Main * bmain,
const char * searchpath,
ReportList * reports,
bool find_all )

Recursively search into given search directory, for all file paths of all IDs in given bmain, and replace existing paths as needed.

Note
The search will happen into the whole search directory tree recursively (with a limit of MAX_DIR_RECURSE), if several files are found matching a searched filename, the biggest one will be used. This is so that things like thumbnails don't get selected instead of the actual image e.g.
Parameters
searchpathThe root directory in which the new filepaths should be searched for.
find_allIf true, also search for files which current path is still valid, if false skip those still valid paths.

Definition at line 404 of file bpath.cc.

References BPathFind_Data::basedir, BKE_BPATH_FOREACH_PATH_ABSOLUTE, BKE_bpath_foreach_path_main(), BKE_BPATH_FOREACH_PATH_RELOAD_EDITED, BKE_BPATH_FOREACH_PATH_RESOLVE_TOKEN, BKE_BPATH_TRAVERSE_SKIP_WEAK_REFERENCES, BKE_main_blendfile_path(), BPathForeachPathData::bmain, data, flag, and missing_files_find_foreach_path_cb().

Referenced by find_missing_files_exec().

◆ BKE_bpath_relative_convert()

void BKE_bpath_relative_convert ( Main * bmain,
const char * basedir,
ReportList * reports,
BPathSummary * r_summary = nullptr )

Make all absolute file paths in given bmain relative to given basedir.

Definition at line 615 of file bpath.cc.

References bpath_absolute_relative_convert(), and relative_convert_foreach_path_cb().

Referenced by BLO_write_file_impl(), make_paths_relative_exec(), and blender::bke::tests::TEST_F().

◆ BKE_bpath_relative_rebase()

void BKE_bpath_relative_rebase ( Main * bmain,
const char * basedir_src,
const char * basedir_dst,
ReportList * reports,
BPathSummary * r_summary = nullptr )

◆ BKE_bpath_summary_report()

void BKE_bpath_summary_report ( const BPathSummary & summary,
ReportList * reports )