All pastes #242153 Raw Edit

kikidonk

public text v1 · immutable
·published 2006-11-06 23:28 UTC
rendered paste body
? _darcs? help/sv? protocols/telepathy/.gossip-telepathy.c.swp? protocols/telepathy/gossip-telepathy-groups.c? protocols/telepathy/gossip-telepathy-groups.hIndex: protocols/telepathy/Makefile.am===================================================================RCS file: /cvs/gnome/gossip/protocols/telepathy/Attic/Makefile.am,vretrieving revision 1.1.2.6diff -u -p -r1.1.2.6 Makefile.am--- protocols/telepathy/Makefile.am	7 Oct 2006 01:50:58 -0000	1.1.2.6+++ protocols/telepathy/Makefile.am	6 Nov 2006 23:28:06 -0000@@ -16,6 +16,8 @@ libgossip_telepathy_la_SOURCES =         	gossip-telepathy-message.h                 \ 	gossip-telepathy-contact-list.c            \ 	gossip-telepathy-contact-list.h            \+	gossip-telepathy-groups.c                  \+	gossip-telepathy-groups.h                  \ 	gossip-telepathy-cmgr.c                    \ 	gossip-telepathy-cmgr.h                    \ 	gossip-telepathy-presence.c                \Index: protocols/telepathy/gossip-telepathy-private.h===================================================================RCS file: /cvs/gnome/gossip/protocols/telepathy/Attic/gossip-telepathy-private.h,vretrieving revision 1.1.2.7diff -u -p -r1.1.2.7 gossip-telepathy-private.h--- protocols/telepathy/gossip-telepathy-private.h	10 Oct 2006 01:30:47 -0000	1.1.2.7+++ protocols/telepathy/gossip-telepathy-private.h	6 Nov 2006 23:28:06 -0000@@ -37,6 +37,7 @@ GossipContact *   gossip_telepathy_get_c 							    gboolean         get_vcard); DBusGProxy *      gossip_telepathy_iface_presence          (GossipTelepathy *telepathy); DBusGProxy *      gossip_telepathy_iface_aliasing          (GossipTelepathy *telepathy);+DBusGProxy *      gossip_telepathy_iface_avatars           (GossipTelepathy *telepathy); TelepathyListType gossip_telepathy_get_list_type           (GossipTelepathy *telepathy, 							    TpChan          *list_chan); Index: protocols/telepathy/gossip-telepathy.c===================================================================RCS file: /cvs/gnome/gossip/protocols/telepathy/Attic/gossip-telepathy.c,vretrieving revision 1.1.2.28diff -u -p -r1.1.2.28 gossip-telepathy.c--- protocols/telepathy/gossip-telepathy.c	31 Oct 2006 18:26:51 -0000	1.1.2.28+++ protocols/telepathy/gossip-telepathy.c	6 Nov 2006 23:28:06 -0000@@ -36,6 +36,7 @@ #include <libtelepathy/tp-interfaces.h> #include <libtelepathy/tp-conn-iface-aliasing-gen.h> #include <libtelepathy/tp-conn-iface-presence-gen.h>+#include <libtelepathy/tp-conn-iface-avatars-gen.h>   #include <libgossip/gossip-account.h>@@ -219,8 +220,12 @@ static void             telepathy_rename static void             telepathy_contact_rename                 (GossipProtocol               *protocol, 								  GossipContact                *contact, 								  const gchar                  *new_name);--+/*+static void             telepathy_avatars_handler                (DBusGProxy                   *proxy,+								  guint                         handle,+								  gchar                        *new_token,+								  GossipTelepathy              *telepathy);+*/ /* chatrooms */ static void             telepathy_chatroom_init                  (GossipChatroomProviderIface  *iface); static GossipChatroomId telepathy_chatroom_join                  (GossipChatroomProvider       *provider,@@ -787,6 +792,7 @@ static void telepathy_connection_setup ( 	GossipTelepathyPriv *priv; 	DBusGProxy          *presence_iface = NULL; 	DBusGProxy          *aliasing_iface = NULL;+/*	DBusGProxy          *avatars_iface = NULL;*/ 	gchar              **ifaces = NULL; 	GError              *error = NULL; @@ -833,6 +839,18 @@ static void telepathy_connection_setup ( 					     (telepathy_renamed_handler), 					     telepathy, NULL);   }+  	/*+  	avatars_iface =+		gossip_telepathy_iface_avatars (telepathy);+  +  if (avatars_iface) {+		dbus_g_proxy_connect_signal (DBUS_G_PROXY (avatars_iface),+					     "AvatarUpdated",+					     G_CALLBACK+					     (telepathy_avatars_handler),+					     telepathy, NULL);+  }+  */ }  void@@ -935,7 +953,42 @@ telepathy_renamed_handler (DBusGProxy    	} 	 }-+/*+static void+telepathy_avatars_handler (DBusGProxy      *proxy,+			   guint handle,+			   gchar *new_token,+			   GossipTelepathy *telepathy)+{+	GossipContact *contact;+	GArray *avatar_data;+	gchar *mime_type;+	GError *error = NULL;+	+	if (!tp_conn_iface_avatars_request_avatar (proxy,+		handle,+		&avatar_data, &mime_type,+		&error))+	{+		gossip_debug (DEBUG_DOMAIN, "Error requesting avatar %d: %s", handle, error->message);+		g_clear_error (&error);+		return;+	}+	+	contact = gossip_telepathy_get_contact_from_handle (telepathy, +								    handle,+								    NULL,+								    FALSE);+	gossip_contact_set_avatar (contact, avatar_data->data, avatar_data->len);+	+	g_signal_emit_by_name (telepathy, "contact-updated", contact);+	+	gossip_debug (DEBUG_DOMAIN, "Changing avatar for %d to %s", handle, new_token);+	+	g_array_free (avatar_data, TRUE);+	g_free (mime_type);+}+*/			    static void telepathy_logout (GossipProtocol *protocol) {@@ -1001,6 +1054,25 @@ gossip_telepathy_iface_aliasing (GossipT 	return aliasing_iface; } +DBusGProxy *+gossip_telepathy_iface_avatars (GossipTelepathy *telepathy)+{+	GossipTelepathyPriv *priv;+	DBusGProxy          *avatars_iface;++	priv = GET_PRIV (telepathy);++	avatars_iface =+		tp_conn_get_interface (TELEPATHY_CONN (priv->tp_conn),+				       TELEPATHY_CONN_IFACE_AVATARS_QUARK);++	if (avatars_iface == NULL) {+		g_warning ("Could not get the avatars interface");+	}++	return avatars_iface;+}+ static void telepathy_logged_out (GossipTelepathy       *telepathy, 		      GossipDisconnectReason reason)@@ -1500,6 +1572,90 @@ telepathy_get_version (GossipProtocol    	return TRUE; } +static void+gossip_telepathy_groups_members_changed_handler (DBusGProxy *proxy,+						gchar *message,+						GArray *added, GArray *removed+						GArray *local_pending, GArray *remote_pending,+						guint actor, TelepathyChannelGroupChangeReason reason,+						GossipTelepathy *telepathy)+{+	+}++static void+gossip_telepathy_handle_server_side_group (GossipTelepathy *telepathy,+					guint channel_handle,+					TpChan              *group_channel)+{+	GossipTelepathyPriv *priv;+	DBusGProxy          *group_iface;+	GArray *group_handles;+	gchar **group_names;+	GArray *members;+	GArray *local_pending;+	GArray *remote_pending;+	GError *error = NULL;+	guint i;+	+	priv = GET_PRIV (telepathy);++	group_handles = g_array_new (FALSE, FALSE, sizeof (gint));+	g_array_append_val (group_handles, channel_handle);+	+	if (!tp_conn_inspect_handles (DBUS_G_PROXY (priv->tp_conn),+				   TP_CONN_HANDLE_TYPE_GROUP, group_handles,+				   &group_names, &error))+	{+		g_warning ("Couldn't get server-side group name");+		g_clear_error (&error);+		return;+	}+			   +	group_iface =+		tp_chan_get_interface (group_channel,+				       TELEPATHY_CHAN_IFACE_GROUP_QUARK);++	if (group_iface == NULL) {+		g_warning ("Could not get the presence interface");+		return;+	}++	dbus_g_proxy_connect_signal (DBUS_G_PROXY (group_iface),+				     "MembersChanged",+				     G_CALLBACK+				     (gossip_telepathy_groups_members_changed_handler),+				     telepathy, NULL);+				     +	if (!tp_chan_iface_group_get_all_members (group_iface,+		&members,+		&local_pending,+		&remote_pending,+		&error))+	{+		g_warning ("Couldn't get members");+		g_clear_error (&error);+		return;+	}+	+	for (i=0; i<members->len; i++)+	{+		GList *groups;+		guint handle = g_array_index (members, guint, i);+		GossipContact *contact =+			gossip_telepathy_get_contact_from_handle (telepathy, +					    handle,+					    NULL,+					    FALSE);+		g_warning("Group name: %s, contact=%d", group_names[0], handle);+		+		groups = gossip_contact_get_groups (contact);+		groups = g_list_append (groups, group_names[0]);+		gossip_contact_set_groups (contact, groups);+	}+	+}+ /*  * Telepathy specifics  */@@ -1553,7 +1709,7 @@ telepathy_newchannel_cb (DBusGProxy      		      new_chan->handle_type, 		      dbus_g_proxy_get_path (DBUS_G_PROXY (new_chan))); -	if (strcmp (channel_type, TP_IFACE_CHANNEL_TYPE_CONTACT_LIST) == 0) {+	if (strcmp (channel_type, TP_IFACE_CHANNEL_TYPE_CONTACT_LIST) == 0 && handle_type == TP_CONN_HANDLE_TYPE_LIST) { 		TelepathyListType list_type;  		list_type = gossip_telepathy_get_list_type (telepathy, new_chan);@@ -1581,7 +1737,10 @@ telepathy_newchannel_cb (DBusGProxy      		default: 			g_object_unref (G_OBJECT (new_chan)); 		}-	} else if (strcmp (channel_type, TP_IFACE_CHANNEL_TYPE_TEXT) == 0) {+	} else if (strcmp (channel_type, TP_IFACE_CHANNEL_TYPE_CONTACT_LIST) == 0 && handle_type == TP_CONN_HANDLE_TYPE_GROUP) {+		gossip_debug (DEBUG_DOMAIN, "**Server-Side group Channel**", object_path);+		gossip_telepathy_handle_server_side_group (telepathy, channel_handle, new_chan);+	} else if (strcmp (channel_type, TP_IFACE_CHANNEL_TYPE_TEXT) == 0 && handle_type == TP_CONN_HANDLE_TYPE_CONTACT) {  		gossip_debug (DEBUG_DOMAIN, "**Text Channel**", object_path); @@ -1659,6 +1818,7 @@ gossip_telepathy_get_contact_from_handle 	if (!contact) { 		gchar      **contact_names; 		DBusGProxy  *aliasing_iface;+/*		DBusGProxy  *avatars_iface;*/ 		GError      *error = NULL;  		gossip_debug (DEBUG_DOMAIN, "New contact:'%s'", *handle_name);@@ -1684,7 +1844,28 @@ gossip_telepathy_get_contact_from_handle 		} else { 			gossip_contact_set_name (contact, *handle_name); 		}-+		/*+		avatars_iface =+			gossip_telepathy_iface_avatars (telepathy);++		if (avatars_iface) {+			GArray *avatar_data;+			gchar *mime_type;+			GError *error = NULL;+			if(tp_conn_iface_avatars_request_avatar(avatars_iface, +				                                        handle,+				                                        &avatar_data, &mime_type,+				                                        &error)) {+				gossip_debug (DEBUG_DOMAIN, "Avatar Received");+				gossip_contact_set_avatar (contact, avatar_data->data, avatar_data->len);+				g_array_free (avatar_data, TRUE);+				g_free (mime_type);+			} else {+				gossip_debug (DEBUG_DOMAIN, "Could not get avatar:'%s'", error->message);+				g_clear_error (&error);+			}+		}+		*/ 		tmp_new_item = TRUE;  		g_hash_table_insert (priv->contacts,