Make MatrixAPIFilter a boxed type
This commit is contained in:
parent
512020a0ea
commit
72f317a941
@ -72,6 +72,23 @@ matrix_api_room_filter_get_timeline
|
|||||||
matrix_api_room_filter_get_json_node
|
matrix_api_room_filter_get_json_node
|
||||||
matrix_api_room_filter_get_json_data
|
matrix_api_room_filter_get_json_data
|
||||||
|
|
||||||
|
<SUBSECTION>
|
||||||
|
MatrixAPIFilter
|
||||||
|
matrix_api_filter_new
|
||||||
|
matrix_api_filter_ref
|
||||||
|
matrix_api_filter_unref
|
||||||
|
matrix_api_filter_set_event_fields
|
||||||
|
matrix_api_filter_add_event_field
|
||||||
|
matrix_api_filter_delete_event_field
|
||||||
|
matrix_api_filter_get_event_fields
|
||||||
|
matrix_api_filter_set_event_format
|
||||||
|
matrix_api_filter_get_event_format
|
||||||
|
matrix_api_filter_set_presence_filter
|
||||||
|
matrix_api_filter_get_presence_filter
|
||||||
|
matrix_api_filter_set_room_filter
|
||||||
|
matrix_api_filter_get_room_filter
|
||||||
|
|
||||||
|
|
||||||
<SUBSECTION Standard>
|
<SUBSECTION Standard>
|
||||||
MATRIX_TYPE_API_EVENT_FORMAT
|
MATRIX_TYPE_API_EVENT_FORMAT
|
||||||
matrix_api_event_format_get_type
|
matrix_api_event_format_get_type
|
||||||
@ -79,6 +96,8 @@ MATRIX_TYPE_API_FILTER_RULES
|
|||||||
matrix_api_filter_rules_get_type
|
matrix_api_filter_rules_get_type
|
||||||
MATRIX_TYPE_API_ROOM_FILTER
|
MATRIX_TYPE_API_ROOM_FILTER
|
||||||
matrix_api_room_filter_get_type
|
matrix_api_room_filter_get_type
|
||||||
|
MATRIX_TYPE_API_FILTER
|
||||||
|
matrix_api_filter_get_type
|
||||||
</SECTION>
|
</SECTION>
|
||||||
|
|
||||||
<SECTION>
|
<SECTION>
|
||||||
@ -189,7 +208,6 @@ MatrixAPIError
|
|||||||
MATRIX_API_ERROR
|
MATRIX_API_ERROR
|
||||||
|
|
||||||
<SUBSECTION>
|
<SUBSECTION>
|
||||||
MatrixAPIFilter
|
|
||||||
MatrixAPIStateEvent
|
MatrixAPIStateEvent
|
||||||
MatrixAPI3PidCredential
|
MatrixAPI3PidCredential
|
||||||
|
|
||||||
|
@ -1071,3 +1071,268 @@ matrix_api_room_filter_get_json_data(MatrixAPIRoomFilter *filter,
|
|||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MatrixAPIFilter:
|
||||||
|
*
|
||||||
|
* An opaque structure to hold an event filter.
|
||||||
|
*/
|
||||||
|
struct _MatrixAPIFilter {
|
||||||
|
GList *event_fields;
|
||||||
|
MatrixAPIEventFormat event_format;
|
||||||
|
MatrixAPIFilterRules *presence;
|
||||||
|
MatrixAPIRoomFilter *room;
|
||||||
|
guint refcount;
|
||||||
|
};
|
||||||
|
|
||||||
|
G_DEFINE_BOXED_TYPE(MatrixAPIFilter, matrix_api_filter,
|
||||||
|
(GBoxedCopyFunc)matrix_api_filter_ref,
|
||||||
|
(GBoxedFreeFunc)matrix_api_filter_unref);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_api_filter_new:
|
||||||
|
*
|
||||||
|
* Create a new #MatrixAPIFilter object with reference count of 1.
|
||||||
|
*
|
||||||
|
* Returns: (transfer full): a new #MatrixAPIFilter
|
||||||
|
*/
|
||||||
|
MatrixAPIFilter *
|
||||||
|
matrix_api_filter_new(void)
|
||||||
|
{
|
||||||
|
MatrixAPIFilter *filter;
|
||||||
|
|
||||||
|
filter = g_new0(MatrixAPIFilter, 1);
|
||||||
|
filter->refcount = 1;
|
||||||
|
|
||||||
|
return filter;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
matrix_api_filter_free(MatrixAPIFilter *filter)
|
||||||
|
{
|
||||||
|
g_list_free_full(filter->event_fields, g_free);
|
||||||
|
|
||||||
|
if (filter->presence) {
|
||||||
|
matrix_api_filter_rules_unref(filter->presence);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filter->room) {
|
||||||
|
matrix_api_room_filter_unref(filter->room);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free(filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_api_filter_ref:
|
||||||
|
* @filter: a #MatrixAPIFilter
|
||||||
|
*
|
||||||
|
* Increase reference count of @filter by one.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none): the same #MatrixAPIFilter
|
||||||
|
*/
|
||||||
|
MatrixAPIFilter *
|
||||||
|
matrix_api_filter_ref(MatrixAPIFilter *filter)
|
||||||
|
{
|
||||||
|
filter->refcount++;
|
||||||
|
|
||||||
|
return filter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_api_filter_unref:
|
||||||
|
* @filter: a #MatrixAPIFilter
|
||||||
|
*
|
||||||
|
* Decrease reference count of @filter by one. If reference count
|
||||||
|
* reaches zero, @filter is freed.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
matrix_api_filter_unref(MatrixAPIFilter *filter)
|
||||||
|
{
|
||||||
|
if (--filter->refcount == 0) {
|
||||||
|
matrix_api_filter_free(filter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_api_filter_set_event_fields:
|
||||||
|
* @filter: a #MatrixAPIFilter
|
||||||
|
* @event_fields: (in) (element-type utf8) (transfer full) (allow-none):
|
||||||
|
* a list of event fields to include. If %NULL then all
|
||||||
|
* fields are included. The entries may include
|
||||||
|
* <code>.</code> charaters to indicate sub-fields. So
|
||||||
|
* <code>['content.body']</code> will include the
|
||||||
|
* <code>body</code> field of the <code>content</code>
|
||||||
|
* object. A literal <code>.</code> character in a
|
||||||
|
* field name may be escaped using a <code>\</code>. A
|
||||||
|
* server may include more fields than were requested
|
||||||
|
*
|
||||||
|
* Set the event fields to include in the filtered events.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
matrix_api_filter_set_event_fields(MatrixAPIFilter *filter,
|
||||||
|
GList *event_fields)
|
||||||
|
{
|
||||||
|
g_list_free_full(filter->event_fields, g_free);
|
||||||
|
filter->event_fields = event_fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_api_filter_add_event_field:
|
||||||
|
* @filter: a #MatrixAPIFilter
|
||||||
|
* @event_field: an event field to add to the list. See
|
||||||
|
* matrix_api_filter_set_event_fields() for details
|
||||||
|
*
|
||||||
|
* Add an event field to the list of fields that will be present in
|
||||||
|
* the filtered events.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
matrix_api_filter_add_event_field(MatrixAPIFilter *filter,
|
||||||
|
const gchar *event_field)
|
||||||
|
{
|
||||||
|
g_return_if_fail(event_field != NULL);
|
||||||
|
|
||||||
|
if (!g_list_find_custom(filter->event_fields, event_field,
|
||||||
|
(GCompareFunc)g_strcmp0)) {
|
||||||
|
filter->event_fields = g_list_prepend(filter->event_fields,
|
||||||
|
g_strdup(event_field));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_api_filter_delete_event_field:
|
||||||
|
* @filter: a #MatrixAPIFilter
|
||||||
|
* @event_field: an event field to remove from the list
|
||||||
|
*
|
||||||
|
* Remove @event_field from the list of fields that will be present in
|
||||||
|
* the filtered events.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
matrix_api_filter_delete_event_field(MatrixAPIFilter *filter,
|
||||||
|
const gchar *event_field)
|
||||||
|
{
|
||||||
|
GList *event_field_element;
|
||||||
|
|
||||||
|
g_return_if_fail(event_field != NULL);
|
||||||
|
|
||||||
|
while (event_field_element = g_list_find_custom(filter->event_fields,
|
||||||
|
event_field,
|
||||||
|
(GCompareFunc)g_strcmp0)) {
|
||||||
|
filter->event_fields = g_list_remove_link(filter->event_fields,
|
||||||
|
event_field_element);
|
||||||
|
g_list_free_full(event_field_element, g_free);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_api_filter_get_event_fields:
|
||||||
|
* @filter: a #MatrixAPIFilter
|
||||||
|
*
|
||||||
|
* Get the list of event fields that will be present in the filtered
|
||||||
|
* events.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none) (element-type utf8) (allow-none): the list
|
||||||
|
* of event fields. The returned value is owned by @filter
|
||||||
|
* and should not be freed nor modified.
|
||||||
|
*/
|
||||||
|
const GList *
|
||||||
|
matrix_api_filter_get_event_fields(MatrixAPIFilter *filter)
|
||||||
|
{
|
||||||
|
return filter->event_fields;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_api_filter_set_event_format:
|
||||||
|
* @filter: a #MatrixAPIFilter
|
||||||
|
* @event_format: the desired event format for filtered events
|
||||||
|
*
|
||||||
|
* Set the desired event format for the filtered events (e.g. for
|
||||||
|
* matrix_api_sync())
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
matrix_api_filter_set_event_format(MatrixAPIFilter *filter,
|
||||||
|
MatrixAPIEventFormat event_format)
|
||||||
|
{
|
||||||
|
filter->event_format = event_format;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_api_filter_get_event_format:
|
||||||
|
* @filter: a #MatrixAPIFilter
|
||||||
|
*
|
||||||
|
* Get the desired event format set in @filter.
|
||||||
|
*
|
||||||
|
* Returns: the event format currently set
|
||||||
|
*/
|
||||||
|
MatrixAPIEventFormat
|
||||||
|
matrix_api_filter_get_event_format(MatrixAPIFilter *filter)
|
||||||
|
{
|
||||||
|
return filter->event_format;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_api_filter_set_presence_filter:
|
||||||
|
* @filter: a #MatrixAPIFilter
|
||||||
|
* @presence_filter: (transfer none): the desired filters to use
|
||||||
|
*
|
||||||
|
* Set a filtering ruleset for presence events.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
matrix_api_filter_set_presence_filter(MatrixAPIFilter *filter,
|
||||||
|
MatrixAPIFilterRules *presence_filter)
|
||||||
|
{
|
||||||
|
if (filter->presence) {
|
||||||
|
matrix_api_filter_rules_unref(filter->presence);
|
||||||
|
}
|
||||||
|
|
||||||
|
filter->presence = matrix_api_filter_rules_ref(presence_filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_api_filter_get_presence_filter:
|
||||||
|
* @filter: a #MatrixAPIFilter
|
||||||
|
*
|
||||||
|
* Get the current filtering ruleset for presence events.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none): the current ruleset. The returned value
|
||||||
|
* is owned by @filter; if the callee wants to use it
|
||||||
|
* separately, it should create a reference for it
|
||||||
|
*/
|
||||||
|
MatrixAPIFilterRules *
|
||||||
|
matrix_api_filter_get_presence_filter(MatrixAPIFilter *filter)
|
||||||
|
{
|
||||||
|
return filter->presence;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_api_filter_set_room_filter:
|
||||||
|
* @filter: a #MatrixAPIFilter
|
||||||
|
* @room_filter: the desired room filters to use in @filter
|
||||||
|
*
|
||||||
|
* Set a new filtering ruleset for room events in @filter.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
matrix_api_filter_set_room_filter(MatrixAPIFilter *filter,
|
||||||
|
MatrixAPIRoomFilter *room_filter)
|
||||||
|
{
|
||||||
|
if (filter->room) {
|
||||||
|
matrix_api_room_filter_unref(filter->room);
|
||||||
|
}
|
||||||
|
|
||||||
|
filter->room = matrix_api_room_filter_ref(room_filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* matrix_api_filter_get_room_filter:
|
||||||
|
* @filter: a #MatrixAPIFilter
|
||||||
|
*
|
||||||
|
* Get the filtering ruleset for room events in @filter.
|
||||||
|
*
|
||||||
|
* Returns: (transfer none): the current filtering ruleset for room
|
||||||
|
* events
|
||||||
|
*/
|
||||||
|
MatrixAPIRoomFilter *
|
||||||
|
matrix_api_filter_get_room_filter(MatrixAPIFilter *filter)
|
||||||
|
{
|
||||||
|
return filter->room;
|
||||||
|
}
|
||||||
|
@ -111,6 +111,31 @@ JsonNode *matrix_api_room_filter_get_json_node(MatrixAPIRoomFilter *filter);
|
|||||||
gchar *matrix_api_room_filter_get_json_data(MatrixAPIRoomFilter *filter,
|
gchar *matrix_api_room_filter_get_json_data(MatrixAPIRoomFilter *filter,
|
||||||
gsize *datalen);
|
gsize *datalen);
|
||||||
|
|
||||||
|
typedef struct _MatrixAPIFilter MatrixAPIFilter;
|
||||||
|
|
||||||
|
GType matrix_api_filter_get_type(void);
|
||||||
|
#define MATRIX_TYPE_API_FILTER (matrix_api_filter_get_type())
|
||||||
|
|
||||||
|
MatrixAPIFilter *matrix_api_filter_new(void);
|
||||||
|
MatrixAPIFilter *matrix_api_filter_ref(MatrixAPIFilter *filter);
|
||||||
|
void matrix_api_filter_unref(MatrixAPIFilter *filter);
|
||||||
|
void matrix_api_filter_set_event_fields(MatrixAPIFilter *filter,
|
||||||
|
GList *event_fields);
|
||||||
|
void matrix_api_filter_add_event_field(MatrixAPIFilter *filter,
|
||||||
|
const gchar *event_field);
|
||||||
|
void matrix_api_filter_delete_event_field(MatrixAPIFilter *filter,
|
||||||
|
const gchar *event_field);
|
||||||
|
const GList *matrix_api_filter_get_event_fields(MatrixAPIFilter *filter);
|
||||||
|
void matrix_api_filter_set_event_format(MatrixAPIFilter *filter,
|
||||||
|
MatrixAPIEventFormat event_format);
|
||||||
|
MatrixAPIEventFormat matrix_api_filter_get_event_format(MatrixAPIFilter *filter);
|
||||||
|
void matrix_api_filter_set_presence_filter(MatrixAPIFilter *filter,
|
||||||
|
MatrixAPIFilterRules *presence_filter);
|
||||||
|
MatrixAPIFilterRules *matrix_api_filter_get_presence_filter(MatrixAPIFilter *filter);
|
||||||
|
void matrix_api_filter_set_room_filter(MatrixAPIFilter *filter,
|
||||||
|
MatrixAPIRoomFilter *room_filter);
|
||||||
|
MatrixAPIRoomFilter *matrix_api_filter_get_room_filter(MatrixAPIFilter *filter);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __MATRIX_API_TYPES_H__ */
|
#endif /* __MATRIX_API_TYPES_H__ */
|
||||||
|
@ -293,30 +293,6 @@
|
|||||||
* communication.
|
* communication.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
|
||||||
* MatrixAPIFilter:
|
|
||||||
* @event_fields: (element-type GString): list of event fields to
|
|
||||||
* include. If %NULL then all fields are included. The
|
|
||||||
* entries may include <code>.</code> charaters to
|
|
||||||
* indicate sub-fields. So
|
|
||||||
* <code>['content.body']</code> will include the
|
|
||||||
* <code>body</code> field of the <code>content</code>
|
|
||||||
* object. A literal <code>.</code> character in a
|
|
||||||
* field name may be escaped using a <code>\</code>. A
|
|
||||||
* server may include more fields than were requested
|
|
||||||
* @event_format: the format to use for
|
|
||||||
* events. %MATRIX_API_EVENT_FORMAT_CLIENT will return
|
|
||||||
* the events in a format suitable for
|
|
||||||
* clients. %MATRIX_API_EVENT_FORMAT_FEDERATION will
|
|
||||||
* return the raw event as receieved over
|
|
||||||
* federation. The default is
|
|
||||||
* %MATRIX_API_EVENT_FORMAT_CLIENT
|
|
||||||
* @presence: the presence updates to include
|
|
||||||
* @room: room filters
|
|
||||||
*
|
|
||||||
* A struct to define an event filter.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MatrixAPIStateEvent:
|
* MatrixAPIStateEvent:
|
||||||
* @type: the event type
|
* @type: the event type
|
||||||
|
@ -101,13 +101,6 @@ typedef enum {
|
|||||||
MATRIX_API_PUSHER_CONDITION_KIND_ROOM_MEMBER_COUNT
|
MATRIX_API_PUSHER_CONDITION_KIND_ROOM_MEMBER_COUNT
|
||||||
} MatrixAPIPusherConditionKind;
|
} MatrixAPIPusherConditionKind;
|
||||||
|
|
||||||
typedef struct _MatrixAPIFilter {
|
|
||||||
GList *event_fields;
|
|
||||||
MatrixAPIEventFormat event_format;
|
|
||||||
MatrixAPIFilterRules *presence;
|
|
||||||
MatrixAPIRoomFilter *room;
|
|
||||||
} MatrixAPIFilter;
|
|
||||||
|
|
||||||
typedef struct _MatrixAPI3PidCredential {
|
typedef struct _MatrixAPI3PidCredential {
|
||||||
gchar *client_secret;
|
gchar *client_secret;
|
||||||
gchar *id_server;
|
gchar *id_server;
|
||||||
|
Loading…
Reference in New Issue
Block a user