Port CauchyProtocol to Vala

This commit is contained in:
Gergely Polonkai 2016-03-11 01:58:53 +01:00
parent 2e5b5715ef
commit 1dd68f7d58
6 changed files with 32 additions and 263 deletions

View File

@ -5,12 +5,15 @@ libexec_PROGRAMS = telepathy-cauchy
AM_VALAFLAGS = \
-C \
-H cauchy.h \
--use-header \
tp-base.vapi \
--pkg=telepathy-glib \
$(NULL)
libtp_cauchy_convenience_la_VALA_SOURCES = \
cauchy-connection-manager.vala \
cauchy-protocol.vala \
$(NULL)
vala-stamp: $(libtp_cauchy_convenience_la_VALA_SOURCES)
@ -40,8 +43,6 @@ libcauchy_convenience_la_SOURCES = \
$(libtp_cauchy_convenience_la_VALA_SOURCES:.vala=.c) \
cauchy-connection.c \
cauchy-connection.h \
cauchy-protocol.c \
cauchy-protocol.h \
cauchy-debug.c \
cauchy-debug.h \
cauchy-handles.c \

View File

@ -24,7 +24,7 @@ public class Cauchy.ConnectionManager : BaseConnectionManager {
cm_dbus_name = "cauchy";
}
// construct {
// add_protocol(new Protocol());
// }
construct {
add_protocol(new Cauchy.Protocol());
}
}

View File

@ -1,204 +0,0 @@
/*
* This file is part of telepathy-cauchy
*
* telepathy-cauchy 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.
*
* telepathy-cauchy 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 telepathy-cauchy. If not, see
* <http://www.gnu.org/licenses/>.
*/
#include "cauchy-protocol.h"
#include "cauchy-handles.h"
#include "cauchy-connection.h"
#include "cauchy-im-manager.h"
#include "cauchy-muc-manager.h"
#include <dbus/dbus-protocol.h>
#define PROTOCOL_NAME "matrix"
#define ICON_NAME "im-" PROTOCOL_NAME
#define ENGLISH_NAME "Matrix"
#define VCARD_FIELD_NAME "x-" PROTOCOL_NAME
static gboolean filter_account(const TpCMParamSpec *, GValue *, GError **);
static const TpCMParamSpec cauchy_params[] = {
{
"account",
DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING,
TP_CONN_MGR_PARAM_FLAG_REQUIRED,
NULL, 0, filter_account
},
{
"homeserver",
DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING,
TP_CONN_MGR_PARAM_FLAG_REQUIRED
},
{
"password",
DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING,
TP_CONN_MGR_PARAM_FLAG_SECRET
},
{NULL, NULL, 0, 0, NULL, 0}
};
G_DEFINE_TYPE(CauchyProtocol, cauchy_protocol, TP_TYPE_BASE_PROTOCOL);
static gboolean
filter_account(const TpCMParamSpec *paramspec, GValue *value, GError **err)
{
const gchar *matrix_id = g_value_get_string(value);
g_assert(matrix_id);
g_assert(G_VALUE_HOLDS_STRING(value));
if (!cauchy_id_is_valid(matrix_id, TRUE)) {
g_set_error(err,
TP_ERROR, TP_ERROR_INVALID_HANDLE,
"Invalid account name '%s'", matrix_id);
return FALSE;
}
return TRUE;
}
static const TpCMParamSpec *
get_parameters(TpBaseProtocol *self G_GNUC_UNUSED)
{
return cauchy_params;
}
static TpBaseConnection *
new_connection(TpBaseProtocol *protocol G_GNUC_UNUSED,
GHashTable *params,
GError **err G_GNUC_UNUSED)
{
return g_object_new(CAUCHY_TYPE_CONNECTION,
"homeserver", tp_asv_get_string(params, "homeserver"),
"matrix_id", tp_asv_get_string(params, "account"),
"password", tp_asv_get_string(params, "password"),
NULL);
}
static gchar *
normalize_contact(TpBaseProtocol *protocol G_GNUC_UNUSED,
const gchar *contact,
GError **err)
{
return cauchy_normalize_id(contact, err);
}
static gchar *
identify_account(TpBaseProtocol *protocol G_GNUC_UNUSED,
GHashTable *asv,
GError **err)
{
gchar *id = cauchy_normalize_id(tp_asv_get_string(asv, "account"), err);
gchar *server;
gchar *id_at_server;
if (id == NULL) {
return NULL;
}
server = g_ascii_strdown(tp_asv_get_string(asv, "homeserver"), -1);
id_at_server = g_strdup_printf("@%s:%s", id, server);
g_free(server);
g_free(id);
return id_at_server;
}
static GPtrArray *
get_interfaces_array(TpBaseProtocol *protocol)
{
GPtrArray *interfaces;
interfaces = TP_BASE_PROTOCOL_CLASS(cauchy_protocol_parent_class)->get_interfaces_array(protocol);
return interfaces;
}
static void
get_connection_details(TpBaseProtocol *protocol,
GStrv *connection_interfaces,
GType **channel_managers,
gchar **icon_name,
gchar **english_name,
gchar **vcard_field)
{
if (connection_interfaces != NULL) {
*connection_interfaces = g_strdupv(
(GStrv)cauchy_connection_get_implemented_interfaces());
}
if (channel_managers != NULL) {
GType types[] = {
CAUCHY_TYPE_IM_MANAGER,
CAUCHY_TYPE_MUC_MANAGER,
G_TYPE_INVALID
};
*channel_managers = g_memdup(types, sizeof(types));
}
if (icon_name != NULL) {
*icon_name = g_strdup(ICON_NAME);
}
if (vcard_field != NULL) {
*vcard_field = g_strdup(VCARD_FIELD_NAME);
}
if (english_name != NULL) {
*english_name = g_strdup(ENGLISH_NAME);
}
}
static GStrv
dup_authentication_types(TpBaseProtocol *base)
{
const gchar * const * types[] = {
NULL
};
return g_strdupv((GStrv)types);
}
static void
cauchy_protocol_class_init(CauchyProtocolClass *klass)
{
TpBaseProtocolClass *base_class = (TpBaseProtocolClass *)klass;
base_class->get_parameters = get_parameters;
base_class->new_connection = new_connection;
base_class->normalize_contact = normalize_contact;
base_class->identify_account = identify_account;
base_class->get_interfaces_array = get_interfaces_array;
base_class->get_connection_details = get_connection_details;
base_class->dup_authentication_types = dup_authentication_types;
}
static void
cauchy_protocol_init(CauchyProtocol *protocol)
{
}
TpBaseProtocol *
cauchy_protocol_new(void)
{
return g_object_new(CAUCHY_TYPE_PROTOCOL,
"name", PROTOCOL_NAME,
NULL);
}

View File

@ -1,53 +0,0 @@
/*
* This file is part of telepathy-cauchy
*
* telepathy-cauchy 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.
*
* telepathy-cauchy 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 telepathy-cauchy. If not, see
* <http://www.gnu.org/licenses/>.
*/
#ifndef __CAUCHY_PROTOCOL_H__
#define __CAUCHY_PROTOCOL_H__
#include <telepathy-glib/telepathy-glib.h>
G_BEGIN_DECLS
#define CAUCHY_TYPE_PROTOCOL (cauchy_protocol_get_type())
#define CAUCHY_PROTOCOL(o) (G_TYPE_CHECK_INSTANCE_CAST((o), CAUCHY_TYPE_PROTOCOL, CauchyProtocol))
#define CAUCHY_PROTOCOL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), CAUCHY_TYPE_PROTOCOL, CauchyProtocolClass))
#define CAUCHY_IS_PROTOCOL(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), CAUCHY_TYPE_PROTOCOL))
#define CAUCHY_IS_PROTOCOL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), CAUCHY_TYPE_PROTOCOL))
#define CAUCHY_PROTOCOL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), CAUCHY_TYPE_PROTOCOL, CauchyProtocolClass))
typedef struct _CauchyProtocol CauchyProtocol;
typedef struct _CauchyProtocolClass CauchyProtocolClass;
struct _CauchyProtocol {
/* Parent instance structure */
TpBaseProtocol parent_instance;
/* Instance members */
};
struct _CauchyProtocolClass {
TpBaseProtocolClass parent_class;
};
GType cauchy_protocol_get_type(void) G_GNUC_CONST;
TpBaseProtocol *cauchy_protocol_new(void);
G_END_DECLS
#endif /* __CAUCHY_PROTOCOL_H__ */

21
src/cauchy-protocol.vala Normal file
View File

@ -0,0 +1,21 @@
/*
* This file is part of telepathy-cauchy
*
* telepathy-cauchy 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.
*
* telepathy-cauchy 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 telepathy-cauchy. If not, see
* <http://www.gnu.org/licenses/>.
*/
using TelepathyGLib;
public class Cauchy.Protocol : BaseProtocol {}

View File

@ -17,7 +17,11 @@
*/
namespace TelepathyGLib {
public abstract class BaseProtocol {}
[CCode (cheader_filename = "telepathy-glib/telepathy-glib.h")]
public abstract class BaseProtocol : GLib.Object {
[CCode (has_construct_function = false)]
public BaseProtocol();
}
[CCode (cheader_filename = "telepathy-glib/telepathy-glib.h")]
public abstract class BaseConnectionManager : GLib.Object {