]> git.0d.be Git - empathy.git/blobdiff - libempathy/gossip-utils.c
sv.po: Updated Swedish translation
[empathy.git] / libempathy / gossip-utils.c
index 24f5cd4329bc2c7ec98873d3081579d33c718ec0..27bcb85d1e684a39f48abbba8dc9ce6bbe9d3ae1 100644 (file)
@@ -1,6 +1,7 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
 /*
  * Copyright (C) 2003-2007 Imendio AB
+ * Copyright (C) 2007 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
@@ -19,6 +20,7 @@
  *
  * Authors: Richard Hult <richard@imendio.com>
  *          Martyn Russell <martyn@imendio.com>
+ *          Xavier Claessens <xclaesse@gmail.com>
  */
 
 #include "config.h"
 #include <glib/gi18n.h>
 
 #include <libxml/uri.h>
-#include <libmissioncontrol/mc-account.h>
+#include <libtelepathy/tp-helpers.h>
 
 #include "gossip-debug.h"
 #include "gossip-utils.h"
-#include "gossip-paths.h"
-#include "empathy-session.h"
 #include "empathy-contact-manager.h"
 
 #define DEBUG_DOMAIN "Utils"
@@ -207,7 +207,7 @@ gossip_xml_validate (xmlDoc      *doc,
        xmlDtd       *dtd;
        gboolean      ret;
 
-       path = gossip_paths_get_dtd_path (dtd_filename);
+       path = g_build_filename (DATADIR, "empathy", dtd_filename, NULL);
 
        /* The list of valid chars is taken from libxml. */
        escaped = xmlURIEscapeStr (path, ":@&=+$,/?;");
@@ -315,8 +315,7 @@ gossip_dbus_type_to_g_type (const gchar *dbus_type_string)
 const gchar *
 gossip_g_type_to_dbus_type (GType g_type)
 {
-       switch (g_type)
-       {
+       switch (g_type) {
        case G_TYPE_STRING:
                return "s";
        case G_TYPE_BOOLEAN:
@@ -431,17 +430,66 @@ gossip_account_equal (gconstpointer a,
        return g_str_equal (name_a, name_b);
 }
 
-GossipContact *
-gossip_get_own_contact_from_contact (GossipContact  *contact)
+MissionControl *
+gossip_mission_control_new (void)
 {
-       EmpathyContactManager *manager;
-       McAccount             *account;
+       static MissionControl *mc = NULL;
+
+       if (!mc) {
+               mc = mission_control_new (tp_get_bus ());
+               g_object_add_weak_pointer (G_OBJECT (mc), (gpointer) &mc);
+       } else {
+               g_object_ref (mc);
+       }
 
-       g_return_val_if_fail (GOSSIP_IS_CONTACT (contact), NULL);
+       return mc;
+}
+
+gchar *
+gossip_get_channel_id (McAccount *account,
+                      TpChan    *tp_chan)
+{
+       MissionControl  *mc;
+       TpConn          *tp_conn;
+       GArray          *handles;
+       gchar          **names;
+       gchar           *name;
+       GError          *error;
+
+       g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
+       g_return_val_if_fail (TELEPATHY_IS_CHAN (tp_chan), NULL);
+
+       mc = gossip_mission_control_new ();
+       tp_conn = mission_control_get_connection (mc, account, NULL);
+       g_object_unref (mc);
+
+       if (!tp_conn) {
+               return NULL;
+       }
+
+       /* Get the handle's name */
+       handles = g_array_new (FALSE, FALSE, sizeof (guint));
+       g_array_append_val (handles, tp_chan->handle);
+       if (!tp_conn_inspect_handles (DBUS_G_PROXY (tp_conn),
+                                     tp_chan->handle_type,
+                                     handles,
+                                     &names,
+                                     &error)) {
+               gossip_debug (DEBUG_DOMAIN, 
+                             "Couldn't get id: %s",
+                             error ? error->message : "No error given");
+
+               g_clear_error (&error);
+               g_array_free (handles, TRUE);
+               g_object_unref (tp_conn);
+               
+               return NULL;
+       }
 
-       manager = empathy_session_get_contact_manager ();
-       account = gossip_contact_get_account (contact);
+       name = *names;
+       g_free (names);
+       g_object_unref (tp_conn);
 
-       return empathy_contact_manager_get_own (manager, account);
+       return name;
 }