[empathy] Create 'empathy-chat' handling text channels (#631946)



commit 3c1151db28aa6d8726a763060070e0c8eb961e2d
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date:   Tue Oct 19 16:12:53 2010 +0200

    Create 'empathy-chat' handling text channels (#631946)

 src/.gitignore     |    1 +
 src/Makefile.am    |   10 +++-
 src/empathy-chat.c |  174 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 184 insertions(+), 1 deletions(-)
---
diff --git a/src/.gitignore b/src/.gitignore
index 19774ff..5103168 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -3,3 +3,4 @@ empathy-accounts
 empathy-debugger
 empathy-av
 empathy-auth-client
+empathy-chat
diff --git a/src/Makefile.am b/src/Makefile.am
index 31a2193..4af9ba1 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -85,7 +85,8 @@ bin_PROGRAMS =			\
 
 libexec_PROGRAMS = \
 	empathy-av \
-	empathy-auth-client
+	empathy-auth-client \
+	empathy-chat
 
 BUILT_SOURCES=
 
@@ -116,6 +117,13 @@ empathy_av_SOURCES =						\
 empathy_auth_client_SOURCES =						\
 	empathy-auth-client.c
 
+empathy_chat_SOURCES =						\
+	empathy-about-dialog.c empathy-about-dialog.h			\
+	empathy-chat-manager.c empathy-chat-manager.h		\
+	empathy-chat-window.c empathy-chat-window.h		\
+	empathy-invite-participant-dialog.c empathy-invite-participant-dialog.h \
+	empathy-chat.c
+
 empathy_handwritten_source = \
 	empathy-about-dialog.c empathy-about-dialog.h			\
 	empathy-chat-window.c empathy-chat-window.h			\
diff --git a/src/empathy-chat.c b/src/empathy-chat.c
new file mode 100644
index 0000000..86dfad6
--- /dev/null
+++ b/src/empathy-chat.c
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2007-2010 Collabora Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA  02110-1301  USA
+ *
+ * Authors: Xavier Claessens <xclaesse gmail com>
+ *          Guillaume Desmottes <guillaume desmottes collabora co uk>
+ */
+
+#include <config.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include <telepathy-glib/debug-sender.h>
+
+#include <libempathy/empathy-idle.h>
+#include <libempathy-gtk/empathy-ui-utils.h>
+
+#include "empathy-chat-manager.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_CHAT
+#include <libempathy/empathy-debug.h>
+
+/* Exit after $TIMEOUT seconds if not displaying any call window */
+#define TIMEOUT 60
+
+#define EMPATHY_CHAT_DBUS_NAME "org.gnome.Empathy.Chat"
+
+static GtkApplication *app = NULL;
+static gboolean app_held = FALSE;
+static guint timeout_id = 0;
+static gboolean use_timer = TRUE;
+
+static void
+start_timer (void)
+{
+  if (!use_timer)
+    return;
+
+  DEBUG ("Start timer");
+
+  if (app_held)
+    g_application_release (G_APPLICATION (app));
+}
+
+static void
+stop_timer (void)
+{
+  if (timeout_id == 0)
+    return;
+
+  DEBUG ("Stop timer");
+
+  g_application_hold (G_APPLICATION (app));
+  app_held = TRUE;
+}
+
+static void
+handled_chats_changed_cb (EmpathyChatManager *mgr,
+    guint nb_chats,
+    gpointer user_data)
+{
+  if (nb_chats > 0)
+    {
+      stop_timer ();
+    }
+  else
+    {
+      start_timer ();
+    }
+}
+
+int
+main (int argc,
+    char *argv[])
+{
+  GOptionContext *optcontext;
+  GOptionEntry options[] = {
+      { NULL }
+  };
+#ifdef ENABLE_DEBUG
+  TpDebugSender *debug_sender;
+#endif
+  EmpathyChatManager *chat_mgr;
+  GError *error = NULL;
+  EmpathyIdle *idle;
+
+  /* Init */
+  g_thread_init (NULL);
+
+  optcontext = g_option_context_new (N_("- Empathy Chat Client"));
+  g_option_context_add_group (optcontext, gtk_get_option_group (TRUE));
+  g_option_context_add_main_entries (optcontext, options, GETTEXT_PACKAGE);
+
+  if (!g_option_context_parse (optcontext, &argc, &argv, &error)) {
+    g_print ("%s\nRun '%s --help' to see a full list of available command "
+        "line options.\n",
+        error->message, argv[0]);
+    g_warning ("Error in empathy-av init: %s", error->message);
+    return EXIT_FAILURE;
+  }
+
+  g_option_context_free (optcontext);
+
+  empathy_gtk_init ();
+
+  gtk_window_set_default_icon_name ("empathy");
+  textdomain (GETTEXT_PACKAGE);
+
+  app = gtk_application_new (EMPATHY_CHAT_DBUS_NAME, G_APPLICATION_IS_SERVICE);
+
+#ifdef ENABLE_DEBUG
+  /* Set up debug sender */
+  debug_sender = tp_debug_sender_dup ();
+  g_log_set_default_handler (tp_debug_sender_log_handler, G_LOG_DOMAIN);
+#endif
+
+  /* Setting up Idle */
+  idle = empathy_idle_dup_singleton ();
+
+  chat_mgr = empathy_chat_manager_dup_singleton ();
+
+  g_signal_connect (chat_mgr, "handled-chats-changed",
+      G_CALLBACK (handled_chats_changed_cb), NULL);
+
+  if (g_getenv ("EMPATHY_PERSIST") != NULL)
+    {
+      DEBUG ("Disable timer");
+
+      use_timer = FALSE;
+    }
+
+  /* the inactivity timeout can only be set while the application is held */
+  g_application_hold (G_APPLICATION (app));
+  g_application_set_inactivity_timeout (G_APPLICATION (app), TIMEOUT * 1000);
+  if (use_timer)
+    {
+      g_application_release (G_APPLICATION (app));
+      app_held = FALSE;
+    }
+  else
+    app_held = TRUE;
+
+  start_timer ();
+
+  DEBUG ("Waiting for text channels to handle");
+
+  g_application_run (G_APPLICATION (app), argc, argv);
+
+  g_object_unref (app);
+  g_object_unref (idle);
+  g_object_unref (chat_mgr);
+
+#ifdef ENABLE_DEBUG
+  g_object_unref (debug_sender);
+#endif
+
+  return EXIT_SUCCESS;
+}



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