[Bf-blender-cvs] [19d7d99b4d] app-templates: Add BKE_blendfile_userdef_read_from_memory

Campbell Barton noreply at git.blender.org
Thu Mar 16 20:42:32 CET 2017


Commit: 19d7d99b4d26eb68c6a01179119eebf546e9160e
Author: Campbell Barton
Date:   Fri Mar 17 06:46:51 2017 +1100
Branches: app-templates
https://developer.blender.org/rB19d7d99b4d26eb68c6a01179119eebf546e9160e

Add BKE_blendfile_userdef_read_from_memory

Use so we can load user-preferences on their own from memory.

===================================================================

M	source/blender/blenkernel/BKE_blendfile.h
M	source/blender/blenkernel/intern/blendfile.c
M	source/blender/windowmanager/intern/wm_files.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_blendfile.h b/source/blender/blenkernel/BKE_blendfile.h
index 9625a93ed0..7597812005 100644
--- a/source/blender/blenkernel/BKE_blendfile.h
+++ b/source/blender/blenkernel/BKE_blendfile.h
@@ -51,8 +51,13 @@ bool BKE_blendfile_read_from_memfile(
         struct bContext *C, struct MemFile *memfile,
         struct ReportList *reports, int skip_flag);
 
-struct UserDef *BKE_blendfile_userdef_read(const char *filepath, struct ReportList *reports);
-int             BKE_blendfile_userdef_write(const char *filepath, struct ReportList *reports);
+struct UserDef *BKE_blendfile_userdef_read(
+        const char *filepath, struct ReportList *reports);
+struct UserDef *BKE_blendfile_userdef_read_from_memory(
+        const void *filebuf, int filelength,
+        struct ReportList *reports);
+
+int BKE_blendfile_userdef_write(const char *filepath, struct ReportList *reports);
 
 
 /* partial blend file writing */
diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c
index c549c138ef..6cb08d69fa 100644
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@ -442,6 +442,30 @@ UserDef *BKE_blendfile_userdef_read(const char *filepath, ReportList *reports)
 	return userdef;
 }
 
+
+UserDef *BKE_blendfile_userdef_read_from_memory(
+        const void *filebuf, int filelength,
+        ReportList *reports)
+{
+	BlendFileData *bfd;
+	UserDef *userdef = NULL;
+
+	bfd = BLO_read_from_memory(filebuf, filelength, reports, BLO_READ_SKIP_NONE);
+	if (bfd) {
+		if (bfd->user) {
+			userdef = bfd->user;
+		}
+		BKE_main_free(bfd->main);
+		MEM_freeN(bfd);
+	}
+	else {
+		BKE_reports_prepend(reports, "Loading failed: ");
+	}
+
+	return userdef;
+}
+
+
 /* only write the userdef in a .blend */
 int BKE_blendfile_userdef_write(const char *filepath, ReportList *reports)
 {
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 0362fe2cf6..bd86eb32d0 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -770,6 +770,11 @@ int wm_homefile_read(
 		if (filepath_userdef_template) {
 			BLI_join_dirfile(temp_path, sizeof(temp_path), filepath_userdef_template, BLENDER_USERPREF_FILE);
 			UserDef *userdef_template = BKE_blendfile_userdef_read(temp_path, NULL);
+			if (userdef_template == NULL) {
+				/* we need to have preferences load to overwrite preferences from previous template */
+				userdef_template = BKE_blendfile_userdef_read_from_memory(
+				        datatoc_startup_blend, datatoc_startup_blend_size, NULL);
+			}
 			if (userdef_template) {
 				BKE_blender_userdef_set_template(userdef_template);
 				BKE_blender_userdef_free_data(userdef_template);




More information about the Bf-blender-cvs mailing list