diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-06-24 06:57:06 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-06-24 06:57:06 +0400 |
commit | 0f4802817340794b50b09daead59c54e33caf09d (patch) | |
tree | 6eb6cb487a39401d3cfb0f48a13a337bf4355972 /source | |
parent | 8ce83150a7fa3b0214e73c468abde70210c192b9 (diff) |
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.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_bpath.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/bpath.c | 17 | ||||
-rw-r--r-- | source/blender/editors/space_info/info_ops.c | 10 |
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 *********************/ |