Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/BKE_bpath.h3
-rw-r--r--source/blender/blenkernel/intern/bpath.c17
-rw-r--r--source/blender/editors/space_info/info_ops.c10
3 files changed, 22 insertions, 8 deletions
diff --git a/source/blender/blenkernel/BKE_bpath.h b/source/blender/blenkernel/BKE_bpath.h
index 16a8b1be85b..55320b66054 100644
--- a/source/blender/blenkernel/BKE_bpath.h
+++ b/source/blender/blenkernel/BKE_bpath.h
@@ -65,7 +65,8 @@ void BKE_bpath_list_free(void *ls_handle);
/* creates a text file with missing files if there are any */
void BKE_bpath_missing_files_check(struct Main *bmain, struct ReportList *reports);
-void BKE_bpath_missing_files_find(struct Main *bmain, const char *searchpath, struct ReportList *reports);
+void BKE_bpath_missing_files_find(struct Main *bmain, const char *searchpath, struct ReportList *reports,
+ const bool find_all);
void BKE_bpath_relative_convert(struct Main *bmain, const char *basedir, struct ReportList *reports);
void BKE_bpath_absolute_convert(struct Main *bmain, const char *basedir, struct ReportList *reports);
diff --git a/source/blender/blenkernel/intern/bpath.c b/source/blender/blenkernel/intern/bpath.c
index fe86b413a99..a4cb7cbf628 100644
--- a/source/blender/blenkernel/intern/bpath.c
+++ b/source/blender/blenkernel/intern/bpath.c
@@ -263,8 +263,9 @@ static int findFileRecursive(char *filename_new,
typedef struct BPathFind_Data {
const char *basedir;
- char searchdir[FILE_MAX];
+ const char *searchdir;
ReportList *reports;
+ bool find_all;
} BPathFind_Data;
static int findMissingFiles_visit_cb(void *userdata, char *path_dst, const char *path_src)
@@ -276,6 +277,12 @@ static int findMissingFiles_visit_cb(void *userdata, char *path_dst, const char
int recur_depth = 0;
int found;
+ if (data->find_all == false) {
+ if (BLI_exists(path_src)) {
+ return false;
+ }
+ }
+
filename_new[0] = '\0';
found = findFileRecursive(filename_new,
@@ -300,14 +307,16 @@ static int findMissingFiles_visit_cb(void *userdata, char *path_dst, const char
}
}
-void BKE_bpath_missing_files_find(Main *bmain, const char *searchpath, ReportList *reports)
+void BKE_bpath_missing_files_find(Main *bmain, const char *searchpath, ReportList *reports,
+ const bool find_all)
{
struct BPathFind_Data data = {NULL};
data.reports = reports;
- BLI_split_dir_part(searchpath, data.searchdir, sizeof(data.searchdir));
+ data.searchdir = searchpath;
+ data.find_all = find_all;
- BKE_bpath_traverse_main(bmain, findMissingFiles_visit_cb, 0, (void *)&data);
+ BKE_bpath_traverse_main(bmain, findMissingFiles_visit_cb, BKE_BPATH_TRAVERSE_ABS, (void *)&data);
}
/* Run a visitor on a string, replacing the contents of the string as needed. */
diff --git a/source/blender/editors/space_info/info_ops.c b/source/blender/editors/space_info/info_ops.c
index c68473820e3..4e367c1d48d 100644
--- a/source/blender/editors/space_info/info_ops.c
+++ b/source/blender/editors/space_info/info_ops.c
@@ -422,8 +422,10 @@ void FILE_OT_report_missing_files(wmOperatorType *ot)
static int find_missing_files_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
- const char *searchpath = RNA_string_get_alloc(op->ptr, "filepath", NULL, 0);
- BKE_bpath_missing_files_find(bmain, searchpath, op->reports);
+ const char *searchpath = RNA_string_get_alloc(op->ptr, "directory", NULL, 0);
+ const bool find_all = RNA_boolean_get(op->ptr, "find_all");
+
+ BKE_bpath_missing_files_find(bmain, searchpath, op->reports, find_all);
MEM_freeN((void *)searchpath);
return OPERATOR_FINISHED;
@@ -451,8 +453,10 @@ void FILE_OT_find_missing_files(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
/* properties */
+ RNA_def_boolean(ot->srna, "find_all", false, "Find All", "Find all files in the search path (not just missing)");
+
WM_operator_properties_filesel(ot, 0, FILE_SPECIAL, FILE_OPENFILE,
- WM_FILESEL_FILEPATH, FILE_DEFAULTDISPLAY);
+ WM_FILESEL_DIRECTORY, FILE_DEFAULTDISPLAY);
}
/********************* report box operator *********************/