Port MatrixFilterRules to C
This commit is contained in:
parent
57a519b8db
commit
5108a2a825
@ -285,3 +285,418 @@ matrix_json_compact_get_type(void)
|
|||||||
|
|
||||||
return matrix_json_compact_type_id__volatile;
|
return matrix_json_compact_type_id__volatile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
guint64 _limit;
|
||||||
|
gchar **_types;
|
||||||
|
guint _types_len;
|
||||||
|
gchar **_excluded_types;
|
||||||
|
guint _excluded_types_len;
|
||||||
|
gchar **_senders;
|
||||||
|
guint _senders_len;
|
||||||
|
gchar **_excluded_senders;
|
||||||
|
guint _excluded_senders_len;
|
||||||
|
gchar **_rooms;
|
||||||
|
guint _rooms_len;
|
||||||
|
gchar **_excluded_rooms;
|
||||||
|
guint _excluded_rooms_len;
|
||||||
|
} MatrixFilterRulesPrivate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MatrixFilterRules:
|
||||||
|
*
|
||||||
|
* Class to hold filtering rules.
|
||||||
|
*/
|
||||||
|
G_DEFINE_TYPE_WITH_PRIVATE(MatrixFilterRules, matrix_filter_rules, MATRIX_TYPE_JSON_COMPACT)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* STR_ARRAY_TO_JSON:
|
||||||
|
* @PRIV: (not nullable): a variable that holds a #MatrixFilterRulesPrivate struct
|
||||||
|
* @BUILDER: (not nullable): A #JsonBuilder object to use for array building. It must have an
|
||||||
|
* object opened with json_builder_begin_object()
|
||||||
|
* @NAME: (not nullable) (transfer none): the name of the array within the opened object
|
||||||
|
*
|
||||||
|
* Creates a new array with @NAME in the currently open object of @BUILDER. To do so, it will
|
||||||
|
* use the field of the same name from @PRIV.
|
||||||
|
*/
|
||||||
|
#define STR_ARRAY_TO_JSON(PRIV, BUILDER, NAME) \
|
||||||
|
if ((PRIV)->_ ## NAME ## _len != 0) { \
|
||||||
|
guint i; \
|
||||||
|
\
|
||||||
|
json_builder_set_member_name((BUILDER), #NAME); \
|
||||||
|
json_builder_begin_array((BUILDER)); \
|
||||||
|
\
|
||||||
|
for (i = 0; i < (PRIV)->_ ## NAME ## _len; i++) { \
|
||||||
|
json_builder_add_string_value((BUILDER), (PRIV)->_ ## NAME [i]); \
|
||||||
|
}; \
|
||||||
|
\
|
||||||
|
json_builder_end_array((BUILDER)); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
if ((PRIV)->_excluded_ ## NAME ## _len != 0) { \
|
||||||
|
guint i; \
|
||||||
|
\
|
||||||
|
json_builder_set_member_name((BUILDER), "not_" #NAME); \
|
||||||
|
json_builder_begin_array((BUILDER)); \
|
||||||
|
\
|
||||||
|
for (i = 0; i < (PRIV)->_excluded_ ## NAME ## _len; i++) { \
|
||||||
|
json_builder_add_string_value((BUILDER), (PRIV)->_excluded_ ## NAME [i]); \
|
||||||
|
}; \
|
||||||
|
\
|
||||||
|
json_builder_end_array((BUILDER)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static JsonNode *
|
||||||
|
matrix_filter_rules_get_json_node(MatrixJsonCompact *matrix_json_compact, GError **error)
|
||||||
|
{
|
||||||
|
MatrixFilterRules *matrix_filter_rules;
|
||||||
|
MatrixFilterRulesPrivate *priv;
|
||||||
|
|
||||||
|
g_return_val_if_fail(matrix_json_compact != NULL, NULL);
|
||||||
|
|
||||||
|
matrix_filter_rules = (MatrixFilterRules *)matrix_json_compact;
|
||||||
|
priv = matrix_filter_rules_get_instance_private(matrix_filter_rules);
|
||||||
|
|
||||||
|
JsonNode* result = NULL;
|
||||||
|
JsonBuilder* builder = NULL;
|
||||||
|
|
||||||
|
builder = json_builder_new ();
|
||||||
|
json_builder_begin_object (builder);
|
||||||
|
json_builder_set_member_name (builder, "limit");
|
||||||
|
json_builder_add_int_value (builder, (gint64)priv->_limit);
|
||||||
|
|
||||||
|
STR_ARRAY_TO_JSON(priv, builder, rooms);
|
||||||
|
STR_ARRAY_TO_JSON(priv, builder, senders);
|
||||||
|
STR_ARRAY_TO_JSON(priv, builder, types);
|
||||||
|
|
||||||
|
json_builder_end_object(builder);
|
||||||
|
result = json_builder_get_root (builder);
|
||||||
|
g_object_unref(builder);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef STR_ARRAY_TO_JSON
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_construct:
|
||||||
|
* @object_type: the #GType of the object to construct. This must be derived from
|
||||||
|
* #MatrixJsonCompact.
|
||||||
|
*
|
||||||
|
* Construct a new #MatrixFilterRules object.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): a new #MatrixFilterRules object
|
||||||
|
*/
|
||||||
|
MatrixFilterRules *
|
||||||
|
matrix_filter_rules_construct(GType object_type)
|
||||||
|
{
|
||||||
|
return (MatrixFilterRules *)matrix_json_compact_construct(object_type);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_new:
|
||||||
|
*
|
||||||
|
* Create a new #MatrixFilterRules object with a reference count of 1.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): a new #MatrixFilterRules object
|
||||||
|
*/
|
||||||
|
MatrixFilterRules *
|
||||||
|
matrix_filter_rules_new(void)
|
||||||
|
{
|
||||||
|
return matrix_filter_rules_construct(MATRIX_TYPE_FILTER_RULES);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_get_limit:
|
||||||
|
* @filter_rules: a #MatrixFilterRules object
|
||||||
|
*
|
||||||
|
* Get the message count limit defined in @filter_rules.
|
||||||
|
*
|
||||||
|
* Returns: the message count limit
|
||||||
|
*/
|
||||||
|
guint
|
||||||
|
matrix_filter_rules_get_limit(MatrixFilterRules *matrix_filter_rules)
|
||||||
|
{
|
||||||
|
MatrixFilterRulesPrivate *priv;
|
||||||
|
|
||||||
|
g_return_val_if_fail(matrix_filter_rules != NULL, 0);
|
||||||
|
|
||||||
|
priv = matrix_filter_rules_get_instance_private(matrix_filter_rules);
|
||||||
|
|
||||||
|
return priv->_limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_set_limit:
|
||||||
|
* @filter_rules: a #MatrixFilterRules object
|
||||||
|
* @limit: the message count limit
|
||||||
|
*
|
||||||
|
* Set the message count limit in @filter_rules.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
matrix_filter_rules_set_limit(MatrixFilterRules *matrix_filter_rules, guint limit)
|
||||||
|
{
|
||||||
|
MatrixFilterRulesPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail(matrix_filter_rules != NULL);
|
||||||
|
|
||||||
|
priv = matrix_filter_rules_get_instance_private(matrix_filter_rules);
|
||||||
|
|
||||||
|
priv->_limit = limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline gchar **
|
||||||
|
copy_str_array(gchar **src, gint n_src)
|
||||||
|
{
|
||||||
|
gchar **dst;
|
||||||
|
|
||||||
|
if (src == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
dst = g_new0(gchar *, n_src);
|
||||||
|
|
||||||
|
for (gint i = 0; i < n_src; i++) {
|
||||||
|
dst[i] = g_strdup(src[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
free_str_array(gchar **list, gint n_list)
|
||||||
|
{
|
||||||
|
gint i = 0;
|
||||||
|
|
||||||
|
if (list == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_return_if_fail(list != NULL);
|
||||||
|
|
||||||
|
for (i = 0; i < n_list; i++) {
|
||||||
|
g_free(list[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* STR_ARRAY_GETTER:
|
||||||
|
* @NAME: the name of a string array in #MatrixFilterRulesPrivate
|
||||||
|
*
|
||||||
|
* Create a getter function for @NAME in #MatrixFilterRulesPrivate.
|
||||||
|
*/
|
||||||
|
#define STR_ARRAY_GETTER(NAME) \
|
||||||
|
gchar ** \
|
||||||
|
matrix_filter_rules_get_ ## NAME (MatrixFilterRules *matrix_filter_rules, gint *n_ ## NAME) \
|
||||||
|
{ \
|
||||||
|
MatrixFilterRulesPrivate * priv; \
|
||||||
|
\
|
||||||
|
g_return_val_if_fail(matrix_filter_rules != NULL, NULL); \
|
||||||
|
\
|
||||||
|
priv = matrix_filter_rules_get_instance_private(matrix_filter_rules); \
|
||||||
|
\
|
||||||
|
if (n_ ## NAME != NULL) { \
|
||||||
|
*n_ ## NAME = priv->_ ## NAME ## _len; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
return priv->_ ## NAME; \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* STR_ARRAY_SETTER:
|
||||||
|
* @NAME: the name of a string array in #MatrixFilterRulesPrivate
|
||||||
|
*
|
||||||
|
* Create a setter function for @NAME in #MatrixFilterRulesPrivate
|
||||||
|
*/
|
||||||
|
#define STR_ARRAY_SETTER(NAME) \
|
||||||
|
void \
|
||||||
|
matrix_filter_rules_set_ ## NAME (MatrixFilterRules *matrix_filter_rules, gchar ** NAME, gint n_ ## NAME) \
|
||||||
|
{ \
|
||||||
|
MatrixFilterRulesPrivate * priv; \
|
||||||
|
\
|
||||||
|
g_return_if_fail(matrix_filter_rules != NULL); \
|
||||||
|
\
|
||||||
|
priv = matrix_filter_rules_get_instance_private(matrix_filter_rules); \
|
||||||
|
\
|
||||||
|
free_str_array(priv->_ ## NAME, priv->_ ## NAME ##_len); \
|
||||||
|
priv->_ ## NAME = copy_str_array(NAME, n_ ## NAME); \
|
||||||
|
priv->_ ## NAME ## _len = n_ ## NAME; \
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_get_types:
|
||||||
|
* @filter_rules: a #MatrixFilterRules object
|
||||||
|
* @n_types: (nullable): placeholder for the length of the returned list, or %NULL to ignore
|
||||||
|
*
|
||||||
|
* Get the list of message types to be included in the filtered results.
|
||||||
|
*
|
||||||
|
* The returned value is owned by @filter_rules and shouldn’t be freed nor modified.
|
||||||
|
*
|
||||||
|
* Returns: (nullable) (transfer none): a list of message types
|
||||||
|
*/
|
||||||
|
STR_ARRAY_GETTER(types);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_set_types:
|
||||||
|
* @filter_rules: a #MatrixFilterRules object
|
||||||
|
* @types: (nullable): a list of message types
|
||||||
|
* @n_types: the number of items in @types
|
||||||
|
*
|
||||||
|
* Set the list of message types to be included in the filtered results.
|
||||||
|
*/
|
||||||
|
STR_ARRAY_SETTER(types);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_get_excluded_types:
|
||||||
|
* @filter_rules: a #MatrixFilterRules object
|
||||||
|
* @n_excluded_types: (nullable): placeholder for the length of the returned list, or %NULL to ignore
|
||||||
|
*
|
||||||
|
* Get the list of message types to be excluded in the filtered results.
|
||||||
|
*
|
||||||
|
* The returned value is owned by @filter_rules and shouldn’t be freed nor modified.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none) (nullable): a list of message types to exclude
|
||||||
|
*/
|
||||||
|
STR_ARRAY_GETTER(excluded_types);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_set_excluded_types:
|
||||||
|
* @filter_rules: a #MatrixFilterRules object
|
||||||
|
* @excluded_types: (nullable): a list of types to exclude
|
||||||
|
* @n_excluded_types: the number of items in @excluded_types
|
||||||
|
*
|
||||||
|
* Set the list of message types to be excluded in the filtered results. The message types in
|
||||||
|
* this list will be excluded even if they would be explicitly included (ie. set with
|
||||||
|
* matrix_filter_rules_set_types()).
|
||||||
|
*/
|
||||||
|
STR_ARRAY_SETTER(excluded_types)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_get_senders:
|
||||||
|
* @filter_rules: a #MatrixFilterRules object
|
||||||
|
* @n_senders: (nullable): placeholder for the length of the returned list, or %NULL to ignore
|
||||||
|
*
|
||||||
|
* Get the list of senders whose messages should to be included in the filtered results.
|
||||||
|
*
|
||||||
|
* The returned value is owned by @filter_rules and shouldn’t be freed nor modified.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none) (nullable): a list of sender Matrix IDs
|
||||||
|
*/
|
||||||
|
STR_ARRAY_GETTER(senders);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_set_senders:
|
||||||
|
* @filter_rules: a #MatrixFilterRules object
|
||||||
|
* @senders: (nullable): a list of Matrix IDs
|
||||||
|
* @n_senders: the number of items in @senders
|
||||||
|
*
|
||||||
|
* Set the list of Matrix IDs whose messages should be included in the filtered results.
|
||||||
|
*/
|
||||||
|
STR_ARRAY_SETTER(senders);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_get_excluded_senders:
|
||||||
|
* @filter_rules: a #MatrixFilterRules object
|
||||||
|
* @n_excluded_senders: (nullable): placeholder for the length of the returned list, or %NULL
|
||||||
|
* to ignore
|
||||||
|
*
|
||||||
|
* Get the list of sender Matrix IDs to be excluded from the filtered results.
|
||||||
|
*
|
||||||
|
* The returned value is owned by @filter_rules and shouldn’t be freed nor modified.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none) (nullable): a list of Matrix IDs to exclude
|
||||||
|
*/
|
||||||
|
STR_ARRAY_GETTER(excluded_senders);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_set_excluded_senders:
|
||||||
|
* @filter_rules: a #MatrixFilterRules object
|
||||||
|
* @excluded_senders: (nullable): a list of Matrix IDs to exclude
|
||||||
|
* @n_excluded_senders: the number of items in @excluded_senders
|
||||||
|
*
|
||||||
|
* Set the list of Matrix IDs whose messages should be excluded from the filtered results.
|
||||||
|
* Messages from Matrix IDs in this list will be excluded even if they would be explicitly
|
||||||
|
* included (ie. set with matrix_filter_rules_set_senders()).
|
||||||
|
*/
|
||||||
|
STR_ARRAY_SETTER(excluded_senders);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_get_rooms:
|
||||||
|
* @filter_rules: a #MatrixFilterRules object
|
||||||
|
* @n_rooms: (nullable): placeholder for the length of the returned list, or %NULL to ignore
|
||||||
|
*
|
||||||
|
* Get the list of rooms to be included in the filtered results.
|
||||||
|
*
|
||||||
|
* The returned value is owned by @filter_rules and shouldn’t be freed nor modified.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none) (nullable): a list of rooms
|
||||||
|
*/
|
||||||
|
STR_ARRAY_GETTER(rooms);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_set_rooms:
|
||||||
|
* @filter_rules: a #MatrixFilterRules object
|
||||||
|
* @rooms: (nullable): a list of room IDs
|
||||||
|
* @n_rooms: the number of items in @rooms
|
||||||
|
*
|
||||||
|
* Set the list of rooms to be included in the filtered results.
|
||||||
|
*/
|
||||||
|
STR_ARRAY_SETTER(rooms);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_get_excluded_rooms:
|
||||||
|
* @filter_rules: a #MatrixFilterRules object
|
||||||
|
* @n_excluded_rooms: (nullable): placeholder for the length of the returned list, or %NULL to ignore
|
||||||
|
*
|
||||||
|
* Get the list of room IDs to be excluded in the filtered results.
|
||||||
|
*
|
||||||
|
* The returned value is owned by @filter_rules and shouldn’t be freed nor modified.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none) (nullable): a list of room IDs to exclude
|
||||||
|
*/
|
||||||
|
STR_ARRAY_GETTER(excluded_rooms);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_filter_rules_set_excluded_rooms:
|
||||||
|
* @filter_rules: a #MatrixFilterRules object
|
||||||
|
* @excluded_rooms: (nullable): a list of room IDs to exclude
|
||||||
|
* @n_excluded_rooms: the number of items in @excluded_rooms
|
||||||
|
*
|
||||||
|
* Set the list of room IDs to be excluded from the filtered results. The room IDs in this
|
||||||
|
* list will be excluded even if they would be explicitly included (ie. set with
|
||||||
|
* matrix_filter_rules_set_rooms()).
|
||||||
|
*/
|
||||||
|
STR_ARRAY_SETTER(excluded_rooms);
|
||||||
|
|
||||||
|
static void
|
||||||
|
matrix_filter_rules_finalize (MatrixJsonCompact *matrix_json_compact)
|
||||||
|
{
|
||||||
|
MatrixFilterRules *matrix_filter_rules;
|
||||||
|
MatrixFilterRulesPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail(matrix_json_compact != NULL);
|
||||||
|
|
||||||
|
matrix_filter_rules = MATRIX_FILTER_RULES(matrix_json_compact);
|
||||||
|
priv = matrix_filter_rules_get_instance_private(matrix_filter_rules);
|
||||||
|
priv->_types = (free_str_array(priv->_types, priv->_types_len), NULL);
|
||||||
|
priv->_excluded_types = (free_str_array(priv->_excluded_types, priv->_excluded_types_len), NULL);
|
||||||
|
priv->_senders = (free_str_array(priv->_senders, priv->_senders_len), NULL);
|
||||||
|
priv->_excluded_senders = (free_str_array(priv->_excluded_senders, priv->_excluded_senders_len), NULL);
|
||||||
|
priv->_rooms = (free_str_array(priv->_rooms, priv->_rooms_len), NULL);
|
||||||
|
priv->_excluded_rooms = (free_str_array(priv->_excluded_rooms, priv->_excluded_rooms_len), NULL);
|
||||||
|
|
||||||
|
MATRIX_JSON_COMPACT_CLASS(matrix_filter_rules_parent_class)->finalize(matrix_json_compact);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
matrix_filter_rules_class_init(MatrixFilterRulesClass *klass)
|
||||||
|
{
|
||||||
|
((MatrixJsonCompactClass *)klass)->finalize = matrix_filter_rules_finalize;
|
||||||
|
((MatrixJsonCompactClass *)klass)->get_json_node = (JsonNode* (*) (MatrixJsonCompact *, GError**)) matrix_filter_rules_get_json_node;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
matrix_filter_rules_init(MatrixFilterRules *matrix_filter_rules)
|
||||||
|
{}
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
# include <glib-object.h>
|
# include <glib-object.h>
|
||||||
# include <json-glib/json-glib.h>
|
# include <json-glib/json-glib.h>
|
||||||
|
|
||||||
|
# include "matrix-types.h"
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
# define MATRIX_TYPE_JSON_COMPACT matrix_json_compact_get_type()
|
# define MATRIX_TYPE_JSON_COMPACT matrix_json_compact_get_type()
|
||||||
@ -56,6 +58,30 @@ MatrixJsonCompact *matrix_json_compact_ref(MatrixJsonCompact *json_compact);
|
|||||||
JsonNode *matrix_json_compact_get_json_node(MatrixJsonCompact *json_compact, GError **error);
|
JsonNode *matrix_json_compact_get_json_node(MatrixJsonCompact *json_compact, GError **error);
|
||||||
gchar *matrix_json_compact_get_json_data(MatrixJsonCompact *json_compact, gsize *datalen, GError **error);
|
gchar *matrix_json_compact_get_json_data(MatrixJsonCompact *json_compact, gsize *datalen, GError **error);
|
||||||
|
|
||||||
|
#define MATRIX_TYPE_FILTER_RULES matrix_filter_rules_get_type()
|
||||||
|
G_DECLARE_DERIVABLE_TYPE(MatrixFilterRules, matrix_filter_rules, MATRIX, FILTER_RULES, MatrixJsonCompact);
|
||||||
|
|
||||||
|
struct _MatrixFilterRulesClass {
|
||||||
|
MatrixJsonCompactClass parent_class;
|
||||||
|
};
|
||||||
|
|
||||||
|
MatrixFilterRules *matrix_filter_rules_new(void);
|
||||||
|
MatrixFilterRules *matrix_filter_rules_construct(GType object_type);
|
||||||
|
void matrix_filter_rules_set_limit(MatrixFilterRules *filter_rules, guint limit);
|
||||||
|
guint matrix_filter_rules_get_limit(MatrixFilterRules *filter_rules);
|
||||||
|
void matrix_filter_rules_set_types(MatrixFilterRules *filter_rules, gchar **types, int n_types);
|
||||||
|
gchar **matrix_filter_rules_get_types(MatrixFilterRules *filter_rules, int *n_types);
|
||||||
|
void matrix_filter_rules_set_excluded_types(MatrixFilterRules *filter_rules, gchar **excluded_types, int n_excluded_types);
|
||||||
|
gchar **matrix_filter_rules_get_excluded_types(MatrixFilterRules *filter_rules, int *n_excluded_types);
|
||||||
|
void matrix_filter_rules_set_senders(MatrixFilterRules *filter_rules, gchar **senders, int n_senders);
|
||||||
|
gchar **matrix_filter_rules_get_senders(MatrixFilterRules *filter_rules, int *n_senders);
|
||||||
|
void matrix_filter_rules_set_excluded_senders(MatrixFilterRules *filter_rules, gchar **excluded_senders, int n_excluded_senders);
|
||||||
|
gchar **matrix_filter_rules_get_excluded_senders(MatrixFilterRules *filter_rules, int *n_excluded_senders);
|
||||||
|
void matrix_filter_rules_set_rooms(MatrixFilterRules *filter_rules, gchar **rooms, int n_rooms);
|
||||||
|
gchar **matrix_filter_rules_get_rooms(MatrixFilterRules *filter_rules, int *n_rooms);
|
||||||
|
void matrix_filter_rules_set_excluded_rooms(MatrixFilterRules *filter_rules, gchar **excluded_rooms, int n_excluded_rooms);
|
||||||
|
gchar **matrix_filter_rules_get_excluded_rooms(MatrixFilterRules *filter_rules, int *n_excluded_rooms);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __MATRIX_GLIB_SDK_COMPACTS_H__ */
|
#endif /* __MATRIX_GLIB_SDK_COMPACTS_H__ */
|
||||||
|
@ -144,124 +144,6 @@ namespace Matrix {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Class to hold filtering rules.
|
|
||||||
*/
|
|
||||||
public class FilterRules : JsonCompact {
|
|
||||||
/**
|
|
||||||
* The limit of the count of returned events.
|
|
||||||
*/
|
|
||||||
public uint limit { get; set; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of message types to include in the filtered result.
|
|
||||||
*/
|
|
||||||
public string[] types { get; set; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of message types to exclude from the filtered
|
|
||||||
* result. A matching type will be excluded from the result
|
|
||||||
* even if it is listed in the types to include.
|
|
||||||
*/
|
|
||||||
public string[] excluded_types { get; set; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of senders to include in the filtered results.
|
|
||||||
*/
|
|
||||||
public string[] senders { get; set; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of senders to exclude from the filtered result. A
|
|
||||||
* matching sender will be excluded from the result even if it
|
|
||||||
* is listed in the senders to include.
|
|
||||||
*/
|
|
||||||
public string[] excluded_senders { get; set; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of rooms to include in the filtered results.
|
|
||||||
*/
|
|
||||||
public string[] rooms { get; set; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of rooms to exclude from the filtered result. A
|
|
||||||
* matching room will be excluded from the result even if it
|
|
||||||
* is listed in the rooms to include.
|
|
||||||
*/
|
|
||||||
public string[] excluded_rooms { get; set; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the filtering rules 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("limit");
|
|
||||||
builder.add_int_value(limit);
|
|
||||||
|
|
||||||
if (rooms != null) {
|
|
||||||
builder.set_member_name("rooms");
|
|
||||||
builder.begin_array();
|
|
||||||
foreach (var entry in rooms) {
|
|
||||||
builder.add_string_value(entry);
|
|
||||||
}
|
|
||||||
builder.end_array();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (excluded_rooms != null) {
|
|
||||||
builder.set_member_name("not_rooms");
|
|
||||||
builder.begin_array();
|
|
||||||
foreach (var entry in excluded_rooms) {
|
|
||||||
builder.add_string_value(entry);
|
|
||||||
}
|
|
||||||
builder.end_array();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (senders != null) {
|
|
||||||
builder.set_member_name("senders");
|
|
||||||
builder.begin_array();
|
|
||||||
foreach (var entry in senders) {
|
|
||||||
builder.add_string_value(entry);
|
|
||||||
}
|
|
||||||
builder.end_array();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (excluded_senders != null) {
|
|
||||||
builder.set_member_name("not_senders");
|
|
||||||
builder.begin_array();
|
|
||||||
foreach (var entry in excluded_senders) {
|
|
||||||
builder.add_string_value(entry);
|
|
||||||
}
|
|
||||||
builder.end_array();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (types != null) {
|
|
||||||
builder.set_member_name("types");
|
|
||||||
builder.begin_array();
|
|
||||||
foreach (var entry in types) {
|
|
||||||
builder.add_string_value(entry);
|
|
||||||
}
|
|
||||||
builder.end_array();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (excluded_types != null) {
|
|
||||||
builder.set_member_name("not_types");
|
|
||||||
builder.begin_array();
|
|
||||||
foreach(var entry in types) {
|
|
||||||
builder.add_string_value(entry);
|
|
||||||
}
|
|
||||||
builder.end_array();
|
|
||||||
}
|
|
||||||
|
|
||||||
builder.end_object();
|
|
||||||
|
|
||||||
return builder.get_root();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class to hold 3rd party credential related data.
|
* Class to hold 3rd party credential related data.
|
||||||
*/
|
*/
|
||||||
|
@ -296,6 +296,19 @@ namespace Matrix {
|
|||||||
throws Matrix.Error;
|
throws Matrix.Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[CCode (cheader_filename = "matrix-c-compacts.h")]
|
||||||
|
public class FilterRules : JsonCompact {
|
||||||
|
public uint limit { get; set; }
|
||||||
|
public string[] types { get; set; }
|
||||||
|
public string[] excluded_types { get; set; }
|
||||||
|
public string[] senders { get; set; }
|
||||||
|
public string[] excluded_senders { get; set; }
|
||||||
|
public string[] rooms { get; set; }
|
||||||
|
public string[] excluded_rooms { get; set; }
|
||||||
|
public override Json.Node? get_json_node()
|
||||||
|
throws Matrix.Error;
|
||||||
|
}
|
||||||
|
|
||||||
/* Utilities */
|
/* Utilities */
|
||||||
[CCode (cheader_filename = "utils.h", cname = "_matrix_g_enum_to_string")]
|
[CCode (cheader_filename = "utils.h", cname = "_matrix_g_enum_to_string")]
|
||||||
public string? _g_enum_value_to_nick(GLib.Type enum_type, int value, bool convert_dashes = true);
|
public string? _g_enum_value_to_nick(GLib.Type enum_type, int value, bool convert_dashes = true);
|
||||||
|
Loading…
Reference in New Issue
Block a user