瀏覽代碼

libobs: Add functions for getting/saving pretty JSON

derrod 2 年之前
父節點
當前提交
4b062a7147
共有 2 個文件被更改,包括 34 次插入0 次删除
  1. 30 0
      libobs/obs-data.c
  2. 4 0
      libobs/obs-data.h

+ 30 - 0
libobs/obs-data.c

@@ -742,6 +742,22 @@ const char *obs_data_get_json(obs_data_t *data)
 	return data->json;
 }
 
+const char *obs_data_get_json_pretty(obs_data_t *data)
+{
+	if (!data)
+		return NULL;
+
+	/* NOTE: don't use libobs bfree for json text */
+	free(data->json);
+	data->json = NULL;
+
+	json_t *root = obs_data_to_json(data);
+	data->json = json_dumps(root, JSON_PRESERVE_ORDER | JSON_INDENT(4));
+	json_decref(root);
+
+	return data->json;
+}
+
 const char *obs_data_get_last_json(obs_data_t *data)
 {
 	return data ? data->json : NULL;
@@ -772,6 +788,20 @@ bool obs_data_save_json_safe(obs_data_t *data, const char *file,
 	return false;
 }
 
+bool obs_data_save_json_pretty_safe(obs_data_t *data, const char *file,
+				    const char *temp_ext,
+				    const char *backup_ext)
+{
+	const char *json = obs_data_get_json_pretty(data);
+
+	if (json && *json) {
+		return os_quick_write_utf8_file_safe(
+			file, json, strlen(json), false, temp_ext, backup_ext);
+	}
+
+	return false;
+}
+
 static void get_defaults_array_cb(obs_data_t *data, void *vp)
 {
 	obs_data_array_t *defs = (obs_data_array_t *)vp;

+ 4 - 0
libobs/obs-data.h

@@ -70,11 +70,15 @@ EXPORT void obs_data_addref(obs_data_t *data);
 EXPORT void obs_data_release(obs_data_t *data);
 
 EXPORT const char *obs_data_get_json(obs_data_t *data);
+EXPORT const char *obs_data_get_json_pretty(obs_data_t *data);
 EXPORT const char *obs_data_get_last_json(obs_data_t *data);
 EXPORT bool obs_data_save_json(obs_data_t *data, const char *file);
 EXPORT bool obs_data_save_json_safe(obs_data_t *data, const char *file,
 				    const char *temp_ext,
 				    const char *backup_ext);
+EXPORT bool obs_data_save_json_pretty_safe(obs_data_t *data, const char *file,
+					   const char *temp_ext,
+					   const char *backup_ext);
 
 EXPORT void obs_data_apply(obs_data_t *target, obs_data_t *apply_data);