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:
authorCampbell Barton <ideasman42@gmail.com>2013-06-24 06:57:06 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-06-24 06:57:06 +0400
commit0f4802817340794b50b09daead59c54e33caf09d (patch)
tree6eb6cb487a39401d3cfb0f48a13a337bf4355972 /source/blender
parent8ce83150a7fa3b0214e73c468abde70210c192b9 (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/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 *********************/