From 0f4802817340794b50b09daead59c54e33caf09d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 24 Jun 2013 02:57:06 +0000 Subject: fix [#35825] "Find missing files" seems to search for files which are not missing Made finding paths for files that exist optional (and off by default), since its handy for relocating projects. --- source/blender/blenkernel/BKE_bpath.h | 3 ++- source/blender/blenkernel/intern/bpath.c | 17 +++++++++++++---- source/blender/editors/space_info/info_ops.c | 10 +++++++--- 3 files changed, 22 insertions(+), 8 deletions(-) (limited to 'source/blender') 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 *********************/ -- cgit v1.2.3