#include <telepathy-glib/simple-observer.h>
#include <telepathy-glib/util.h>
+#include "empathy-client-factory.h"
#include "empathy-tp-chat.h"
#include "empathy-chatroom-manager.h"
-#include "empathy-channel-factory.h"
#include "empathy-utils.h"
#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
chatroom_manager_parse_chatroom (EmpathyChatroomManager *manager,
xmlNodePtr node)
{
- EmpathyChatroomManagerPriv *priv;
- EmpathyChatroom *chatroom;
+ EmpathyChatroom *chatroom = NULL;
TpAccount *account;
xmlNodePtr child;
gchar *str;
gchar *account_id;
gboolean auto_connect;
gboolean always_urgent;
-
- priv = GET_PRIV (manager);
+ EmpathyClientFactory *factory;
+ GError *error = NULL;
/* default values. */
name = NULL;
xmlFree (str);
}
- account = tp_account_manager_ensure_account (priv->account_manager,
- account_id);
+ /* account has to be a valid Account object path */
+ if (!tp_dbus_check_valid_object_path (account_id, NULL) ||
+ !g_str_has_prefix (account_id, TP_ACCOUNT_OBJECT_PATH_BASE))
+ goto out;
+
+ factory = empathy_client_factory_dup ();
+
+ account = tp_simple_client_factory_ensure_account (
+ TP_SIMPLE_CLIENT_FACTORY (factory), account_id, NULL, &error);
+ g_object_unref (factory);
+
if (account == NULL)
{
+ DEBUG ("Failed to create account: %s", error->message);
+ g_error_free (error);
+
g_free (name);
g_free (room);
g_free (account_id);
add_chatroom (manager, chatroom);
g_signal_emit (manager, signals[CHATROOM_ADDED], 0, chatroom);
+out:
g_free (name);
g_free (room);
g_free (account_id);
- g_object_unref (chatroom);
+ tp_clear_object (&chatroom);
}
static gboolean
GError *error = NULL;
GFile *file = NULL;
- if (!tp_account_manager_prepare_finish (manager, result, &error))
+ if (!tp_proxy_prepare_finish (manager, result, &error))
{
DEBUG ("Failed to prepare account manager: %s", error->message);
g_error_free (error);
EmpathyChatroomManager *self;
EmpathyChatroomManagerPriv *priv;
GError *error = NULL;
- TpDBusDaemon *dbus;
- EmpathyChannelFactory *factory;
if (chatroom_manager_singleton != NULL)
return g_object_ref (chatroom_manager_singleton);
priv->account_manager = tp_account_manager_dup ();
- tp_account_manager_prepare_async (priv->account_manager, NULL,
+ tp_proxy_prepare_async (priv->account_manager, NULL,
account_manager_ready_cb, g_object_ref (self));
if (priv->file == NULL)
g_free (dir);
}
- dbus = tp_dbus_daemon_dup (&error);
- if (dbus == NULL)
- {
- g_warning ("Failed to get TpDBusDaemon: %s", error->message);
-
- g_error_free (error);
- return obj;
- }
-
/* Setup a room observer */
- priv->observer = tp_simple_observer_new (dbus, TRUE,
+ priv->observer = tp_simple_observer_new_with_am (priv->account_manager, TRUE,
"Empathy.ChatroomManager", TRUE, observe_channels_cb, self, NULL);
- g_object_unref (dbus);
-
tp_base_client_take_observer_filter (priv->observer, tp_asv_new (
TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
TP_IFACE_CHANNEL_TYPE_TEXT,
TP_HANDLE_TYPE_ROOM,
NULL));
- tp_base_client_add_connection_features_varargs (priv->observer,
- TP_CONNECTION_FEATURE_CAPABILITIES, NULL);
-
- factory = empathy_channel_factory_dup ();
-
- tp_base_client_set_channel_factory (priv->observer,
- TP_CLIENT_CHANNEL_FACTORY (factory));
-
if (!tp_base_client_register (priv->observer, &error))
{
g_critical ("Failed to register Observer: %s", error->message);
g_error_free (error);
}
- g_object_unref (factory);
return obj;
}
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0, NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ g_cclosure_marshal_generic,
G_TYPE_NONE,
1, EMPATHY_TYPE_CHATROOM);
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0, NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ g_cclosure_marshal_generic,
G_TYPE_NONE,
1, EMPATHY_TYPE_CHATROOM);