Add house system loading to chart load code
This commit is contained in:
		| @@ -565,7 +565,9 @@ ag_chart_load_from_file(GFile *file, GError **err) | |||||||
|                        *xml = NULL, |                        *xml = NULL, | ||||||
|                        *name, |                        *name, | ||||||
|                        *country_name, |                        *country_name, | ||||||
|                        *city_name; |                        *city_name, | ||||||
|  |                        *house_system_name, | ||||||
|  |                        *house_system_enum_name; | ||||||
|     gsize              length; |     gsize              length; | ||||||
|     xmlDocPtr          doc; |     xmlDocPtr          doc; | ||||||
|     xmlXPathContextPtr xpath_context; |     xmlXPathContextPtr xpath_context; | ||||||
| @@ -582,8 +584,11 @@ ag_chart_load_from_file(GFile *file, GError **err) | |||||||
|                        *minute, |                        *minute, | ||||||
|                        *second, |                        *second, | ||||||
|                        *timezone, |                        *timezone, | ||||||
|                        *note; |                        *note, | ||||||
|  |                        *house_system; | ||||||
|     GsweTimestamp      *timestamp; |     GsweTimestamp      *timestamp; | ||||||
|  |     GEnumClass         *house_system_class; | ||||||
|  |     GEnumValue         *enum_value; | ||||||
|     gboolean           found_error = FALSE; |     gboolean           found_error = FALSE; | ||||||
|  |  | ||||||
|     uri = g_file_get_uri(file); |     uri = g_file_get_uri(file); | ||||||
| @@ -765,6 +770,17 @@ ag_chart_load_from_file(GFile *file, GError **err) | |||||||
|         found_error = TRUE; |         found_error = TRUE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     if ((house_system = get_by_xpath( | ||||||
|  |                  xpath_context, | ||||||
|  |                  uri, | ||||||
|  |                  "/chartinfo/data/housesystem/text()", | ||||||
|  |                  TRUE, | ||||||
|  |                  XML_CONVERT_STRING, | ||||||
|  |                  err | ||||||
|  |              )) == NULL) { | ||||||
|  |         found_error = TRUE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     note = get_by_xpath( |     note = get_by_xpath( | ||||||
|             xpath_context, |             xpath_context, | ||||||
|             uri, |             uri, | ||||||
| @@ -775,6 +791,7 @@ ag_chart_load_from_file(GFile *file, GError **err) | |||||||
|         ); |         ); | ||||||
|  |  | ||||||
|     if (found_error) { |     if (found_error) { | ||||||
|  |         ag_g_variant_unref(house_system); | ||||||
|         ag_g_variant_unref(note); |         ag_g_variant_unref(note); | ||||||
|         ag_g_variant_unref(chart_name); |         ag_g_variant_unref(chart_name); | ||||||
|         ag_g_variant_unref(country); |         ag_g_variant_unref(country); | ||||||
| @@ -814,14 +831,47 @@ ag_chart_load_from_file(GFile *file, GError **err) | |||||||
|     g_variant_unref(second); |     g_variant_unref(second); | ||||||
|     g_variant_unref(timezone); |     g_variant_unref(timezone); | ||||||
|  |  | ||||||
|     // TODO: Make house system configurable (and saveable) |     g_variant_get(house_system, "ms", &house_system_name); | ||||||
|  |     g_variant_unref(house_system); | ||||||
|  |     house_system_enum_name = g_utf8_strup(house_system_name, -1); | ||||||
|  |     g_free(house_system_name); | ||||||
|  |     house_system_name = house_system_enum_name; | ||||||
|  |     house_system_enum_name = g_strdup_printf( | ||||||
|  |             "GSWE_HOUSE_SYSTEM_%s", | ||||||
|  |             house_system_name | ||||||
|  |         ); | ||||||
|  |     g_free(house_system_name); | ||||||
|  |     house_system_class = g_type_class_ref(GSWE_TYPE_HOUSE_SYSTEM); | ||||||
|  |     if ((enum_value = g_enum_get_value_by_name( | ||||||
|  |                  G_ENUM_CLASS(house_system_class), | ||||||
|  |                  house_system_enum_name | ||||||
|  |              )) == NULL) { | ||||||
|  |         g_variant_unref(longitude); | ||||||
|  |         g_variant_unref(latitude); | ||||||
|  |         g_variant_unref(altitude); | ||||||
|  |         g_variant_unref(chart_name); | ||||||
|  |         g_variant_unref(country); | ||||||
|  |         g_variant_unref(city); | ||||||
|  |         ag_g_variant_unref(note); | ||||||
|  |         g_type_class_unref(house_system_class); | ||||||
|  |  | ||||||
|  |         g_set_error(err, | ||||||
|  |                     AG_CHART_ERROR, AG_CHART_ERROR_CORRUPT_FILE, | ||||||
|  |                     "Unknown house system in save file" | ||||||
|  |                ); | ||||||
|  |  | ||||||
|  |         return NULL; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     chart = ag_chart_new_full( |     chart = ag_chart_new_full( | ||||||
|             timestamp, |             timestamp, | ||||||
|             g_variant_get_double(longitude), |             g_variant_get_double(longitude), | ||||||
|             g_variant_get_double(latitude), |             g_variant_get_double(latitude), | ||||||
|             g_variant_get_double(altitude), |             g_variant_get_double(altitude), | ||||||
|             GSWE_HOUSE_SYSTEM_PLACIDUS |             enum_value->value | ||||||
|         ); |         ); | ||||||
|  |     g_type_class_unref(house_system_class); | ||||||
|  |     g_free(house_system_enum_name); | ||||||
|     g_variant_unref(longitude); |     g_variant_unref(longitude); | ||||||
|     g_variant_unref(latitude); |     g_variant_unref(latitude); | ||||||
|     g_variant_unref(altitude); |     g_variant_unref(altitude); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user