Port MatrixPusher to C
This commit is contained in:
parent
f4a8b47aa6
commit
8f0f60e372
@ -16,6 +16,7 @@
|
||||
* <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <gobject/gvaluecollector.h>
|
||||
#include "matrix-c-compacts.h"
|
||||
#include "matrix-enumtypes.h"
|
||||
@ -1513,3 +1514,450 @@ matrix_3pid_credential_init(Matrix3PidCredential* matrix_3pid_credential)
|
||||
priv->_session_id = NULL;
|
||||
priv->_client_secret = NULL;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
gchar *_device_display_name;
|
||||
gchar *_app_display_name;
|
||||
gchar *_app_id;
|
||||
gboolean _append;
|
||||
gchar *_kind;
|
||||
gchar *_lang;
|
||||
gchar *_profile_tag;
|
||||
gchar *_pushkey;
|
||||
JsonNode *_data;
|
||||
} MatrixPusherPrivate;
|
||||
|
||||
/**
|
||||
* MatrixPusher:
|
||||
*
|
||||
* Class to hold pusher related data.
|
||||
*/
|
||||
G_DEFINE_TYPE_WITH_PRIVATE(MatrixPusher, matrix_pusher, MATRIX_TYPE_JSON_COMPACT);
|
||||
|
||||
static JsonNode *
|
||||
matrix_pusher_get_json_node(MatrixJsonCompact *matrix_json_compact, GError **error)
|
||||
{
|
||||
MatrixPusherPrivate *priv;
|
||||
JsonBuilder *builder;
|
||||
JsonNode *result;
|
||||
|
||||
g_return_val_if_fail(matrix_json_compact != NULL, NULL);
|
||||
|
||||
priv = matrix_pusher_get_instance_private(MATRIX_PUSHER(matrix_json_compact));
|
||||
|
||||
if ((priv->_device_display_name == NULL)
|
||||
|| (priv->_app_display_name == NULL)
|
||||
|| (priv->_app_id == NULL)
|
||||
|| (priv->_data == NULL)
|
||||
|| (priv->_kind == NULL)
|
||||
|| (priv->_lang == NULL)
|
||||
|| (priv->_profile_tag == NULL)
|
||||
|| (priv->_pushkey == NULL)) {
|
||||
g_set_error(error, MATRIX_ERROR, MATRIX_ERROR_INCOMPLETE, "Pusher data incomplete");
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
builder = json_builder_new();
|
||||
|
||||
json_builder_begin_object(builder);
|
||||
|
||||
json_builder_set_member_name(builder, "device_display_name");
|
||||
json_builder_add_string_value(builder, priv->_device_display_name);
|
||||
|
||||
json_builder_set_member_name(builder, "app_display_name");
|
||||
json_builder_add_string_value(builder, priv->_app_display_name);
|
||||
|
||||
json_builder_set_member_name(builder, "app_id");
|
||||
json_builder_add_string_value(builder, priv->_app_id);
|
||||
|
||||
json_builder_set_member_name(builder, "append");
|
||||
json_builder_add_boolean_value(builder, priv->_append);
|
||||
|
||||
json_builder_set_member_name(builder, "kind");
|
||||
json_builder_add_string_value(builder, priv->_kind);
|
||||
|
||||
json_builder_set_member_name(builder, "lang");
|
||||
json_builder_add_string_value(builder, priv->_lang);
|
||||
|
||||
json_builder_set_member_name(builder, "profile_tag");
|
||||
json_builder_add_string_value(builder, priv->_profile_tag);
|
||||
|
||||
json_builder_set_member_name(builder, "pushkey");
|
||||
json_builder_add_string_value(builder, priv->_pushkey);
|
||||
|
||||
json_builder_set_member_name(builder, "data");
|
||||
json_builder_add_value(builder, priv->_data);
|
||||
|
||||
json_builder_end_object(builder);
|
||||
|
||||
result = json_builder_get_root(builder);
|
||||
g_object_unref(builder);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* matrix_pusher_new:
|
||||
*
|
||||
* Create a new #MatrixPusher object
|
||||
*
|
||||
* Returns: (transfer full): a new #MatrixPusher object
|
||||
*/
|
||||
MatrixPusher *
|
||||
matrix_pusher_new(void)
|
||||
{
|
||||
return (MatrixPusher *)matrix_json_compact_construct(MATRIX_TYPE_PUSHER);
|
||||
}
|
||||
|
||||
/*
|
||||
* STR_GETTER:
|
||||
* @NAME: the property the generated function is a getter for
|
||||
*
|
||||
* Generate a function to get a string property from a #MatrixPusher object.
|
||||
*/
|
||||
# define STR_GETTER(NAME) \
|
||||
const gchar * \
|
||||
matrix_pusher_get_ ## NAME (MatrixPusher *matrix_pusher) \
|
||||
{ \
|
||||
MatrixPusherPrivate *priv; \
|
||||
\
|
||||
g_return_val_if_fail(matrix_pusher != NULL, NULL); \
|
||||
\
|
||||
priv = matrix_pusher_get_instance_private(matrix_pusher); \
|
||||
\
|
||||
return priv->_ ## NAME ; \
|
||||
}
|
||||
|
||||
/*
|
||||
* STR_SETTER:
|
||||
* @NAME: the property the generated function is a setter for
|
||||
*
|
||||
* Generate a function to set a string property of a #MatrixPusher object
|
||||
*/
|
||||
# define STR_SETTER(NAME) \
|
||||
void \
|
||||
matrix_pusher_set_ ## NAME (MatrixPusher * matrix_pusher, const gchar *NAME) \
|
||||
{ \
|
||||
MatrixPusherPrivate *priv; \
|
||||
\
|
||||
g_return_if_fail(matrix_pusher != NULL); \
|
||||
\
|
||||
priv = matrix_pusher_get_instance_private(matrix_pusher); \
|
||||
\
|
||||
g_free(priv->_ ## NAME); \
|
||||
priv->_ ## NAME = g_strdup(NAME); \
|
||||
}
|
||||
|
||||
/**
|
||||
* matrix_pusher_get_device_display_name:
|
||||
* @pusher: a #MatrixPusher object
|
||||
*
|
||||
* Get the device display name of @pusher.
|
||||
*
|
||||
* The returned value is owned by @pusher, and should not be freed.
|
||||
*
|
||||
* Returns: (transfer none): the device display name
|
||||
*/
|
||||
STR_GETTER(device_display_name);
|
||||
|
||||
/**
|
||||
* matrix_pusher_set_device_display_name:
|
||||
* @pusher: a #MatrixPusher object
|
||||
* @device_display_name: (transfer none): a device display name
|
||||
*
|
||||
* Set the device display name in @pusher
|
||||
*/
|
||||
STR_SETTER(device_display_name);
|
||||
|
||||
/**
|
||||
* matrix_pusher_get_app_display_name:
|
||||
* @pusher: a #MatrixPusher object
|
||||
*
|
||||
* Get the app display name of @pusher.
|
||||
*
|
||||
* The returned value is owned by @pusher, and should not be freed.
|
||||
*
|
||||
* Returns: (transfer none): the app display name
|
||||
*/
|
||||
STR_GETTER(app_display_name);
|
||||
|
||||
/**
|
||||
* matrix_pusher_set_app_display_name:
|
||||
* @pusher: a #MatrixPusher object
|
||||
* @app_display_name: (transfer none): an app display name
|
||||
*
|
||||
* Set the app display name in @pusher
|
||||
*/
|
||||
STR_SETTER(app_display_name);
|
||||
|
||||
/**
|
||||
* matrix_pusher_get_app_id:
|
||||
* @pusher: a #MatrixPusher object
|
||||
*
|
||||
* Get the application ID of @pusher.
|
||||
*
|
||||
* The returned value is owned by @pusher, and should not be freed.
|
||||
*
|
||||
* Returns: (transfer none): the application ID
|
||||
*/
|
||||
STR_GETTER(app_id);
|
||||
|
||||
/**
|
||||
* matrix_pusher_set_app_id:
|
||||
* @pusher: a #MatrixPusher object
|
||||
* @app_id: (transfer none): an application ID
|
||||
*
|
||||
* Set the application ID in @pusher
|
||||
*/
|
||||
STR_SETTER(app_id);
|
||||
|
||||
/**
|
||||
* matrix_pusher_get_append:
|
||||
* @pusher: a #MatrixPusher object
|
||||
*
|
||||
* If this function returns %TRUE, this pusher will tell the homeserver to add another pusher
|
||||
* with the given push key instead of replacing the old one.
|
||||
*
|
||||
* Returns: %TRUE or %FALSE
|
||||
*/
|
||||
gboolean
|
||||
matrix_pusher_get_append(MatrixPusher *matrix_pusher)
|
||||
{
|
||||
MatrixPusherPrivate *priv;
|
||||
|
||||
g_return_val_if_fail(matrix_pusher != NULL, FALSE);
|
||||
|
||||
priv = matrix_pusher_get_instance_private(matrix_pusher);
|
||||
|
||||
return priv->_append;
|
||||
}
|
||||
|
||||
/**
|
||||
* matrix_pusher_set_append:
|
||||
* @pusher: a #MatrixPusher object
|
||||
* @append: a boolean value indicating if existing pushers should be overwritten
|
||||
*
|
||||
* If @append is #TRUE, the homeserver should add another pusher with the given push key and
|
||||
* app ID in addition to any others with different user IDs. Otherwise, the homeserver must
|
||||
* remove any other pushers with the same App ID and pushkey for different users.
|
||||
*/
|
||||
void
|
||||
matrix_pusher_set_append(MatrixPusher *matrix_pusher, gboolean append)
|
||||
{
|
||||
MatrixPusherPrivate *priv;
|
||||
|
||||
g_return_if_fail(matrix_pusher != NULL);
|
||||
|
||||
priv = matrix_pusher_get_instance_private(matrix_pusher);
|
||||
|
||||
priv->_append = append;
|
||||
}
|
||||
|
||||
/**
|
||||
* matrix_pusher_get_kind:
|
||||
* @pusher: a #MatrixPusher object
|
||||
*
|
||||
* Get the type of @pusher. For available types, see matrix_pusher_set_kind().
|
||||
*/
|
||||
STR_GETTER(kind);
|
||||
|
||||
/**
|
||||
* matrix_pusher_set_kind:
|
||||
* @pusher: a #MatrixPusher object
|
||||
* @kind: the kind of @pusher
|
||||
*
|
||||
* Set the type of the pusher. For example, `"http"` makes a pusher that sends HTTP pokes.
|
||||
*
|
||||
* If set to %NULL, the pusher will be deleted.
|
||||
*/
|
||||
STR_SETTER(kind);
|
||||
|
||||
/**
|
||||
* matrix_pusher_get_lang:
|
||||
* @pusher: a #MatrixPusher object
|
||||
*
|
||||
* Get the preferred language of the notifications sent by this pusher.
|
||||
*
|
||||
* The returned value is owned by @pusher, and should not be freed.
|
||||
*
|
||||
* Returns: (transfer none): the preferred language
|
||||
*/
|
||||
STR_GETTER(lang);
|
||||
|
||||
/**
|
||||
* matrix_pusher_set_lang:
|
||||
* @pusher: a #MatrixPusher object
|
||||
* @lang: (transfer none): a language code
|
||||
*
|
||||
* The preferred language for receiving notifications. @lang should be an ISO code like
|
||||
* `"en"` `"en-US"`.
|
||||
*/
|
||||
STR_SETTER(lang);
|
||||
|
||||
/**
|
||||
* matrix_pusher_get_profile_tag:
|
||||
* @pusher: a #MatrixPusher object
|
||||
*
|
||||
* Get the profile tag of @pusher. For details, see matrix_pusher_set_profile_tag().
|
||||
*
|
||||
* The returned value is owned by @pusher, and should not be freed.
|
||||
*
|
||||
* Returns: (transfer none): the profile tag
|
||||
*/
|
||||
STR_GETTER(profile_tag);
|
||||
|
||||
/**
|
||||
* matrix_pusher_set_profile_tag:
|
||||
* @pusher: a #MatrixPusher object
|
||||
* @profile_tag: (transfer none) (nullable): a profile tag
|
||||
*
|
||||
* A profile tag is a string that determines what set of device rules will be matched when
|
||||
* evaluating push rules for this pusher. It is an arbitrary string. Multiple devices may
|
||||
* use the same profile tag. It is advised that when an app’s data is copied or restored to a
|
||||
* different device, this value remain the same. Client apps should offer ways to change the
|
||||
* profile tag, optionally copying rules from the old profile tag. Maximum length is 32 bytes.
|
||||
* If the profile tag is longer than this, it will be truncated.
|
||||
*/
|
||||
void
|
||||
matrix_pusher_set_profile_tag(MatrixPusher *matrix_pusher, const gchar *profile_tag)
|
||||
{
|
||||
MatrixPusherPrivate *priv;
|
||||
|
||||
g_return_if_fail(matrix_pusher != NULL);
|
||||
|
||||
if ((profile_tag != NULL) && (strlen(profile_tag) > 32)) {
|
||||
g_warning("profile_key can’t be longer than 32 bytes. Truncating.");
|
||||
}
|
||||
|
||||
priv = matrix_pusher_get_instance_private(matrix_pusher);
|
||||
|
||||
g_free(priv->_profile_tag);
|
||||
priv->_profile_tag = g_strndup(profile_tag, 32);
|
||||
}
|
||||
|
||||
/**
|
||||
* matrix_pusher_get_pushkey:
|
||||
* @pusher: a #MatrixPusher object
|
||||
*
|
||||
* Get the push key of @pusher. For details, see matrix_pusher_set_pushkey().
|
||||
*
|
||||
* The returned value is owned by @pusher, and should not be freed.
|
||||
*/
|
||||
STR_GETTER(pushkey);
|
||||
|
||||
/**
|
||||
* matrix_pusher_set_pushkey:
|
||||
* @pusher: a #MatrixPusher object
|
||||
* @pushkey: (transfer none) (nullable): a push key
|
||||
*
|
||||
* A push key is a unique identifier for a pusher. The value you should use for this is the
|
||||
* routing or destination address information for the notification, for example, the APNS token
|
||||
* for APNS or the Registration ID for GCM. If your notification client has no such concept,
|
||||
* use any unique identifier. Maximum length is 512 bytes. If @pushkey is longer than this,
|
||||
* it will be truncated
|
||||
*/
|
||||
void
|
||||
matrix_pusher_set_pushkey(MatrixPusher *matrix_pusher, const gchar *pushkey)
|
||||
{
|
||||
MatrixPusherPrivate *priv;
|
||||
|
||||
g_return_if_fail(matrix_pusher != NULL);
|
||||
|
||||
priv = matrix_pusher_get_instance_private(matrix_pusher);
|
||||
|
||||
g_free(priv->_pushkey);
|
||||
priv->_pushkey = g_strndup(pushkey, 512);
|
||||
}
|
||||
|
||||
/**
|
||||
* matrix_pusher_get_data:
|
||||
* @pusher: a #MatrixPusher object
|
||||
*
|
||||
* Get the associated data for @pusher. For details, see matrix_pusher_set_data().
|
||||
*
|
||||
* The returned value is owned by @pusher, and should not be freed.
|
||||
*
|
||||
* Returns: (transfer none): the data associated with @pusher
|
||||
*/
|
||||
JsonNode *
|
||||
matrix_pusher_get_data(MatrixPusher *matrix_pusher)
|
||||
{
|
||||
MatrixPusherPrivate *priv;
|
||||
|
||||
g_return_val_if_fail(matrix_pusher != NULL, FALSE);
|
||||
|
||||
priv = matrix_pusher_get_instance_private(matrix_pusher);
|
||||
|
||||
return priv->_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* matrix_pusher_set_data:
|
||||
* @pusher: a #MatrixPusher object
|
||||
* @data: (transfer none): a JSON node holding extra data for @pusher
|
||||
*
|
||||
* Set a dictionary of information for the pusher implementation itself.
|
||||
*
|
||||
* For example, if kind (set by matrix_pusher_set_kind()) is `"http"`, this should contain an
|
||||
* `"url"` member, which is the URL to use to send notifications to. The function gets a
|
||||
* reference on @data, but doesn’t copy the object in it.
|
||||
*/
|
||||
void
|
||||
matrix_pusher_set_data(MatrixPusher *matrix_pusher, JsonNode *data)
|
||||
{
|
||||
MatrixPusherPrivate *priv;
|
||||
|
||||
g_return_if_fail(matrix_pusher != NULL);
|
||||
|
||||
priv = matrix_pusher_get_instance_private(matrix_pusher);
|
||||
|
||||
if (priv->_data != NULL) {
|
||||
json_node_unref(priv->_data);
|
||||
}
|
||||
|
||||
priv->_data = json_node_ref(data);
|
||||
}
|
||||
|
||||
static void
|
||||
matrix_pusher_finalize(MatrixJsonCompact *matrix_json_compact)
|
||||
{
|
||||
MatrixPusherPrivate *priv = matrix_pusher_get_instance_private(MATRIX_PUSHER(matrix_json_compact));
|
||||
|
||||
g_free(priv->_device_display_name);
|
||||
g_free(priv->_app_display_name);
|
||||
g_free(priv->_app_id);
|
||||
g_free(priv->_kind);
|
||||
g_free(priv->_lang);
|
||||
g_free(priv->_profile_tag);
|
||||
g_free(priv->_pushkey);
|
||||
|
||||
if (priv->_data) {
|
||||
json_node_unref(priv->_data);
|
||||
}
|
||||
|
||||
MATRIX_JSON_COMPACT_CLASS(matrix_pusher_parent_class)->finalize(matrix_json_compact);
|
||||
}
|
||||
|
||||
static void
|
||||
matrix_pusher_class_init(MatrixPusherClass *klass)
|
||||
{
|
||||
((MatrixJsonCompactClass *)klass)->finalize = matrix_pusher_finalize;
|
||||
((MatrixJsonCompactClass *)klass)->get_json_node = matrix_pusher_get_json_node;
|
||||
}
|
||||
|
||||
static void
|
||||
matrix_pusher_init(MatrixPusher *matrix_pusher)
|
||||
{
|
||||
MatrixPusherPrivate *priv = matrix_pusher_get_instance_private(matrix_pusher);
|
||||
|
||||
priv->_device_display_name = NULL;
|
||||
priv->_app_display_name = NULL;
|
||||
priv->_app_id = NULL;
|
||||
priv->_append = TRUE;
|
||||
priv->_kind = NULL;
|
||||
priv->_lang = NULL;
|
||||
priv->_profile_tag = NULL;
|
||||
priv->_pushkey = NULL;
|
||||
priv->_data = NULL;
|
||||
}
|
||||
|
@ -131,6 +131,33 @@ void matrix_3pid_credential_set_session_id(Matrix3PidCredential *credential, con
|
||||
const gchar *matrix_3pid_credential_get_client_secret(Matrix3PidCredential *credential);
|
||||
void matrix_3pid_credential_set_client_secret(Matrix3PidCredential *credential, const gchar *client_secret);
|
||||
|
||||
# define MATRIX_TYPE_PUSHER matrix_pusher_get_type()
|
||||
G_DECLARE_DERIVABLE_TYPE(MatrixPusher, matrix_pusher, MATRIX, PUSHER, MatrixJsonCompact)
|
||||
|
||||
struct _MatrixPusherClass {
|
||||
MatrixJsonCompactClass parent_class;
|
||||
};
|
||||
|
||||
MatrixPusher *matrix_pusher_new(void);
|
||||
const gchar *matrix_pusher_get_device_display_name(MatrixPusher *pusher);
|
||||
void matrix_pusher_set_device_display_name(MatrixPusher *pusher, const gchar *device_display_name);
|
||||
const gchar *matrix_pusher_get_app_display_name(MatrixPusher *pusher);
|
||||
void matrix_pusher_set_app_display_name(MatrixPusher *pusher, const gchar *app_display_name);
|
||||
const gchar *matrix_pusher_get_app_id(MatrixPusher *pusher);
|
||||
void matrix_pusher_set_app_id(MatrixPusher *pusher, const gchar *app_id);
|
||||
gboolean matrix_pusher_get_append(MatrixPusher *pusher);
|
||||
void matrix_pusher_set_append(MatrixPusher *pusher, gboolean append);
|
||||
const gchar *matrix_pusher_get_kind(MatrixPusher *pusher);
|
||||
void matrix_pusher_set_kind(MatrixPusher *pusher, const gchar *kind);
|
||||
const gchar *matrix_pusher_get_lang(MatrixPusher *pusher);
|
||||
void matrix_pusher_set_lang(MatrixPusher *pusher, const gchar *lang);
|
||||
const gchar *matrix_pusher_get_profile_tag(MatrixPusher *pusher);
|
||||
void matrix_pusher_set_profile_tag(MatrixPusher *pusher, const gchar *profile_tag);
|
||||
const gchar *matrix_pusher_get_pushkey(MatrixPusher *pusher);
|
||||
void matrix_pusher_set_pushkey(MatrixPusher *pusher, const gchar *pushkey);
|
||||
JsonNode *matrix_pusher_get_data(MatrixPusher *pusher);
|
||||
void matrix_pusher_set_data(MatrixPusher *pusher, JsonNode *data);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __MATRIX_GLIB_SDK_COMPACTS_H__ */
|
||||
|
@ -17,134 +17,6 @@
|
||||
*/
|
||||
|
||||
namespace Matrix {
|
||||
/**
|
||||
* Class to hold pusher related data.
|
||||
*/
|
||||
public class Pusher : JsonCompact {
|
||||
/**
|
||||
* A device display name.
|
||||
*/
|
||||
public string? device_display_name { get; set; default = null; }
|
||||
|
||||
/**
|
||||
* An application display name.
|
||||
*/
|
||||
public string? app_display_name { get; set; default = null; }
|
||||
|
||||
/**
|
||||
* An application ID.
|
||||
*/
|
||||
public string? app_id { get; set; default = null; }
|
||||
|
||||
/**
|
||||
* If {{{true}}}, the homeserver should add another pusher
|
||||
* with the given push key and app ID in addition to any
|
||||
* others with different user IDs. Otherwise, the homeserver
|
||||
* must remove any other pushers with the same App ID and
|
||||
* pushkey for different users.
|
||||
*/
|
||||
public bool append { get; set; default = true; }
|
||||
|
||||
/**
|
||||
* The kind of the pusher. {{{http}}} makes a pusher that
|
||||
* sends HTTP pokes. {{{null}}} deletes the pusher.
|
||||
*/
|
||||
public string? kind { get; set; default = null; }
|
||||
|
||||
/**
|
||||
* The preferred language for receiving notifications,
|
||||
* e.g. {{{en}}} or {{{en-US}}}.
|
||||
*/
|
||||
public string? lang { get; set; default = null; }
|
||||
|
||||
/**
|
||||
* A string that determines what set of device rules will be
|
||||
* matched when evaluating push rules for this pusher. It is
|
||||
* an arbitrary string. Multiple devices may use the same
|
||||
* profile tag. It is advised that when an app's data is
|
||||
* copied or restored to a different device, this value remain
|
||||
* the same. Client apps should offer ways to change the
|
||||
* profile tag, optionally copying rules from the old profile
|
||||
* tag. Maximum length is 32 bytes. If the profile tag is
|
||||
* longer than this, it will be truncated
|
||||
*/
|
||||
public string? profile_tag { get; set; default = null; }
|
||||
|
||||
/**
|
||||
* A unique identifier for this pusher. The value you should
|
||||
* use for this is the routing or destination address
|
||||
* information for the notification, for example, the APNS
|
||||
* token for APNS or the Registration ID for GCM. If your
|
||||
* notification client has no such concept, use any unique
|
||||
* identifier. Maximum length is 512 bytes. If pushkey is
|
||||
* longer than this, it will be truncated
|
||||
*/
|
||||
public string? pushkey { get; set; default = null; }
|
||||
|
||||
/**
|
||||
* a dictionary of information for the pusher implementation
|
||||
* itself. For example, if kind is {{{http}}}, this should
|
||||
* contain an {{{url}}} member, which is the URL to use to
|
||||
* send notifications to. This function creates a deep copy of
|
||||
* the data, so it can be freed after this call.
|
||||
*/
|
||||
public Json.Node? data { get; set; default = null; }
|
||||
|
||||
/**
|
||||
* Get the pusher data as a JSON node.
|
||||
*/
|
||||
public override Json.Node?
|
||||
get_json_node()
|
||||
throws Matrix.Error
|
||||
{
|
||||
if ((device_display_name == null)
|
||||
|| (app_display_name == null)
|
||||
|| (app_id == null)
|
||||
|| (data == null)
|
||||
|| (kind == null)
|
||||
|| (lang == null)
|
||||
|| (profile_tag == null)
|
||||
|| (pushkey == null)) {
|
||||
throw new Matrix.Error.INCOMPLETE("Pusher data incomplete");
|
||||
}
|
||||
|
||||
var builder = new Json.Builder();
|
||||
|
||||
builder.begin_object();
|
||||
|
||||
builder.set_member_name("device_display_name");
|
||||
builder.add_string_value(device_display_name);
|
||||
|
||||
builder.set_member_name("app_display_name");
|
||||
builder.add_string_value(app_display_name);
|
||||
|
||||
builder.set_member_name("app_id");
|
||||
builder.add_string_value(app_id);
|
||||
|
||||
builder.set_member_name("append");
|
||||
builder.add_boolean_value(append);
|
||||
|
||||
builder.set_member_name("kind");
|
||||
builder.add_string_value(kind);
|
||||
|
||||
builder.set_member_name("lang");
|
||||
builder.add_string_value(lang);
|
||||
|
||||
builder.set_member_name("profile_tag");
|
||||
builder.add_string_value(profile_tag);
|
||||
|
||||
builder.set_member_name("pushkey");
|
||||
builder.add_string_value(pushkey);
|
||||
|
||||
builder.set_member_name("data");
|
||||
builder.add_value(data);
|
||||
|
||||
builder.end_object();
|
||||
|
||||
return builder.get_root();
|
||||
}
|
||||
}
|
||||
|
||||
public class EventContext : JsonCompact {
|
||||
public int before_limit { get; set; default = -1; }
|
||||
public int after_limit { get; set; default = -1; }
|
||||
|
@ -340,6 +340,21 @@ namespace Matrix {
|
||||
throws Matrix.Error;
|
||||
}
|
||||
|
||||
[CCode (cheader_filename = "matrix-c-compacts.h")]
|
||||
public class Pusher : JsonCompact {
|
||||
public string? device_display_name { get; set; default = null; }
|
||||
public string? app_display_name { get; set; default = null; }
|
||||
public string? app_id { get; set; default = null; }
|
||||
public bool append { get; set; default = true; }
|
||||
public string? kind { get; set; default = null; }
|
||||
public string? lang { get; set; default = null; }
|
||||
public string? profile_tag { get; set; default = null; }
|
||||
public string? pushkey { get; set; default = null; }
|
||||
public Json.Node? data { get; set; default = null; }
|
||||
public override Json.Node? get_json_node()
|
||||
throws Matrix.Error;
|
||||
}
|
||||
|
||||
/* Utilities */
|
||||
[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);
|
||||
|
Loading…
Reference in New Issue
Block a user