summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSjoerd Simons <sjoerd@luon.net>2006-11-20 13:37:19 +0000
committerSjoerd Simons <sjoerd@luon.net>2006-11-20 13:37:19 +0000
commitdedad4642ba53577be9e77b15372da4dcbb5a59e (patch)
tree34ae7147f2e8677c78b105e1571d9320b0eb49d2
parenta9cc486d08adcc1a2ae1553c23f456e65a587121 (diff)
downloadtelepathy-salut-dedad4642ba53577be9e77b15372da4dcbb5a59e.tar.gz
[project @ 7bfde2bd2eabf5b20abab8c27ff31903562a6963]
* Rename SalutIMChannel to SalutImChannel * Add a function to get a channel to a given contact handle 20061120133719-93b9a-eec8fa11e60f755f4e7c0f8249205afa1e7b4734.gz
-rw-r--r--src/salut-im-manager.c27
-rw-r--r--src/salut-im-manager.h3
2 files changed, 24 insertions, 6 deletions
diff --git a/src/salut-im-manager.c b/src/salut-im-manager.c
index b54db1df..57eb426e 100644
--- a/src/salut-im-manager.c
+++ b/src/salut-im-manager.c
@@ -40,7 +40,7 @@
static void salut_im_manager_factory_iface_init(gpointer *g_iface,
gpointer *iface_data);
-static SalutIMChannel *
+static SalutImChannel *
salut_im_manager_new_channel(SalutImManager *mgr, Handle handle);
G_DEFINE_TYPE_WITH_CODE(SalutImManager, salut_im_manager,
@@ -228,7 +228,7 @@ salut_im_manager_factory_iface_request(TpChannelFactoryIface *iface,
TpChannelIface **ret) {
SalutImManager *mgr = SALUT_IM_MANAGER(iface);
SalutImManagerPrivate *priv = SALUT_IM_MANAGER_GET_PRIVATE(mgr);
- SalutIMChannel *chan;
+ SalutImChannel *chan;
/* We only support text channels */
if (strcmp(chan_type, TP_IFACE_CHANNEL_TYPE_TEXT)) {
@@ -276,7 +276,7 @@ static void salut_im_manager_factory_iface_init(gpointer *g_iface,
/* private functions */
static void
-im_channel_closed_cb(SalutIMChannel *chan, gpointer user_data) {
+im_channel_closed_cb(SalutImChannel *chan, gpointer user_data) {
SalutImManager *self = SALUT_IM_MANAGER(user_data);
SalutImManagerPrivate *priv = SALUT_IM_MANAGER_GET_PRIVATE(self);
Handle handle;
@@ -288,10 +288,10 @@ im_channel_closed_cb(SalutIMChannel *chan, gpointer user_data) {
}
}
-static SalutIMChannel *
+static SalutImChannel *
salut_im_manager_new_channel(SalutImManager *mgr, Handle handle) {
SalutImManagerPrivate *priv = SALUT_IM_MANAGER_GET_PRIVATE(mgr);
- SalutIMChannel *chan;
+ SalutImChannel *chan;
SalutContact *contact;
const gchar *name;
gchar *path = NULL;
@@ -343,13 +343,28 @@ salut_im_manager_new(SalutConnection *connection,
return ret;
}
+SalutImChannel *
+salut_im_manager_get_channel_for_handle(SalutImManager *mgr,
+ Handle handle) {
+ SalutImManagerPrivate *priv = SALUT_IM_MANAGER_GET_PRIVATE(mgr);
+ SalutImChannel *chan;
+ chan = g_hash_table_lookup(priv->channels, GINT_TO_POINTER(handle));
+ if (chan == NULL) {
+ chan = salut_im_manager_new_channel(mgr, handle);
+ }
+ if (chan != NULL) {
+ g_object_ref(chan);
+ }
+ return chan;
+}
+
static void
found_contact_for_connection(SalutImManager *mgr,
SalutLmConnection *connection,
SalutContact *contact) {
SalutImManagerPrivate *priv = SALUT_IM_MANAGER_GET_PRIVATE(mgr);
Handle handle;
- SalutIMChannel *chan;
+ SalutImChannel *chan;
handle = handle_for_contact(priv->connection->handle_repo, contact->name);
diff --git a/src/salut-im-manager.h b/src/salut-im-manager.h
index a3b1e69c..dfc7dfb3 100644
--- a/src/salut-im-manager.h
+++ b/src/salut-im-manager.h
@@ -58,6 +58,9 @@ SalutImManager *
salut_im_manager_new(SalutConnection *connection,
SalutContactManager *contact_manager);
+SalutImChannel *
+salut_im_manager_get_channel_for_handle(SalutImManager *mgr,
+ Handle handle);
void
salut_im_manager_handle_connection(SalutImManager *mgr,
SalutLmConnection *connection);