Allow inclusions in the module list

When we see a string in the modules array, parse it as a json
file and use the resulting BuilderModule object.
tingping/wmclass
Matthias Clasen 2016-06-09 01:01:37 -04:00
parent 5225e7b1d0
commit 99e4f83e33
2 changed files with 28 additions and 12 deletions

View File

@ -767,13 +767,21 @@ builder_manifest_deserialize_property (JsonSerializable *serializable,
{
JsonNode *element_node = json_array_get_element (array, i);
if (JSON_NODE_TYPE (element_node) != JSON_NODE_OBJECT)
{
g_list_free_full (modules, g_object_unref);
return FALSE;
}
module = NULL;
if (JSON_NODE_HOLDS_VALUE (element_node) &&
json_node_get_value_type (element_node) == G_TYPE_STRING)
{
const char *module_path = json_node_get_string (element_node);
g_autofree char *json = NULL;
if (g_file_get_contents (module_path, &json, NULL, NULL))
module = json_gobject_from_data (BUILDER_TYPE_MODULE,
json, -1, NULL);
}
else if (JSON_NODE_HOLDS_OBJECT (element_node))
module = json_gobject_deserialize (BUILDER_TYPE_MODULE, element_node);
module = json_gobject_deserialize (BUILDER_TYPE_MODULE, element_node);
if (module == NULL)
{
g_list_free_full (modules, g_object_unref);

View File

@ -542,13 +542,21 @@ builder_module_deserialize_property (JsonSerializable *serializable,
{
JsonNode *element_node = json_array_get_element (array, i);
if (JSON_NODE_TYPE (element_node) != JSON_NODE_OBJECT)
{
g_list_free_full (modules, g_object_unref);
return FALSE;
}
module = NULL;
if (JSON_NODE_HOLDS_VALUE (element_node) &&
json_node_get_value_type (element_node) == G_TYPE_STRING)
{
const char *module_path = json_node_get_string (element_node);
g_autofree char *json = NULL;
if (g_file_get_contents (module_path, &json, NULL, NULL))
module = json_gobject_from_data (BUILDER_TYPE_MODULE,
json, -1, NULL);
}
else if (JSON_NODE_HOLDS_OBJECT (element_node))
module = json_gobject_deserialize (BUILDER_TYPE_MODULE, element_node);
module = json_gobject_deserialize (BUILDER_TYPE_MODULE, element_node);
if (module == NULL)
{
g_list_free_full (modules, g_object_unref);