#include <libmissioncontrol/mc-account.h>
-#include <telepathy-glib/channel.h>
#include <telepathy-glib/util.h>
#include <telepathy-glib/interfaces.h>
#include "empathy-tp-group.h"
#include "empathy-contact-factory.h"
-#include "empathy-debug.h"
#include "empathy-utils.h"
#include "empathy-marshal.h"
-#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
- EMPATHY_TYPE_TP_GROUP, EmpathyTpGroupPriv))
-
-#define DEBUG_DOMAIN "TpGroup"
+#define DEBUG_FLAG EMPATHY_DEBUG_TP
+#include "empathy-debug.h"
-struct _EmpathyTpGroupPriv {
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTpGroup)
+typedef struct {
TpChannel *channel;
gboolean ready;
GList *members;
GList *local_pendings;
GList *remote_pendings;
-};
-
-static void empathy_tp_group_class_init (EmpathyTpGroupClass *klass);
-static void empathy_tp_group_init (EmpathyTpGroup *group);
+} EmpathyTpGroupPriv;
enum {
MEMBER_ADDED,
actor_contact = tp_group_get_contact (group, actor);
- empathy_debug (DEBUG_DOMAIN, "Members changed for list %s:\n"
- " added-len=%d, current-len=%d\n"
- " removed-len=%d\n"
- " local-pending-len=%d, current-len=%d\n"
- " remote-pending-len=%d, current-len=%d",
- priv->group_name,
- added ? added->len : 0, g_list_length (priv->members),
- removed ? removed->len : 0,
- local_pending ? local_pending->len : 0,
- g_list_length (priv->local_pendings),
- remote_pending ? remote_pending->len : 0,
- g_list_length (priv->remote_pendings));
+ DEBUG ("Members changed for list %s:\n"
+ " added-len=%d, current-len=%d\n"
+ " removed-len=%d\n"
+ " local-pending-len=%d, current-len=%d\n"
+ " remote-pending-len=%d, current-len=%d",
+ priv->group_name, added ? added->len : 0,
+ g_list_length (priv->members), removed ? removed->len : 0,
+ local_pending ? local_pending->len : 0,
+ g_list_length (priv->local_pendings),
+ remote_pending ? remote_pending->len : 0,
+ g_list_length (priv->remote_pendings));
/* Contacts added */
contacts = tp_group_get_contacts (group, added);
g_object_unref (actor_contact);
}
- empathy_debug (DEBUG_DOMAIN, "Members changed done for list %s:\n"
- " members-len=%d\n"
- " local-pendings-len=%d\n"
- " remote-pendings-len=%d",
- priv->group_name,
- g_list_length (priv->members),
- g_list_length (priv->local_pendings),
- g_list_length (priv->remote_pendings));
+ DEBUG ("Members changed done for list %s:\n"
+ " members-len=%d\n"
+ " local-pendings-len=%d\n"
+ " remote-pendings-len=%d",
+ priv->group_name, g_list_length (priv->members),
+ g_list_length (priv->local_pendings),
+ g_list_length (priv->remote_pendings));
}
static void
EmpathyTpGroupPriv *priv = GET_PRIV (group);
if (error) {
- empathy_debug (DEBUG_DOMAIN, "Failed to get members: %s",
- error->message);
+ DEBUG ("Failed to get members: %s", error->message);
return;
}
0, /* actor */
0); /* reason */
- empathy_debug (DEBUG_DOMAIN, "Ready");
+ DEBUG ("Ready");
priv->ready = TRUE;
g_object_notify (group, "ready");
}
guint i = 0;
if (error) {
- empathy_debug (DEBUG_DOMAIN, "Failed to get local pendings: %s",
- error->message);
+ DEBUG ("Failed to get local pendings: %s", error->message);
return;
}
GObject *group)
{
if (error) {
- empathy_debug (DEBUG_DOMAIN, "Failed to get remote pendings: %s",
- error->message);
+ DEBUG ("Failed to get remote pendings: %s", error->message);
return;
}
EmpathyTpGroupPriv *priv = GET_PRIV (group);
if (error) {
- empathy_debug (DEBUG_DOMAIN, "Failed to inspect channel handle: %s",
- error->message);
+ DEBUG ("Failed to inspect channel handle: %s", error->message);
return;
}
gchar *message,
EmpathyTpGroup *group)
{
- empathy_debug (DEBUG_DOMAIN, "Channel invalidated: %s", message);
+ DEBUG ("Channel invalidated: %s", message);
g_signal_emit (group, signals[DESTROY], 0);
}
GArray *handles;
if (error) {
- empathy_debug (DEBUG_DOMAIN, "Failed to get self handle: %s",
- error->message);
+ DEBUG ("Failed to get self handle: %s", error->message);
return;
}
EmpathyTpGroupPriv *priv = GET_PRIV (object);
EmpathyTpContactFactory *tp_factory;
- empathy_debug (DEBUG_DOMAIN, "finalize: %p", object);
+ DEBUG ("finalize: %p", object);
tp_factory = empathy_contact_factory_get_tp_factory (priv->factory, priv->account);
g_signal_handlers_disconnect_by_func (tp_factory, tp_group_factory_ready_cb, object);
EmpathyTpGroupPriv *priv = GET_PRIV (group);
gboolean channel_ready;
- priv->factory = empathy_contact_factory_new ();
+ priv->factory = empathy_contact_factory_dup_singleton ();
priv->account = empathy_channel_get_account (priv->channel);
g_signal_connect (priv->channel, "invalidated",
static void
empathy_tp_group_init (EmpathyTpGroup *group)
{
+ EmpathyTpGroupPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (group,
+ EMPATHY_TYPE_TP_GROUP, EmpathyTpGroupPriv);
+
+ group->priv = priv;
}
EmpathyTpGroup *
gpointer user_data,
GObject *weak_object)
{
- const gchar *msg = user_data;
-
if (error) {
- empathy_debug (DEBUG_DOMAIN, "%s: %s", msg, error->message);
+ DEBUG ("%s: %s", (gchar*) user_data, error->message);
}
}
}
}
- if (invitation && priv->members && !priv->members->next) {
- contact = priv->members->data;
+ if (invitation) {
+ contact = invitation->actor;
}
- if (!invitation && priv->remote_pendings && !priv->remote_pendings->next) {
- contact = priv->remote_pendings->data;
+ if (!invitation) {
+ if (priv->remote_pendings) {
+ contact = priv->remote_pendings->data;
+ }
+ else if (priv->members) {
+ contact = priv->members->data;
+ }
}
if (remote_contact && contact) {
return invitation;
}
+TpChannelGroupFlags
+empathy_tp_group_get_flags (EmpathyTpGroup *self)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (self);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_GROUP (self), 0);
+
+ if (priv->channel == NULL)
+ return 0;
+
+ return tp_channel_group_get_flags (priv->channel);
+}