diff options
author | Bastien Montagne <bastien@blender.org> | 2021-02-26 13:59:14 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2021-02-26 13:59:14 +0300 |
commit | 53d13b6f5387c686a7df84ea8ead801e42a84a7f (patch) | |
tree | 69847e88915b12cbb3940123567c0d001b719faf /source/blender | |
parent | 72ceab8ab256ea53e364a2e9ae9ef3f62b634373 (diff) |
UX: Readfile: Libraries error messages: avoid wall of warnings.
When a lot of libraries or linked IDs were missing/not found when
loading a .blend file, Blender used to show one warning report for each
missing item, potentially covering the user's screen with a giant
unuable popup.
Now it will instead generate a single warning with amount of missing lib
files and linked IDs. Each missing item is still reported individually,
but only as `INFO`, so it will still show up in the console or Info editor.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 18 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.h | 4 |
2 files changed, 20 insertions, 2 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index bea05699579..dd855ebae0b 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -5273,12 +5273,13 @@ static void read_library_linked_id( } else { BLO_reportf_wrap(reports, - RPT_WARNING, + RPT_INFO, TIP_("LIB: %s: '%s' missing from '%s', parent '%s'"), BKE_idtype_idcode_to_name(GS(id->name)), id->name + 2, mainvar->curlib->filepath_abs, library_parent_filepath(mainvar->curlib)); + fd->library_id_missing_count++; /* Generate a placeholder for this ID (simplified version of read_libblock actually...). */ if (r_id) { @@ -5432,7 +5433,8 @@ static FileData *read_library_file_data(FileData *basefd, if (fd == NULL) { BLO_reportf_wrap( - basefd->reports, RPT_WARNING, TIP_("Cannot find lib '%s'"), mainptr->curlib->filepath_abs); + basefd->reports, RPT_INFO, TIP_("Cannot find lib '%s'"), mainptr->curlib->filepath_abs); + fd->library_file_missing_count++; } return fd; @@ -5481,6 +5483,9 @@ static void read_libraries(FileData *basefd, ListBase *mainlist) /* Test if linked data-locks need to read further linked data-locks * and create link placeholders for them. */ BLO_expand_main(fd, mainptr); + + basefd->library_file_missing_count += fd->library_file_missing_count; + basefd->library_id_missing_count += fd->library_id_missing_count; } } } @@ -5526,6 +5531,15 @@ static void read_libraries(FileData *basefd, ListBase *mainlist) mainptr->curlib->filedata = NULL; } BKE_main_free(main_newid); + + if (basefd->library_file_missing_count != 0 || basefd->library_id_missing_count != 0) { + BKE_reportf(basefd->reports, + RPT_WARNING, + "LIB: %d libraries and %d linked data-blocks are missing, please check the " + "Info and Outliner editors for details", + basefd->library_file_missing_count, + basefd->library_id_missing_count); + } } void *BLO_read_get_new_data_address(BlendDataReader *reader, const void *old_address) diff --git a/source/blender/blenloader/intern/readfile.h b/source/blender/blenloader/intern/readfile.h index 425932498f1..b81d8bd9a2b 100644 --- a/source/blender/blenloader/intern/readfile.h +++ b/source/blender/blenloader/intern/readfile.h @@ -138,6 +138,10 @@ typedef struct FileData { struct IDNameLib_Map *old_idmap; struct ReportList *reports; + /* Counters for amount of missing libraries, and missing IDs in libraries. + * Used to generate a synthetic report in the UI. */ + int library_file_missing_count; + int library_id_missing_count; } FileData; #define SIZEOFBLENDERHEADER 12 |