forked from bartvdbraak/blender
File Read: de-duplicate command line file-load
WM_file_read must support background mode already since it can be called by Python scripts in background mode.
This commit is contained in:
parent
a5e631171b
commit
b349297861
@ -1 +1 @@
|
|||||||
Subproject commit 4e1460519fb76d8fe4b838334d139a3e8d446827
|
Subproject commit c651e63a9a537624f639950f3127a1dee29205d0
|
@ -1 +1 @@
|
|||||||
Subproject commit cd26c938e597d7493f3d88dfdf69346c0f8b50ee
|
Subproject commit 30b619e76529a5ca99f96683f1b4a512d18cd519
|
@ -1 +1 @@
|
|||||||
Subproject commit 34dc9b5a6a5917db65ac589c40fe1b5fed3605d1
|
Subproject commit cf842d8bb7b0033ca4fa99f7ebedcbd3810fd274
|
@ -81,6 +81,7 @@
|
|||||||
#include "BKE_packedFile.h"
|
#include "BKE_packedFile.h"
|
||||||
#include "BKE_report.h"
|
#include "BKE_report.h"
|
||||||
#include "BKE_sound.h"
|
#include "BKE_sound.h"
|
||||||
|
#include "BKE_scene.h"
|
||||||
#include "BKE_screen.h"
|
#include "BKE_screen.h"
|
||||||
|
|
||||||
#include "BLO_readfile.h"
|
#include "BLO_readfile.h"
|
||||||
@ -476,6 +477,12 @@ static void wm_file_read_post(bContext *C, bool is_startup_file)
|
|||||||
BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_VERSION_UPDATE);
|
BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_VERSION_UPDATE);
|
||||||
BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_LOAD_POST);
|
BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_LOAD_POST);
|
||||||
|
|
||||||
|
/* would otherwise be handled by event loop */
|
||||||
|
if (G.background) {
|
||||||
|
Main *bmain = CTX_data_main(C);
|
||||||
|
BKE_scene_update_tagged(bmain->eval_ctx, bmain, CTX_data_scene(C));
|
||||||
|
}
|
||||||
|
|
||||||
WM_event_add_notifier(C, NC_WM | ND_FILEREAD, NULL);
|
WM_event_add_notifier(C, NC_WM | ND_FILEREAD, NULL);
|
||||||
|
|
||||||
/* report any errors.
|
/* report any errors.
|
||||||
@ -491,9 +498,11 @@ static void wm_file_read_post(bContext *C, bool is_startup_file)
|
|||||||
CTX_wm_window_set(C, NULL); /* exits queues */
|
CTX_wm_window_set(C, NULL); /* exits queues */
|
||||||
}
|
}
|
||||||
|
|
||||||
// undo_editmode_clear();
|
if (!G.background) {
|
||||||
BKE_undo_reset();
|
// undo_editmode_clear();
|
||||||
BKE_undo_write(C, "original"); /* save current state */
|
BKE_undo_reset();
|
||||||
|
BKE_undo_write(C, "original"); /* save current state */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WM_file_read(bContext *C, const char *filepath, ReportList *reports)
|
bool WM_file_read(bContext *C, const char *filepath, ReportList *reports)
|
||||||
|
@ -1361,6 +1361,8 @@ static int set_addons(int argc, const char **argv, void *data)
|
|||||||
static int load_file(int UNUSED(argc), const char **argv, void *data)
|
static int load_file(int UNUSED(argc), const char **argv, void *data)
|
||||||
{
|
{
|
||||||
bContext *C = data;
|
bContext *C = data;
|
||||||
|
ReportList reports;
|
||||||
|
bool success;
|
||||||
|
|
||||||
/* Make the path absolute because its needed for relative linked blends to be found */
|
/* Make the path absolute because its needed for relative linked blends to be found */
|
||||||
char filename[FILE_MAX];
|
char filename[FILE_MAX];
|
||||||
@ -1373,84 +1375,23 @@ static int load_file(int UNUSED(argc), const char **argv, void *data)
|
|||||||
BLI_strncpy(filename, argv[0], sizeof(filename));
|
BLI_strncpy(filename, argv[0], sizeof(filename));
|
||||||
BLI_path_cwd(filename, sizeof(filename));
|
BLI_path_cwd(filename, sizeof(filename));
|
||||||
|
|
||||||
if (G.background) {
|
/* load the file */
|
||||||
Main *bmain;
|
BKE_reports_init(&reports, RPT_PRINT);
|
||||||
wmWindowManager *wm;
|
WM_file_autoexec_init(filename);
|
||||||
int retval;
|
success = WM_file_read(C, filename, &reports);
|
||||||
|
BKE_reports_clear(&reports);
|
||||||
|
|
||||||
bmain = CTX_data_main(C);
|
if (success == false) {
|
||||||
|
/* failed to load file, stop processing arguments */
|
||||||
BLI_callback_exec(bmain, NULL, BLI_CB_EVT_LOAD_PRE);
|
if (G.background) {
|
||||||
|
/* Set is_break if running in the background mode so
|
||||||
retval = BKE_read_file(C, filename, NULL);
|
* blender will return non-zero exit code which then
|
||||||
|
* could be used in automated script to control how
|
||||||
if (retval == BKE_READ_FILE_FAIL) {
|
* good or bad things are.
|
||||||
/* failed to load file, stop processing arguments */
|
*/
|
||||||
if (G.background) {
|
G.is_break = true;
|
||||||
/* Set is_break if running in the background mode so
|
|
||||||
* blender will return non-zero exit code which then
|
|
||||||
* could be used in automated script to control how
|
|
||||||
* good or bad things are.
|
|
||||||
*/
|
|
||||||
G.is_break = true;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
return -1;
|
||||||
wm = CTX_wm_manager(C);
|
|
||||||
bmain = CTX_data_main(C);
|
|
||||||
|
|
||||||
/* special case, 2.4x files */
|
|
||||||
if (wm == NULL && BLI_listbase_is_empty(&bmain->wm)) {
|
|
||||||
extern void wm_add_default(bContext *C);
|
|
||||||
|
|
||||||
/* wm_add_default() needs the screen to be set. */
|
|
||||||
CTX_wm_screen_set(C, bmain->screen.first);
|
|
||||||
wm_add_default(C);
|
|
||||||
}
|
|
||||||
|
|
||||||
CTX_wm_manager_set(C, NULL); /* remove wm to force check */
|
|
||||||
WM_check(C);
|
|
||||||
if (bmain->name[0]) {
|
|
||||||
G.save_over = 1;
|
|
||||||
G.relbase_valid = 1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
G.save_over = 0;
|
|
||||||
G.relbase_valid = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CTX_wm_manager(C) == NULL) {
|
|
||||||
CTX_wm_manager_set(C, wm); /* reset wm */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* WM_file_read would call normally */
|
|
||||||
ED_editors_init(C);
|
|
||||||
DAG_on_visible_update(bmain, true);
|
|
||||||
|
|
||||||
/* WM_file_read() runs normally but since we're in background mode do here */
|
|
||||||
#ifdef WITH_PYTHON
|
|
||||||
/* run any texts that were loaded in and flagged as modules */
|
|
||||||
BPY_python_reset(C);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
BLI_callback_exec(bmain, NULL, BLI_CB_EVT_VERSION_UPDATE);
|
|
||||||
BLI_callback_exec(bmain, NULL, BLI_CB_EVT_LOAD_POST);
|
|
||||||
|
|
||||||
BKE_scene_update_tagged(bmain->eval_ctx, bmain, CTX_data_scene(C));
|
|
||||||
|
|
||||||
/* happens for the UI on file reading too (huh? (ton))*/
|
|
||||||
// XXX BKE_undo_reset();
|
|
||||||
// BKE_undo_write("original"); /* save current state */
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
/* we are not running in background mode here, but start blender in UI mode with
|
|
||||||
* a file - this should do everything a 'load file' does */
|
|
||||||
ReportList reports;
|
|
||||||
BKE_reports_init(&reports, RPT_PRINT);
|
|
||||||
WM_file_autoexec_init(filename);
|
|
||||||
WM_file_read(C, filename, &reports);
|
|
||||||
BKE_reports_clear(&reports);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
G.file_loaded = 1;
|
G.file_loaded = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user