]> git.0d.be Git - empathy.git/blobdiff - src/empathy-debug-window.c
use list_names_cb to find MC
[empathy.git] / src / empathy-debug-window.c
index 159db0b09b50b3a6f32604217fcb88be8616ac8a..ec59813553754d8d26b34947f91907e629fae274 100644 (file)
 */
 
 #include "config.h"
-
-#include <string.h>
+#include "empathy-debug-window.h"
 
 #include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <gio/gio.h>
-#include <gdk/gdkkeysyms.h>
 #include <libsoup/soup.h>
+#include <tp-account-widgets/tpaw-utils.h>
+#include <telepathy-glib/telepathy-glib-dbus.h>
 
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include <libempathy/empathy-debug.h>
-#include <libempathy/empathy-utils.h>
-
-#include <libempathy-gtk/empathy-account-chooser.h>
-#include <libempathy-gtk/empathy-geometry.h>
-#include <libempathy-gtk/empathy-ui-utils.h>
-
-#include <telepathy-glib/dbus.h>
-#include <telepathy-glib/interfaces.h>
-#include <telepathy-glib/util.h>
-#include <telepathy-glib/proxy-subclass.h>
-#include <telepathy-glib/account-manager.h>
+#include "empathy-geometry.h"
+#include "empathy-ui-utils.h"
+#include "empathy-utils.h"
 
-#include "extensions/extensions.h"
-
-#include "empathy-debug-window.h"
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include "empathy-debug.h"
 
 G_DEFINE_TYPE (EmpathyDebugWindow, empathy_debug_window,
     GTK_TYPE_WINDOW)
@@ -54,6 +41,7 @@ typedef enum
 {
   SERVICE_TYPE_CM = 0,
   SERVICE_TYPE_CLIENT,
+  SERVICE_TYPE_MC,
 } ServiceType;
 
 enum
@@ -390,7 +378,7 @@ debug_window_get_messages_cb (GObject *object,
   messages = tp_debug_client_get_messages_finish (debug, result, &error);
   if (messages == NULL)
     {
-      DEBUG ("Failed to get debug messsages: %s", error->message);
+      DEBUG ("Failed to get debug messages: %s", error->message);
       g_error_free (error);
 
       /* We want to set the window sensitivity to false only when proxy for the
@@ -424,6 +412,7 @@ debug_window_get_messages_cb (GObject *object,
           COL_PROXY, debug,
           -1);
     }
+  g_ptr_array_unref (messages);
 
   g_free (proxy_service_name);
 
@@ -869,6 +858,33 @@ fill_service_chooser_data_free (FillServiceChooserData *data)
   g_slice_free (FillServiceChooserData, data);
 }
 
+static const gchar *
+service_type_to_string (ServiceType type)
+{
+  switch (type)
+    {
+      case SERVICE_TYPE_CM:
+        return "CM";
+      case SERVICE_TYPE_CLIENT:
+        return "Client";
+      case SERVICE_TYPE_MC:
+        return "MC";
+    }
+
+  return "other";
+}
+
+static gchar *
+service_dup_display_name (EmpathyDebugWindow *self,
+    ServiceType type,
+    const gchar *name)
+{
+  if (type == SERVICE_TYPE_CM)
+    return get_cm_display_name (self, name);
+  else
+    return g_strdup (name);
+}
+
 static void
 debug_window_get_name_owner_cb (TpDBusDaemon *proxy,
     const gchar *out,
@@ -894,13 +910,10 @@ debug_window_get_name_owner_cb (TpDBusDaemon *proxy,
       GtkListStore *active_buffer, *pause_buffer;
 
       DEBUG ("Adding %s to list: %s at unique name: %s",
-          data->type == SERVICE_TYPE_CM? "CM": "Client",
+          service_type_to_string (data->type),
           data->name, out);
 
-      if (data->type == SERVICE_TYPE_CM)
-        name = get_cm_display_name (self, data->name);
-      else
-        name = g_strdup (data->name);
+      name = service_dup_display_name (self, data->type, data->name);
 
       active_buffer = new_list_store_for_service ();
       pause_buffer = new_list_store_for_service ();
@@ -948,50 +961,6 @@ OUT:
   fill_service_chooser_data_free (data);
 }
 
-static void
-debug_window_list_connection_names_cb (const gchar * const *names,
-    gsize n,
-    const gchar * const *cms,
-    const gchar * const *protocols,
-    const GError *error,
-    gpointer user_data,
-    GObject *weak_object)
-{
-  EmpathyDebugWindow *self = user_data;
-  guint i;
-  TpDBusDaemon *dbus;
-  GError *error2 = NULL;
-
-  if (error != NULL)
-    {
-      DEBUG ("list_connection_names failed: %s", error->message);
-      return;
-    }
-
-  dbus = tp_dbus_daemon_dup (&error2);
-
-  if (error2 != NULL)
-    {
-      DEBUG ("Failed to dup TpDBusDaemon.");
-      g_error_free (error2);
-      return;
-    }
-
-  for (i = 0; cms[i] != NULL; i++)
-    {
-      FillServiceChooserData *data = fill_service_chooser_data_new (
-          self, cms[i], SERVICE_TYPE_CM);
-
-      tp_cli_dbus_daemon_call_get_name_owner (dbus, -1,
-          names[i], debug_window_get_name_owner_cb,
-          data, NULL, NULL);
-
-      self->priv->services_detected ++;
-    }
-
-  g_object_unref (dbus);
-}
-
 static void
 debug_window_name_owner_changed_cb (TpDBusDaemon *proxy,
     const gchar *arg0,
@@ -1019,15 +988,12 @@ debug_window_name_owner_changed_cb (TpDBusDaemon *proxy,
       return;
     }
 
-  if (EMP_STR_EMPTY (arg1) && !EMP_STR_EMPTY (arg2))
+  if (TPAW_STR_EMPTY (arg1) && !TPAW_STR_EMPTY (arg2))
     {
       GtkTreeIter *found_at_iter = NULL;
       gchar *display_name;
 
-      if (type == SERVICE_TYPE_CM)
-        display_name = get_cm_display_name (self, name);
-      else
-        display_name = g_strdup (name);
+      display_name = service_dup_display_name (self, type, name);
 
       /* A service joined */
       if (!debug_window_service_is_in_model (user_data, display_name,
@@ -1099,7 +1065,7 @@ debug_window_name_owner_changed_cb (TpDBusDaemon *proxy,
 
       g_free (display_name);
     }
-  else if (!EMP_STR_EMPTY (arg1) && EMP_STR_EMPTY (arg2))
+  else if (!TPAW_STR_EMPTY (arg1) && TPAW_STR_EMPTY (arg2))
     {
       /* A service died */
       GtkTreeIter *iter = NULL;
@@ -1120,18 +1086,17 @@ debug_window_name_owner_changed_cb (TpDBusDaemon *proxy,
 }
 
 static void
-add_client (EmpathyDebugWindow *self,
-    const gchar *name)
+add_service (EmpathyDebugWindow *self,
+    const gchar *bus_name,
+    const gchar *display_name,
+    ServiceType type)
 {
-  const gchar *suffix;
   FillServiceChooserData *data;
 
-  suffix = name + strlen (TP_CLIENT_BUS_NAME_BASE);
-
-  data = fill_service_chooser_data_new (self, suffix, SERVICE_TYPE_CLIENT);
+  data = fill_service_chooser_data_new (self, display_name, type);
 
   tp_cli_dbus_daemon_call_get_name_owner (self->priv->dbus, -1,
-      name, debug_window_get_name_owner_cb, data, NULL, NULL);
+      bus_name, debug_window_get_name_owner_cb, data, NULL, NULL);
 
   self->priv->services_detected ++;
 }
@@ -1156,7 +1121,17 @@ list_names_cb (TpDBusDaemon *bus_daemon,
     {
       if (g_str_has_prefix (names[i], TP_CLIENT_BUS_NAME_BASE))
         {
-          add_client (self, names[i]);
+          add_service (self, names[i],
+              names[i] + strlen (TP_CLIENT_BUS_NAME_BASE), SERVICE_TYPE_CLIENT);
+        }
+      else if (g_str_has_prefix (names[i], TP_CM_BUS_NAME_BASE))
+        {
+          add_service (self, names[i],
+              names[i] + strlen (TP_CM_BUS_NAME_BASE), SERVICE_TYPE_CM);
+        }
+      else if (!tp_strdiff (names[i], TP_ACCOUNT_MANAGER_BUS_NAME))
+        {
+          add_service (self, names[i], "Mission-Control", SERVICE_TYPE_MC);
         }
     }
 }
@@ -1165,8 +1140,6 @@ static void
 debug_window_fill_service_chooser (EmpathyDebugWindow *self)
 {
   GError *error = NULL;
-  GtkTreeIter iter;
-  GtkListStore *active_buffer, *pause_buffer;
 
   self->priv->dbus = tp_dbus_daemon_dup (&error);
 
@@ -1181,26 +1154,6 @@ debug_window_fill_service_chooser (EmpathyDebugWindow *self)
   self->priv->services_detected = 0;
   self->priv->name_owner_cb_count = 0;
 
-  /* Add CMs to list */
-  tp_list_connection_names (self->priv->dbus,
-      debug_window_list_connection_names_cb, self, NULL, NULL);
-
-  /* add Mission Control */
-  active_buffer= new_list_store_for_service ();
-  pause_buffer = new_list_store_for_service ();
-
-  gtk_list_store_insert_with_values (self->priv->service_store, &iter, -1,
-      COL_NAME, "mission-control",
-      COL_UNIQUE_NAME, "org.freedesktop.Telepathy.MissionControl5",
-      COL_GONE, FALSE,
-      COL_ACTIVE_BUFFER, active_buffer,
-      COL_PAUSE_BUFFER, pause_buffer,
-      COL_PROXY, NULL,
-      -1);
-  g_object_unref (active_buffer);
-  g_object_unref (pause_buffer);
-
-  /* add clients */
   tp_dbus_daemon_list_names (self->priv->dbus, 2000,
       list_names_cb, NULL, NULL, G_OBJECT (self));
 
@@ -1311,7 +1264,7 @@ debug_window_menu_copy_activate_cb (GtkMenuItem *menu_item,
 
   message = tp_debug_message_get_message (msg);
 
-  if (EMP_STR_EMPTY (message))
+  if (TPAW_STR_EMPTY (message))
     {
       DEBUG ("Log message is empty");
       return;
@@ -1848,6 +1801,7 @@ am_prepared_cb (GObject *am,
   GtkListStore *level_store;
   GtkTreeIter iter;
   GError *error = NULL;
+  GtkWidget *infobar, *content;
 
   if (!tp_proxy_prepare_finish (am, res, &error))
     {
@@ -1858,7 +1812,7 @@ am_prepared_cb (GObject *am,
   empathy_set_css_provider (GTK_WIDGET (object));
 
   gtk_window_set_title (GTK_WINDOW (object), _("Debug Window"));
-  gtk_window_set_default_size (GTK_WINDOW (object), 800, 400);
+  gtk_widget_set_size_request (GTK_WIDGET (object), 600, 300);
   empathy_geometry_bind (GTK_WINDOW (object), "debug-window");
 
   g_signal_connect (object, "key-press-event",
@@ -2025,6 +1979,32 @@ am_prepared_cb (GObject *am,
   g_signal_connect (self->priv->level_filter, "changed",
       G_CALLBACK (debug_window_filter_changed_cb), object);
 
+  /* Info bar */
+  infobar = gtk_info_bar_new ();
+  gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_INFO);
+
+  label = gtk_label_new (
+        _("Even if they don't display passwords, logs can contain sensitive "
+          "information such as your list of contacts or the messages you "
+          "recently sent or received.\nIf you don't want to see such "
+          "information available in a public bug report, you "
+          "can choose to limit the visibility of your bug to "
+          "Empathy developers when reporting it by displaying "
+          "the advanced fields in the "
+          "<a href=\"https://bugzilla.gnome.org/enter_bug.cgi?product=empathy\">"
+          "bug report</a>."));
+  gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
+  gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+  gtk_style_context_add_class (gtk_widget_get_style_context (label),
+      GTK_STYLE_CLASS_DIM_LABEL);
+
+  content = gtk_info_bar_get_content_area (GTK_INFO_BAR (infobar));
+  gtk_box_pack_start (GTK_BOX (content), label, FALSE, FALSE, 0);
+
+  gtk_widget_show (infobar);
+  gtk_widget_show (label);
+  gtk_box_pack_start (GTK_BOX (vbox), infobar, FALSE, FALSE, 0);
+
   /* Debug treeview */
   self->priv->view = gtk_tree_view_new ();
   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (self->priv->view), TRUE);
@@ -2033,7 +2013,7 @@ am_prepared_cb (GObject *am,
       G_CALLBACK (debug_window_button_press_event_cb), object);
 
   renderer = gtk_cell_renderer_text_new ();
-  g_object_set (renderer, "yalign", 0, NULL);
+  g_object_set (renderer, "yalign", (gfloat) 0, NULL);
 
   gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (self->priv->view),
       -1, _("Time"), renderer,
@@ -2049,7 +2029,12 @@ am_prepared_cb (GObject *am,
       (GtkTreeCellDataFunc) debug_window_level_formatter, NULL, NULL);
 
   renderer = gtk_cell_renderer_text_new ();
-  g_object_set (renderer, "family", "Monospace", NULL);
+
+  g_object_set (renderer,
+      "family", "Monospace",
+      "ellipsize", PANGO_ELLIPSIZE_END,
+      NULL);
+
   gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (self->priv->view),
       -1, _("Message"), renderer,
       (GtkTreeCellDataFunc) debug_window_message_formatter, NULL, NULL);