Fix Matrix.Event.Receipt
It lacked chaining up in from_json() and the whole to_json() method
This commit is contained in:
parent
ff6400a94a
commit
51c204cc90
@ -84,5 +84,84 @@ public class Matrix.Event.Receipt : Matrix.Event.Base {
|
|||||||
warning("content.$event-id.m.read is missing from a m.presence event");
|
warning("content.$event-id.m.read is missing from a m.presence event");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
base.from_json(json_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void
|
||||||
|
to_json(Json.Node json_data)
|
||||||
|
throws Matrix.Error
|
||||||
|
{
|
||||||
|
Json.Node? node;
|
||||||
|
|
||||||
|
if (_room_id == null) {
|
||||||
|
throw new Matrix.Error.INCOMPLETE(
|
||||||
|
"Won't generate a m.receipt without room_id");
|
||||||
|
}
|
||||||
|
|
||||||
|
var root = json_data.get_object();
|
||||||
|
var content_root = root.get_member("content").get_object();
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
_receipt_data.foreach((key, value) => {
|
||||||
|
Json.Object event_object;
|
||||||
|
Json.Object type_object;
|
||||||
|
Json.Object user_object;
|
||||||
|
|
||||||
|
if (key.event_id == null) {
|
||||||
|
throw new Matrix.Error.INCOMPLETE(
|
||||||
|
"Won't generate a m.receipt event with an empty event ID");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key.typ == null) {
|
||||||
|
throw new Matrix.Error.INCOMPLETE(
|
||||||
|
"Won't generate a m.receipt event with an empty receipt type");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key.user == null) {
|
||||||
|
throw new Matrix.Error.INCOMPLETE(
|
||||||
|
"Won't generate a m.receipt event with an empty user ID");
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
|
|
||||||
|
if ((node = content_root.get_member(key.event_id)) == null) {
|
||||||
|
event_object = new Json.Object();
|
||||||
|
node = new Json.Node(Json.NodeType.OBJECT);
|
||||||
|
node.set_object(event_object);
|
||||||
|
content_root.set_member(key.event_id, node);
|
||||||
|
} else {
|
||||||
|
event_object = node.get_object();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((node = event_object.get_member(key.typ)) == null) {
|
||||||
|
type_object = new Json.Object();
|
||||||
|
node = new Json.Node(Json.NodeType.OBJECT);
|
||||||
|
node.set_object(type_object);
|
||||||
|
event_object.set_member(key.typ, node);
|
||||||
|
} else {
|
||||||
|
type_object = node.get_object();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((node = type_object.get_member(key.user)) == null) {
|
||||||
|
user_object = new Json.Object();
|
||||||
|
node = new Json.Node(Json.NodeType.OBJECT);
|
||||||
|
node.set_object(user_object);
|
||||||
|
type_object.set_member(key.user, node);
|
||||||
|
} else {
|
||||||
|
user_object = node.get_object();
|
||||||
|
}
|
||||||
|
|
||||||
|
user_object.set_int_member("ts", value);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (i == 0) {
|
||||||
|
throw new Matrix.Error.INCOMPLETE(
|
||||||
|
"Won't generate a m.receipt event with no receipts");
|
||||||
|
}
|
||||||
|
|
||||||
|
root.set_string_member("room_id", _room_id);
|
||||||
|
|
||||||
|
base.to_json(json_data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user