[telepathy-idle/master] Set Initiator and Requested on new MUC channels

Will Thompson will.thompson at collabora.co.uk
Fri Aug 28 17:41:31 PDT 2009


---
 src/idle-muc-channel.c |    4 +++-
 src/idle-muc-channel.h |    2 +-
 src/idle-muc-manager.c |   14 ++++++++------
 3 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/idle-muc-channel.c b/src/idle-muc-channel.c
index 54cad02..fe6397e 100644
--- a/src/idle-muc-channel.c
+++ b/src/idle-muc-channel.c
@@ -571,11 +571,13 @@ void idle_muc_channel_finalize (GObject *object) {
 	G_OBJECT_CLASS (idle_muc_channel_parent_class)->finalize (object);
 }
 
-IdleMUCChannel *idle_muc_channel_new(IdleConnection *conn, const gchar *object_path, TpHandle handle) {
+IdleMUCChannel *idle_muc_channel_new(IdleConnection *conn, const gchar *object_path, TpHandle handle, TpHandle initiator, gboolean requested) {
 	return g_object_new(IDLE_TYPE_MUC_CHANNEL,
 		"connection", conn,
 		"object-path", object_path,
 		"handle", handle,
+		"initiator-handle", initiator,
+		"requested", requested,
 		NULL);
 }
 
diff --git a/src/idle-muc-channel.h b/src/idle-muc-channel.h
index 0e03b19..cc80187 100644
--- a/src/idle-muc-channel.h
+++ b/src/idle-muc-channel.h
@@ -72,7 +72,7 @@ GType idle_muc_channel_get_type(void);
 #define IDLE_MUC_CHANNEL_GET_CLASS(obj) \
 	(G_TYPE_INSTANCE_GET_CLASS ((obj), IDLE_TYPE_MUC_CHANNEL, IdleMUCChannelClass))
 
-IdleMUCChannel *idle_muc_channel_new(IdleConnection *conn, const gchar *object_path, TpHandle handle);
+IdleMUCChannel *idle_muc_channel_new(IdleConnection *conn, const gchar *object_path, TpHandle handle, TpHandle initiator, gboolean requested);
 
 void idle_muc_channel_badchannelkey(IdleMUCChannel *chan);
 void idle_muc_channel_invited(IdleMUCChannel *chan, TpHandle inviter);
diff --git a/src/idle-muc-manager.c b/src/idle-muc-manager.c
index f2bbc04..eada4d7 100644
--- a/src/idle-muc-manager.c
+++ b/src/idle-muc-manager.c
@@ -89,7 +89,7 @@ static gboolean _muc_manager_request_channel (TpChannelManager *manager, gpointe
 static gboolean _muc_manager_ensure_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties);
 static gboolean _muc_manager_request (IdleMUCManager *self, gpointer request_token, GHashTable *request_properties, gboolean require_new);
 
-static IdleMUCChannel *_muc_manager_new_channel(IdleMUCManager *manager, TpHandle handle);
+static IdleMUCChannel *_muc_manager_new_channel(IdleMUCManager *manager, TpHandle handle, TpHandle initiator, gboolean requested);
 
 static void _channel_closed_cb(IdleMUCChannel *chan, gpointer user_data);
 static void _channel_join_ready_cb(IdleMUCChannel *chan, guint err, gpointer user_data);
@@ -276,7 +276,7 @@ static IdleParserHandlerResult _invite_handler(IdleParser *parser, IdleParserMes
 	idle_connection_emit_queued_aliases_changed(priv->conn);
 
 	if (!chan) {
-		chan = _muc_manager_new_channel(manager, room_handle);
+		chan = _muc_manager_new_channel(manager, room_handle, inviter_handle, FALSE);
 		tp_channel_manager_emit_new_channel(TP_CHANNEL_MANAGER(user_data), (TpExportableChannel *) chan, NULL);
 		idle_muc_channel_invited(chan, inviter_handle);
 	}
@@ -300,7 +300,9 @@ static IdleParserHandlerResult _join_handler(IdleParser *parser, IdleParserMessa
 	IdleMUCChannel *chan = g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(room_handle));
 
 	if (!chan) {
-		chan = _muc_manager_new_channel(manager, room_handle);
+		/* TODO: If we're in "bouncer mode", maybe these should be Requested:
+		 * True? At least for the initial batch? */
+		chan = _muc_manager_new_channel(manager, room_handle, 0, FALSE);
 		tp_channel_manager_emit_new_channel(TP_CHANNEL_MANAGER(user_data), (TpExportableChannel *) chan, NULL);
 	}
 
@@ -625,7 +627,7 @@ _muc_manager_foreach_channel_class (TpChannelManager *manager,
 }
 
 
-static IdleMUCChannel *_muc_manager_new_channel(IdleMUCManager *manager, TpHandle handle)
+static IdleMUCChannel *_muc_manager_new_channel(IdleMUCManager *manager, TpHandle handle, TpHandle initiator, gboolean requested)
 {
 	IdleMUCManagerPrivate *priv = IDLE_MUC_MANAGER_GET_PRIVATE(manager);
 	IdleMUCChannel *chan;
@@ -634,7 +636,7 @@ static IdleMUCChannel *_muc_manager_new_channel(IdleMUCManager *manager, TpHandl
 	g_assert(g_hash_table_lookup(priv->channels, GUINT_TO_POINTER(handle)) == NULL);
 
 	object_path = g_strdup_printf("%s/MucChannel%u", priv->conn->parent.object_path, handle);
-	chan = idle_muc_channel_new(priv->conn, object_path, handle);
+	chan = idle_muc_channel_new(priv->conn, object_path, handle, initiator, requested);
 
 	g_signal_connect(chan, "closed", (GCallback) _channel_closed_cb, manager);
 	g_signal_connect(chan, "join-ready", (GCallback) _channel_join_ready_cb, manager);
@@ -826,7 +828,7 @@ _muc_manager_request (IdleMUCManager *self,
 		}
 		else
 		{
-			channel = _muc_manager_new_channel (self, handle);
+			channel = _muc_manager_new_channel (self, handle, base_conn->self_handle, TRUE);
 			idle_muc_channel_join_attempt(channel);
 		}
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list