Add enum_to_string() to convert enumeration values to string

This commit is contained in:
Gergely Polonkai 2016-01-15 15:03:22 +01:00
parent 4b62015d93
commit 35028e66b0

View File

@ -467,6 +467,32 @@ matrix_http_api_get_validate_certificate(MatrixHTTPAPI *api)
return priv->validate_certificate; return priv->validate_certificate;
} }
static gchar *
enum_to_string(GType enum_type, gint value, gboolean convert_dashes)
{
GEnumClass *enum_class = g_type_class_ref(enum_type);
GEnumValue *enum_value = g_enum_get_value(enum_class, value);
gchar *nick = NULL;
if (value) {
nick = g_strdup(enum_value->value_nick);
if (convert_dashes) {
gchar *a;
for (a = nick; *a; a++) {
if (*a == '-') {
*a = '_';
}
}
}
}
g_type_class_unref(enum_class);
return nick;
}
static void static void
_response_callback(SoupSession *session, _response_callback(SoupSession *session,
SoupMessage *msg, SoupMessage *msg,
@ -896,29 +922,16 @@ i_create_room(MatrixAPI *api,
} }
if (preset != MATRIX_API_ROOM_PRESET_NONE) { if (preset != MATRIX_API_ROOM_PRESET_NONE) {
GEnumClass *_enum_class = g_type_class_ref(MATRIX_TYPE_API_ROOM_PRESET); gchar *preset_string = enum_to_string(
GEnumValue *enum_value; MATRIX_TYPE_API_ROOM_PRESET, preset, TRUE);
if ((enum_value = g_enum_get_value(
G_ENUM_CLASS(_enum_class),
preset)) != NULL) {
gchar *i;
gchar *value_nick = g_strdup(enum_value->value_nick);
for (i = value_nick; *i; i++) {
if (*i == '-') {
*i = '_';
}
}
if (preset_string) {
json_builder_set_member_name(builder, "preset"); json_builder_set_member_name(builder, "preset");
json_builder_add_string_value(builder, value_nick); json_builder_add_string_value(builder, preset_string);
g_free(value_nick); g_free(preset_string);
} else { } else {
g_debug("Invalid room preset type"); g_debug("Invalid room preset type");
} }
g_type_class_unref(_enum_class);
} }
if (room_alias) { if (room_alias) {
@ -932,30 +945,16 @@ i_create_room(MatrixAPI *api,
} }
if (visibility != MATRIX_API_ROOM_VISIBILITY_DEFAULT) { if (visibility != MATRIX_API_ROOM_VISIBILITY_DEFAULT) {
GEnumClass *_enum_class = g_type_class_ref( gchar *visibility_string = enum_to_string(
MATRIX_TYPE_API_ROOM_VISIBILITY); MATRIX_TYPE_API_ROOM_VISIBILITY, visibility, TRUE);
GEnumValue *enum_value;
if ((enum_value = g_enum_get_value(
G_ENUM_CLASS(_enum_class),
visibility)) != NULL) {
gchar *i;
gchar *value_nick = g_strdup(enum_value->value_nick);
for (i = value_nick; *i; i++) {
if (*i == '-') {
*i = '_';
}
}
if (visibility_string) {
json_builder_set_member_name(builder, "visibility"); json_builder_set_member_name(builder, "visibility");
json_builder_add_string_value(builder, value_nick); json_builder_add_string_value(builder, visibility_string);
g_free(value_nick); g_free(visibility_string);
} else { } else {
g_debug("Invalid room visibility type"); g_debug("Invalid room visibility type");
} }
g_type_class_unref(_enum_class);
} }
json_builder_end_object(builder); json_builder_end_object(builder);
@ -1300,17 +1299,7 @@ i_set_user_presence(MatrixAPI *api,
json_builder_begin_object(builder); json_builder_begin_object(builder);
json_builder_set_member_name(builder, "presence"); json_builder_set_member_name(builder, "presence");
presence_class = g_type_class_ref(MATRIX_TYPE_API_PRESENCE); presence_string = enum_to_string(MATRIX_TYPE_API_PRESENCE, presence, TRUE);
value = g_enum_get_value(presence_class, presence);
presence_string = g_strdup(value->value_nick);
g_type_class_unref(presence_class);
for (a = presence_string; *a; a++) {
if (*a == '-') {
*a = '_';
}
}
json_builder_add_string_value(builder, presence_string); json_builder_add_string_value(builder, presence_string);
g_free(presence_string); g_free(presence_string);