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.
This commit is contained in:
parent
72ceab8ab2
commit
53d13b6f53
Notes:
blender-bot
2023-02-14 01:57:12 +01:00
Referenced by commit aad2f1510a
, Fix T86028: Crash when loading file with missing libraries.
Referenced by issue #86028, Crash trying to load file with a missing library on line fd->library_file_missing_count++;
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue