empathy r788 - trunk/src



Author: xclaesse
Date: Thu Mar 13 17:40:56 2008
New Revision: 788
URL: http://svn.gnome.org/viewvc/empathy?rev=788&view=rev

Log:
Move chat chandler into the same process than contact list


Removed:
   trunk/src/empathy-chat-chandler.c
Modified:
   trunk/src/Makefile.am
   trunk/src/empathy.c
   trunk/src/org.gnome.Empathy.Chat.service.in

Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am	(original)
+++ trunk/src/Makefile.am	Thu Mar 13 17:40:56 2008
@@ -19,16 +19,12 @@
 	empathy-accounts	\
 	empathy-logs
 
-libexec_PROGRAMS =		\
-	empathy-chat-chandler
-
 empathy_SOURCES =			\
 	empathy.c			\
 	bacon-message-connection.c	\
 	bacon-message-connection.h
 empathy_accounts_SOURCES = empathy-accounts.c
 empathy_logs_SOURCES = empathy-logs.c
-empathy_chat_chandler_SOURCES = empathy-chat-chandler.c
 
 # Dbus service files
 servicedir = $(datadir)/dbus-1/services
@@ -36,7 +32,7 @@
 	org.gnome.Empathy.Chat.service
 
 %.service: %.service.in Makefile
-	@sed -e "s|\ libexecdir\@|$(libexecdir)|" $< > $@
+	@sed -e "s|\ libexecdir\@|$(libexecdir)|" $< | sed -e "s|\ bindir\@|$(bindir)|" > $@
 
 chandlerdir = $(datadir)/telepathy/managers
 chandler_DATA =							\
@@ -54,7 +50,7 @@
 CLEANFILES = $(BUILT_SOURCES)
 
 if HAVE_VOIP
-libexec_PROGRAMS += empathy-call-chandler
+libexec_PROGRAMS = empathy-call-chandler
 empathy_call_chandler_SOURCES = empathy-call-chandler.c
 service_DATA +=	org.gnome.Empathy.Call.service
 chandler_DATA += empathy-call.chandler

Modified: trunk/src/empathy.c
==============================================================================
--- trunk/src/empathy.c	(original)
+++ trunk/src/empathy.c	Thu Mar 13 17:40:56 2008
@@ -38,6 +38,9 @@
 #include <libmissioncontrol/mission-control.h>
 
 #include <libempathy/empathy-idle.h>
+#include <libempathy/empathy-tp-chat.h>
+#include <libempathy/empathy-tp-chatroom.h>
+#include <libempathy/empathy-chandler.h>
 #include <libempathy/empathy-utils.h>
 #include <libempathy/empathy-debug.h>
 
@@ -45,14 +48,78 @@
 #include <libempathy-gtk/empathy-preferences.h>
 #include <libempathy-gtk/empathy-main-window.h>
 #include <libempathy-gtk/empathy-status-icon.h>
+#include <libempathy-gtk/empathy-chat.h>
+#include <libempathy-gtk/empathy-private-chat.h>
+#include <libempathy-gtk/empathy-group-chat.h>
+#include <libempathy-gtk/empathy-chat-window.h>
 
 #include "bacon-message-connection.h"
 
 #define DEBUG_DOMAIN "EmpathyMain"
+#define BUS_NAME "org.gnome.Empathy.ChatChandler"
+#define OBJECT_PATH "/org/gnome/Empathy/ChatChandler"
 
 static BaconMessageConnection *connection = NULL;
 
 static void
+new_text_channel_cb (EmpathyChandler *chandler,
+		     TpConn          *tp_conn,
+		     TpChan          *tp_chan,
+		     MissionControl  *mc)
+{
+	EmpathyTpChat *tp_chat;
+	McAccount     *account;
+	EmpathyChat   *chat;
+	gchar         *id;
+
+	account = mission_control_get_account_for_connection (mc, tp_conn, NULL);
+	id = empathy_inspect_channel (account, tp_chan);
+	chat = empathy_chat_window_find_chat (account, id);
+	g_free (id);
+
+	if (chat) {
+		/* The chat already exists */
+		if (!empathy_chat_is_connected (chat)) {
+			/* The chat died, give him the new text channel */
+			if (empathy_chat_is_group_chat (chat)) {
+				tp_chat = EMPATHY_TP_CHAT (empathy_tp_chatroom_new (account, tp_chan));
+			} else {
+				tp_chat = empathy_tp_chat_new (account, tp_chan);
+			}
+			empathy_chat_set_tp_chat (chat, tp_chat);
+			g_object_unref (tp_chat);
+		}
+		empathy_chat_present (chat);
+
+		g_object_unref (account);
+		return;
+	}
+
+	if (tp_chan->handle_type == TP_HANDLE_TYPE_CONTACT) {
+		/* We have a new private chat channel */
+		tp_chat = empathy_tp_chat_new (account, tp_chan);
+		chat = EMPATHY_CHAT (empathy_private_chat_new (tp_chat));
+	}
+	else if (tp_chan->handle_type == TP_HANDLE_TYPE_ROOM) {
+		/* We have a new group chat channel */
+		tp_chat = EMPATHY_TP_CHAT (empathy_tp_chatroom_new (account, tp_chan));
+		chat = EMPATHY_CHAT (empathy_group_chat_new (EMPATHY_TP_CHATROOM (tp_chat)));
+	} else {
+		empathy_debug (DEBUG_DOMAIN,
+			       "Unknown handle type (%d) for Text channel",
+			       tp_chan->handle_type);
+		g_object_unref (account);
+		return;
+	}
+
+	empathy_chat_present (chat);
+
+	g_object_unref (chat);
+	g_object_unref (account);
+	g_object_unref (tp_chat);
+}
+
+static void
 service_ended_cb (MissionControl *mc,
 		  gpointer        user_data)
 {
@@ -275,6 +342,7 @@
 	MissionControl    *mc;
 	McAccountMonitor  *monitor;
 	EmpathyIdle       *idle;
+	EmpathyChandler   *chandler;
 	gboolean           autoconnect = TRUE;
 	GError            *error = NULL;
 
@@ -359,10 +427,18 @@
 						       window);
 	}
 
+	/* Handle text channels */
+	chandler = empathy_chandler_new (BUS_NAME, OBJECT_PATH);
+	g_signal_connect (chandler, "new-channel",
+			  G_CALLBACK (new_text_channel_cb),
+			  mc);
+	empathy_debug (DEBUG_DOMAIN, "Ready to handle new text channels");
+
 	gtk_main ();
 
 	empathy_idle_set_state (idle, MC_PRESENCE_OFFLINE);
 
+	g_object_unref (chandler);
 	g_object_unref (monitor);
 	g_object_unref (mc);
 	g_object_unref (idle);

Modified: trunk/src/org.gnome.Empathy.Chat.service.in
==============================================================================
--- trunk/src/org.gnome.Empathy.Chat.service.in	(original)
+++ trunk/src/org.gnome.Empathy.Chat.service.in	Thu Mar 13 17:40:56 2008
@@ -1,3 +1,3 @@
 [D-BUS Service]
 Name=org.gnome.Empathy.ChatChandler
-Exec= libexecdir@/empathy-chat-chandler
+Exec= bindir@/empathy



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]