From 033139672ff36b52cf288e0fbef3263fd9a9be43 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Wed, 27 Jan 2016 14:14:56 +0100 Subject: [PATCH] Add type MatrixUnsignedEventData --- .../matrix-glib/matrix-glib-sections.txt | 16 ++++ src/matrix-compacts.vala | 74 +++++++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/docs/reference/matrix-glib/matrix-glib-sections.txt b/docs/reference/matrix-glib/matrix-glib-sections.txt index f3db883..ba61c43 100644 --- a/docs/reference/matrix-glib/matrix-glib-sections.txt +++ b/docs/reference/matrix-glib/matrix-glib-sections.txt @@ -194,6 +194,20 @@ matrix_presence_event_get_presence matrix_presence_event_set_last_active_ago matrix_presence_event_get_last_active_ago + +MatrixUnsignedEventData +matrix_unsigned_event_data_new +matrix_unsigned_event_data_new_from_json +matrix_unsigned_event_data_ref +matrix_unsigned_event_data_unref +matrix_unsigned_event_data_set_age +matrix_unsigned_event_data_get_age +matrix_unsigned_event_data_set_redact_reason +matrix_unsigned_event_data_get_redact_reason +matrix_unsigned_event_data_set_transaction_id +matrix_unsigned_event_data_get_transaction_id +matrix_unsigned_event_data_get_json_node + MATRIX_TYPE_EVENT_FORMAT matrix_event_format_get_type @@ -229,6 +243,8 @@ MATRIX_TYPE_STATE_EVENT matrix_state_event_get_type MATRIX_TYPE_PRESENCE_EVENT matrix_presence_event_get_type +MATRIX_TYPE_UNSIGNED_EVENT_DATA +matrix_unsigned_event_data_get_type
diff --git a/src/matrix-compacts.vala b/src/matrix-compacts.vala index fc2945f..ba3a153 100644 --- a/src/matrix-compacts.vala +++ b/src/matrix-compacts.vala @@ -724,4 +724,78 @@ namespace Matrix { return ret; } + + /** + * Class to hold unsigned event data, like event age, redact + * reason or a transaction ID. + */ + public class UnsignedEventData : JsonCompact { + /** + * The age of the event, in seconds. + */ + public uint age { get; set; default = 0; } + + /** + * The reason of redaction, if any. + */ + public string? redact_reason { get; set; default = null; } + + /** + * The transaction ID of the message. + */ + public string? transaction_id { get; set; default = null; } + + /** + * Create an UnsignedEventData object based + * on @param json_data. + */ + public + UnsignedEventData.from_json(Json.Node json_data) + requires(json_data.get_node_type() == Json.NodeType.OBJECT) + { + var root = json_data.get_object(); + Json.Node node; + + if ((node = root.get_member("age")) != null) { + age = (uint)node.get_int(); + } + + if ((node = root.get_member("redacted_because")) != null) { + redact_reason = node.get_string(); + } + + if ((node = root.get_member("transaction_id")) != null) { + transaction_id = node.get_string(); + } + } + + /** + * Get the unsigned event data as a JSON node. + */ + public override Json.Node? + get_json_node() + throws Matrix.Error + { + var builder = new Json.Builder(); + + builder.begin_object(); + + builder.set_member_name("age"); + builder.add_int_value(age); + + if (redact_reason != null) { + builder.set_member_name("redacted_because"); + builder.add_string_value(redact_reason); + } + + if (transaction_id != null) { + builder.set_member_name("transaction_id"); + builder.add_string_value(transaction_id); + } + + builder.end_object(); + + return builder.get_root(); + } + } }