[Telepathy-commits] [telepathy-salut/master] ImManager: don't implement ChannelFactory any more
Will Thompson
will.thompson at collabora.co.uk
Thu Oct 23 07:30:40 PDT 2008
---
src/salut-im-manager.c | 135 +++---------------------------------------------
1 files changed, 8 insertions(+), 127 deletions(-)
diff --git a/src/salut-im-manager.c b/src/salut-im-manager.c
index cd54c7f..45da3d9 100644
--- a/src/salut-im-manager.c
+++ b/src/salut-im-manager.c
@@ -33,15 +33,12 @@
#include <gibber/gibber-xmpp-stanza.h>
#include <gibber/gibber-namespaces.h>
-#include <telepathy-glib/channel-factory-iface.h>
#include <telepathy-glib/dbus.h>
#include <telepathy-glib/interfaces.h>
#define DEBUG_FLAG DEBUG_IM
#include "debug.h"
-static void salut_im_manager_factory_iface_init (gpointer g_iface,
- gpointer iface_data);
static void salut_im_manager_channel_manager_iface_init (gpointer g_iface,
gpointer iface_data);
@@ -50,8 +47,6 @@ salut_im_manager_new_channel (SalutImManager *mgr, TpHandle handle,
TpHandle initiator, gpointer request);
G_DEFINE_TYPE_WITH_CODE (SalutImManager, salut_im_manager, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_FACTORY_IFACE,
- salut_im_manager_factory_iface_init);
G_IMPLEMENT_INTERFACE (SALUT_TYPE_CHANNEL_MANAGER,
salut_im_manager_channel_manager_iface_init));
@@ -203,9 +198,6 @@ salut_im_manager_dispose (GObject *object)
priv->pending_connections = NULL;
}
- /* release any references held by the object here */
- tp_channel_factory_iface_close_all (TP_CHANNEL_FACTORY_IFACE (object));
-
if (G_OBJECT_CLASS (salut_im_manager_parent_class)->dispose)
G_OBJECT_CLASS (salut_im_manager_parent_class)->dispose (object);
}
@@ -221,40 +213,9 @@ salut_im_manager_finalize (GObject *object)
G_OBJECT_CLASS (salut_im_manager_parent_class)->finalize (object);
}
-static void
-salut_im_manager_factory_iface_close_all (TpChannelFactoryIface *iface)
-{
- SalutImManager *mgr = SALUT_IM_MANAGER (iface);
- SalutImManagerPrivate *priv =
- SALUT_IM_MANAGER_GET_PRIVATE (mgr);
-
- if (priv->channels)
- {
- GHashTable *t = priv->channels;
- priv->channels = NULL;
- g_hash_table_destroy (t);
- }
-}
-
-static void
-salut_im_manager_factory_iface_connecting (TpChannelFactoryIface *iface)
-{
-}
-
-static void
-salut_im_manager_factory_iface_connected (TpChannelFactoryIface *iface)
-{
-}
-
-static void
-salut_im_manager_factory_iface_disconnected (TpChannelFactoryIface *iface)
-{
- /* FIMXE close all channels ? */
-}
-
struct foreach_data
{
- TpChannelFunc func;
+ SalutExportableChannelFunc func;
gpointer data;
};
@@ -263,105 +224,28 @@ salut_im_manager_iface_foreach_one (gpointer key,
gpointer value,
gpointer data)
{
- TpChannelIface *chan = TP_CHANNEL_IFACE (value);
+ SalutExportableChannel *chan = SALUT_EXPORTABLE_CHANNEL (value);
struct foreach_data *f = (struct foreach_data *) data;
- g_assert (SALUT_IS_EXPORTABLE_CHANNEL (chan));
-
f->func (chan, f->data);
}
-static void
-salut_im_manager_factory_iface_foreach (TpChannelFactoryIface *iface,
- TpChannelFunc func,
- gpointer data)
+void
+salut_im_manager_foreach_channel (SalutChannelManager *iface,
+ SalutExportableChannelFunc func,
+ gpointer user_data)
{
SalutImManager *mgr = SALUT_IM_MANAGER (iface);
SalutImManagerPrivate *priv = SALUT_IM_MANAGER_GET_PRIVATE (mgr);
struct foreach_data f;
+
f.func = func;
- f.data = data;
+ f.data = user_data;
g_hash_table_foreach (priv->channels, salut_im_manager_iface_foreach_one,
&f);
}
-static TpChannelFactoryRequestStatus
-salut_im_manager_factory_iface_request (TpChannelFactoryIface *iface,
- const gchar *chan_type,
- TpHandleType handle_type,
- guint handle,
- gpointer request,
- TpChannelIface **ret,
- GError **error)
-{
- SalutImManager *mgr = SALUT_IM_MANAGER (iface);
- SalutImManagerPrivate *priv = SALUT_IM_MANAGER_GET_PRIVATE (mgr);
- SalutImChannel *chan;
- TpBaseConnection *base_connection = TP_BASE_CONNECTION (priv->connection);
- TpHandleRepoIface *handle_repo = tp_base_connection_get_handles
- (base_connection, TP_HANDLE_TYPE_CONTACT);
- TpChannelFactoryRequestStatus status;
-
- /* We only support text channels */
- if (tp_strdiff (chan_type, TP_IFACE_CHANNEL_TYPE_TEXT))
- return TP_CHANNEL_FACTORY_REQUEST_STATUS_NOT_IMPLEMENTED;
-
- /* And thus only support contact handles */
- if (handle_type != TP_HANDLE_TYPE_CONTACT)
- return TP_CHANNEL_FACTORY_REQUEST_STATUS_NOT_AVAILABLE;
-
- /* Most be a valid contact handle */
- if (!tp_handle_is_valid (handle_repo, TP_HANDLE_TYPE_CONTACT, NULL))
- return TP_CHANNEL_FACTORY_REQUEST_STATUS_INVALID_HANDLE;
-
- /* Don't support opening a channel to our self handle */
- if (handle == base_connection->self_handle)
- return TP_CHANNEL_FACTORY_REQUEST_STATUS_INVALID_HANDLE;
-
- chan = g_hash_table_lookup (priv->channels, GUINT_TO_POINTER (handle));
- if (chan != NULL)
- {
- status = TP_CHANNEL_FACTORY_REQUEST_STATUS_EXISTING;
- }
- else
- {
- chan = salut_im_manager_new_channel (mgr, handle,
- base_connection->self_handle, request);
- if (chan == NULL)
- return TP_CHANNEL_FACTORY_REQUEST_STATUS_NOT_AVAILABLE;
-
- status = TP_CHANNEL_FACTORY_REQUEST_STATUS_CREATED;
- }
-
- *ret = TP_CHANNEL_IFACE (chan);
- return status;
-}
-
-static void salut_im_manager_factory_iface_init (gpointer g_iface,
- gpointer iface_data)
-{
- TpChannelFactoryIfaceClass *klass = (TpChannelFactoryIfaceClass *) g_iface;
-
- klass->close_all = salut_im_manager_factory_iface_close_all;
- klass->connecting = salut_im_manager_factory_iface_connecting;
- klass->connected = salut_im_manager_factory_iface_connected;
- klass->disconnected = salut_im_manager_factory_iface_disconnected;
- klass->foreach = salut_im_manager_factory_iface_foreach;
- klass->request = salut_im_manager_factory_iface_request;
-}
-
-void
-salut_im_manager_foreach_channel (SalutChannelManager *manager,
- SalutExportableChannelFunc func,
- gpointer user_data)
-{
- g_assert (TP_IS_CHANNEL_FACTORY_IFACE (manager));
-
- salut_im_manager_factory_iface_foreach (TP_CHANNEL_FACTORY_IFACE (manager),
- (TpChannelFunc) func, user_data);
-}
-
static const gchar * const im_channel_allowed_properties[] = {
TP_IFACE_CHANNEL ".TargetHandle",
NULL
@@ -554,9 +438,6 @@ salut_im_manager_new_channel (SalutImManager *mgr,
g_free (path);
g_hash_table_insert (priv->channels, GUINT_TO_POINTER (handle), chan);
- tp_channel_factory_iface_emit_new_channel (mgr, TP_CHANNEL_IFACE (chan),
- NULL);
-
if (request != NULL)
requests = g_slist_prepend (requests, request);
--
1.5.6.5
More information about the Telepathy-commits
mailing list