matrix-glib-sdk/src/matrix-compacts.vala

280 lines
8.1 KiB
Vala
Raw Normal View History

2016-02-27 06:51:04 +00:00
/*
* This file is part of matrix-glib-sdk
*
* matrix-glib-sdk is free software: you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation, either
* version 3 of the License, or (at your option) any later version.
*
* matrix-glib-sdk is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with matrix-glib-sdk. If not, see
* <http://www.gnu.org/licenses/>.
*/
2016-02-27 06:51:04 +00:00
namespace Matrix {
2016-02-29 13:45:14 +00:00
public class EventContext : JsonCompact {
public int before_limit { get; set; default = -1; }
public int after_limit { get; set; default = -1; }
public bool include_profile { get; set; default = false; }
2016-02-29 13:45:14 +00:00
public override Json.Node?
get_json_node()
throws Matrix.Error
{
var builder = new Json.Builder();
builder.begin_object();
if (before_limit >= 0) {
2016-02-29 13:45:14 +00:00
builder.set_member_name("before_limit");
builder.add_int_value(before_limit);
}
if (after_limit >= 0) {
2016-02-29 13:45:14 +00:00
builder.set_member_name("after_limit");
builder.add_int_value(after_limit);
}
builder.set_member_name("include_profile");
builder.add_boolean_value(include_profile);
2016-02-29 13:45:14 +00:00
builder.end_object();
return builder.get_root();
}
}
public class SearchGrouping : JsonCompact {
2016-03-18 09:55:22 +00:00
public SearchGroupBy key { get; set; default = SearchGroupBy.NONE; }
2016-02-29 13:45:14 +00:00
public override Json.Node?
get_json_node()
throws Matrix.Error
{
2016-03-18 09:55:22 +00:00
if (key == SearchGroupBy.NONE) {
return null;
2016-02-29 13:45:14 +00:00
}
var builder = new Json.Builder();
builder.begin_object();
builder.set_member_name("key");
builder.add_string_value(
_g_enum_value_to_nick(typeof(SearchGroupBy), key, true));
builder.end_object();
return builder.get_root();
}
}
public class SearchGroupings : JsonCompact {
2016-03-17 10:04:26 +00:00
public SearchGrouping[] group_by { get; set; }
2016-02-29 13:45:14 +00:00
public override Json.Node?
get_json_node()
throws Matrix.Error
{
if (group_by == null) {
return null;
}
var builder = new Json.Builder();
builder.begin_object();
builder.set_member_name("group_by");
builder.begin_array();
2016-03-18 09:55:22 +00:00
int count = 0;
2016-02-29 13:45:14 +00:00
foreach (var entry in group_by) {
var node = entry.get_json_node();
if (node != null) {
2016-03-18 09:55:22 +00:00
count++;
2016-02-29 13:45:14 +00:00
builder.add_value(node);
}
}
2016-03-18 09:55:22 +00:00
if (count == 0) {
return null;
}
2016-02-29 13:45:14 +00:00
builder.end_array();
builder.end_object();
return builder.get_root();
}
}
public class SearchRoomEvents : JsonCompact {
2016-03-17 10:04:26 +00:00
public SearchOrder order_by { get; set; default = SearchOrder.RECENT; }
public SearchKey[] keys { get; set; }
2016-02-29 13:45:14 +00:00
public EventContext? event_context { get; set; default = null; }
public bool include_state { get; set; default = false; }
2016-02-29 13:45:14 +00:00
public string? filter_id { get; set; default = null; }
public Filter? filter { get; set; default = null; }
public string search_term { get; set; }
public SearchGroupings? groupings { get; set; default = null; }
public override Json.Node?
get_json_node()
throws Matrix.Error
{
Json.Node? node = null;
var builder = new Json.Builder();
if ((filter_id != null) && (filter != null)) {
throw new Matrix.Error.INCOMPLETE(
"filter and filter_id is exclusive to each other");
}
builder.begin_object();
2016-03-17 10:04:26 +00:00
builder.set_member_name("order_by");
builder.add_string_value(
_g_enum_value_to_nick(typeof(SearchOrder), order_by));
2016-02-29 13:45:14 +00:00
2016-03-17 10:04:26 +00:00
if (keys.length > 0) {
2016-02-29 13:45:14 +00:00
EnumClass key_class = (EnumClass)(typeof(SearchKey).class_ref());
var key_array = new Json.Array();
foreach (var entry in keys) {
2016-03-17 10:04:26 +00:00
unowned EnumValue? key_value = key_class.get_value(entry);
2016-02-29 13:45:14 +00:00
2016-03-17 10:04:26 +00:00
if (key_value != null) {
key_array.add_string_element(
key_value.value_nick.replace("-", "."));
2016-02-29 13:45:14 +00:00
}
}
if (key_array.get_length() > 0) {
node = new Json.Node(Json.NodeType.ARRAY);
node.set_array(key_array);
builder.set_member_name("keys");
builder.add_value(node);
}
}
if ((event_context != null)
&& ((node = event_context.get_json_node()) != null)) {
builder.set_member_name("event_context");
builder.add_value(node);
}
builder.set_member_name("include_state");
builder.add_boolean_value(include_state);
2016-02-29 13:45:14 +00:00
if ((filter != null)
&& ((node = filter.get_json_node()) != null)) {
builder.set_member_name("filter");
builder.add_value(node);
}
if (filter_id != null) {
builder.set_member_name("filter");
builder.add_string_value(filter_id);
}
builder.set_member_name("search_term");
builder.add_string_value(search_term);
if ((groupings != null)
&& ((node = groupings.get_json_node()) != null)) {
builder.set_member_name("groupings");
builder.add_value(node);
}
builder.end_object();
return builder.get_root();
}
}
public class SearchCategories : JsonCompact {
public SearchRoomEvents? room_events { get; set; default = null; }
public override Json.Node?
get_json_node()
throws Matrix.Error
{
Json.Node? node = null;
if ((room_events == null)
&& ((node = room_events.get_json_node()) != null)) {
return null;
}
var builder = new Json.Builder();
builder.begin_object();
builder.set_member_name("room_events");
builder.add_value(node);
builder.end_object();
2016-01-27 13:14:56 +00:00
return builder.get_root();
}
}
2016-02-19 15:13:42 +00:00
public Json.Node?
_json_node_deep_copy(Json.Node? node)
{
Json.Node ret;
if (node == null) {
return null;
}
ret = new Json.Node(node.get_node_type());
switch (node.get_node_type()) {
case Json.NodeType.OBJECT:
var new_obj = new Json.Object();
node.get_object().foreach_member(
(old_obj, member_name, member_node) => {
new_obj.set_member(
member_name,
_json_node_deep_copy(member_node));
});
ret.set_object(new_obj);
break;
case Json.NodeType.ARRAY:
var new_ary = new Json.Array();
node.get_array().foreach_element(
(old_ary, idx, element_node) => {
new_ary.add_element(
_json_node_deep_copy(element_node));
});
break;
case Json.NodeType.VALUE:
ret.set_value(node.get_value());
break;
case Json.NodeType.NULL:
break;
}
return ret;
}
2016-02-27 06:51:04 +00:00
}