35
35
#include <extensions/extensions.h>
37
37
#include "empathy-individual-manager.h"
38
#include "empathy-contact-manager.h"
39
#include "empathy-contact-list.h"
40
38
#include "empathy-marshal.h"
41
39
#include "empathy-utils.h"
40
#include "empathy-contact-manager.h"
43
42
#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
44
43
#include "empathy-debug.h"
223
221
EmpathyIndividualManagerPriv *priv = GET_PRIV (object);
225
223
g_hash_table_destroy (priv->individuals);
226
tp_clear_object (&priv->contact_manager);
227
224
tp_clear_object (&priv->aggregator);
229
226
G_OBJECT_CLASS (empathy_individual_manager_parent_class)->dispose (object);
317
314
EMPATHY_TYPE_INDIVIDUAL_MANAGER, EmpathyIndividualManagerPriv);
319
316
self->priv = priv;
320
priv->contact_manager = empathy_contact_manager_dup_singleton ();
321
317
priv->individuals = g_hash_table_new_full (g_str_hash, g_str_equal,
322
318
NULL, g_object_unref);
445
440
g_hash_table_destroy (details);
447
/* unblock the EmpathyContact */
448
contact_manager = empathy_contact_manager_dup_singleton ();
450
if (empathy_contact_manager_get_flags_for_connection (contact_manager,
451
empathy_contact_get_connection (contact)) &
452
EMPATHY_CONTACT_LIST_CAN_BLOCK)
454
empathy_contact_list_set_blocked (EMPATHY_CONTACT_LIST (contact_manager),
455
contact, FALSE, FALSE);
458
g_object_unref (contact_manager);
461
443
tp_clear_object (&backend);
462
444
tp_clear_object (&backend_store);
503
485
aggregator_remove_individual_cb, self);
488
/* FIXME: The parameter @self is not required and the method can be placed in
489
* utilities. I left it as it is to stay coherent with empathy-2.34 */
507
491
* empathy_individual_manager_supports_blocking
508
492
* @self: the #EmpathyIndividualManager
516
500
empathy_individual_manager_supports_blocking (EmpathyIndividualManager *self,
517
501
FolksIndividual *individual)
519
EmpathyIndividualManagerPriv *priv;
520
503
GList *personas, *l;
522
505
g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self), FALSE);
524
priv = GET_PRIV (self);
526
507
personas = folks_individual_get_personas (individual);
528
509
for (l = personas; l != NULL; l = l->next)
530
511
TpfPersona *persona = l->data;
531
512
TpConnection *conn;
513
EmpathyContactManager *manager;
533
515
if (!TPF_IS_PERSONA (persona))
536
518
conn = tp_contact_get_connection (tpf_persona_get_contact (persona));
519
manager = empathy_contact_manager_dup_singleton ();
538
if (empathy_individual_manager_get_flags_for_connection (self, conn) &
539
EMPATHY_INDIVIDUAL_MANAGER_CAN_BLOCK)
521
if (empathy_contact_manager_get_flags_for_connection (manager, conn) &
522
EMPATHY_CONTACT_LIST_CAN_BLOCK)
525
g_object_unref (manager);
549
534
gboolean blocked,
550
535
gboolean abusive)
552
EmpathyIndividualManagerPriv *priv;
553
537
GList *personas, *l;
555
539
g_return_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self));
557
priv = GET_PRIV (self);
559
541
personas = folks_individual_get_personas (individual);
561
543
for (l = personas; l != NULL; l = l->next)
563
545
TpfPersona *persona = l->data;
564
546
EmpathyContact *contact;
565
EmpathyIndividualManagerFlags flags;
547
EmpathyContactManager *manager;
548
EmpathyContactListFlags flags;
567
550
if (!TPF_IS_PERSONA (persona))
570
553
contact = empathy_contact_dup_from_tp_contact (
571
554
tpf_persona_get_contact (persona));
572
flags = empathy_individual_manager_get_flags_for_connection (self,
555
empathy_contact_set_persona (contact, FOLKS_PERSONA (persona));
556
manager = empathy_contact_manager_dup_singleton ();
557
flags = empathy_contact_manager_get_flags_for_connection (manager,
573
558
empathy_contact_get_connection (contact));
575
if (flags & EMPATHY_INDIVIDUAL_MANAGER_CAN_BLOCK)
577
empathy_contact_set_persona (contact, FOLKS_PERSONA (persona));
578
empathy_contact_list_set_blocked (
579
EMPATHY_CONTACT_LIST (priv->contact_manager),
580
contact, blocked, abusive);
560
if (flags & EMPATHY_CONTACT_LIST_CAN_BLOCK)
561
empathy_contact_list_set_blocked (
562
EMPATHY_CONTACT_LIST (manager),
563
contact, blocked, abusive);
565
g_object_unref (manager);
583
566
g_object_unref (contact);
627
610
(gpointer) group);
630
EmpathyIndividualManagerFlags
631
empathy_individual_manager_get_flags_for_connection (
632
EmpathyIndividualManager *self,
633
TpConnection *connection)
635
EmpathyIndividualManagerPriv *priv;
636
EmpathyContactListFlags list_flags;
637
EmpathyIndividualManagerFlags flags;
639
g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self),
640
EMPATHY_INDIVIDUAL_MANAGER_NO_FLAGS);
642
priv = GET_PRIV (self);
644
list_flags = empathy_contact_manager_get_flags_for_connection (
645
priv->contact_manager, connection);
647
flags = EMPATHY_INDIVIDUAL_MANAGER_NO_FLAGS;
648
if (list_flags & EMPATHY_CONTACT_LIST_CAN_ADD)
649
flags |= EMPATHY_INDIVIDUAL_MANAGER_CAN_ADD;
650
if (list_flags & EMPATHY_CONTACT_LIST_CAN_REMOVE)
651
flags |= EMPATHY_INDIVIDUAL_MANAGER_CAN_REMOVE;
652
if (list_flags & EMPATHY_CONTACT_LIST_CAN_ALIAS)
653
flags |= EMPATHY_INDIVIDUAL_MANAGER_CAN_ALIAS;
654
if (list_flags & EMPATHY_CONTACT_LIST_CAN_GROUP)
655
flags |= EMPATHY_INDIVIDUAL_MANAGER_CAN_GROUP;
656
if (list_flags & EMPATHY_CONTACT_LIST_CAN_BLOCK)
657
flags |= EMPATHY_INDIVIDUAL_MANAGER_CAN_BLOCK;
658
if (list_flags & EMPATHY_CONTACT_LIST_CAN_REPORT_ABUSIVE)
659
flags |= EMPATHY_INDIVIDUAL_MANAGER_CAN_REPORT_ABUSIVE;
665
614
link_personas_cb (FolksIndividualAggregator *aggregator,
666
615
GAsyncResult *async_result,