]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-contact-menu.c
contact-menu: use tp-glib blocking API
[empathy.git] / libempathy-gtk / empathy-contact-menu.c
index 28725cc4a8459eadd8c52a6af9633cde4fc94e90..a6f5a209d14719e06be82c476fb5add0bbc42fe4 100644 (file)
@@ -28,7 +28,7 @@
 #include <telepathy-logger/log-manager.h>
 
 #include <libempathy/empathy-contact-manager.h>
-#include <libempathy/empathy-dispatcher.h>
+#include <libempathy/empathy-request-util.h>
 #include <libempathy/empathy-utils.h>
 #include <libempathy/empathy-chatroom-manager.h>
 #include <libempathy/empathy-contact-manager.h>
@@ -39,6 +39,7 @@
 #include "empathy-contact-dialogs.h"
 #include "empathy-ui-utils.h"
 #include "empathy-share-my-desktop.h"
+#include "empathy-call-utils.h"
 
 static GtkWidget *empathy_contact_block_menu_item_new (EmpathyContact *);
 
@@ -85,13 +86,6 @@ empathy_contact_menu_new (EmpathyContact             *contact,
                gtk_widget_show (item);
        }
 
-       /* Log */
-       if (features & EMPATHY_CONTACT_FEATURE_LOG) {
-               item = empathy_contact_log_menu_item_new (contact);
-               gtk_menu_shell_append (shell, item);
-               gtk_widget_show (item);
-       }
-
        /* Invite */
        item = empathy_contact_invite_menu_item_new (contact);
        gtk_menu_shell_append (shell, item);
@@ -113,8 +107,7 @@ empathy_contact_menu_new (EmpathyContact             *contact,
 
        /* Separator */
        if (features & (EMPATHY_CONTACT_FEATURE_EDIT |
-                       EMPATHY_CONTACT_FEATURE_INFO |
-                       EMPATHY_CONTACT_FEATURE_FAVOURITE)) {
+                       EMPATHY_CONTACT_FEATURE_INFO)) {
                item = gtk_separator_menu_item_new ();
                gtk_menu_shell_append (shell, item);
                gtk_widget_show (item);
@@ -127,16 +120,16 @@ empathy_contact_menu_new (EmpathyContact             *contact,
                gtk_widget_show (item);
        }
 
-       /* Info */
-       if (features & EMPATHY_CONTACT_FEATURE_INFO) {
-               item = empathy_contact_info_menu_item_new (contact);
+       /* Log */
+       if (features & EMPATHY_CONTACT_FEATURE_LOG) {
+               item = empathy_contact_log_menu_item_new (contact);
                gtk_menu_shell_append (shell, item);
                gtk_widget_show (item);
        }
 
-       /* Favorite checkbox */
-       if (features & EMPATHY_CONTACT_FEATURE_FAVOURITE) {
-               item = empathy_contact_favourite_menu_item_new (contact);
+       /* Info */
+       if (features & EMPATHY_CONTACT_FEATURE_INFO) {
+               item = empathy_contact_info_menu_item_new (contact);
                gtk_menu_shell_append (shell, item);
                gtk_widget_show (item);
        }
@@ -233,8 +226,8 @@ empathy_contact_block_menu_item_toggled (GtkCheckMenuItem *item,
                                         EmpathyContact   *contact)
 {
        static guint block_signal = 0;
-       EmpathyContactManager *manager;
        gboolean blocked, abusive;
+       TpContact *tp_contact;
 
        if (block_signal > 0)
                return;
@@ -244,6 +237,7 @@ empathy_contact_block_menu_item_toggled (GtkCheckMenuItem *item,
        if (blocked) {
                /* confirm the user really wishes to block the contact */
                GtkWidget *parent;
+               GdkPixbuf *avatar;
 
                /* gtk_menu_get_attach_widget () doesn't behave properly here
                 * for some reason */
@@ -251,15 +245,19 @@ empathy_contact_block_menu_item_toggled (GtkCheckMenuItem *item,
                        G_OBJECT (gtk_widget_get_parent (GTK_WIDGET (item))),
                        "window");
 
+               avatar = empathy_pixbuf_avatar_from_contact_scaled (contact, 48, 48);
+
                if (!empathy_block_contact_dialog_show (GTK_WINDOW (parent),
-                                       contact, &abusive))
+                                       contact, avatar, &abusive))
                        return;
        }
 
-       manager = empathy_contact_manager_dup_singleton ();
-       empathy_contact_list_set_blocked (EMPATHY_CONTACT_LIST (manager),
-                                         contact, blocked, abusive);
-       g_object_unref (manager);
+       tp_contact = empathy_contact_get_tp_contact (contact);
+
+       if (blocked)
+               tp_contact_block_async (tp_contact, abusive, NULL, NULL);
+       else
+               tp_contact_unblock_async (tp_contact, NULL, NULL);
 
        /* update the toggle with the blocked status */
        block_signal++;
@@ -273,8 +271,7 @@ empathy_contact_block_menu_item_new (EmpathyContact *contact)
        GtkWidget *item;
        EmpathyContactManager *manager;
        TpConnection *connection;
-       EmpathyContactListFlags flags;
-       gboolean blocked;
+       TpContact *tp_contact;
 
        g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
 
@@ -286,19 +283,16 @@ empathy_contact_block_menu_item_new (EmpathyContact *contact)
 
        connection = empathy_contact_get_connection (contact);
 
-       flags = empathy_contact_manager_get_flags_for_connection (manager,
-                       connection);
-
-       if (!(flags & EMPATHY_CONTACT_LIST_CAN_BLOCK)) {
+       if (!tp_proxy_has_interface_by_id (connection,
+               TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_BLOCKING))
                return NULL;
-       }
 
        item = gtk_check_menu_item_new_with_mnemonic (_("_Block Contact"));
-       blocked = empathy_contact_list_get_blocked (
-                       EMPATHY_CONTACT_LIST (manager),
-                       contact);
 
-       gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), blocked);
+       tp_contact = empathy_contact_get_tp_contact (contact);
+
+       gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item),
+                       tp_contact_is_blocked (tp_contact));
 
        g_signal_connect (item, "toggled",
                        G_CALLBACK (empathy_contact_block_menu_item_toggled),
@@ -311,7 +305,7 @@ static void
 empathy_contact_chat_menu_item_activated (GtkMenuItem *item,
        EmpathyContact *contact)
 {
-  empathy_dispatcher_chat_with_contact (contact, gtk_get_current_event_time ());
+       empathy_chat_with_contact (contact, empathy_get_current_action_time ());
 }
 
 GtkWidget *
@@ -340,9 +334,10 @@ static void
 empathy_contact_audio_call_menu_item_activated (GtkMenuItem *item,
        EmpathyContact *contact)
 {
-
-       empathy_call_new_with_streams (contact, TRUE, FALSE,
-               gtk_get_current_event_time ());
+       empathy_call_new_with_streams (empathy_contact_get_id (contact),
+               empathy_contact_get_account (contact),
+               TRUE, FALSE,
+               empathy_get_current_action_time ());
 }
 
 GtkWidget *
@@ -372,8 +367,10 @@ static void
 empathy_contact_video_call_menu_item_activated (GtkMenuItem *item,
        EmpathyContact *contact)
 {
-       empathy_call_new_with_streams (contact, TRUE, TRUE,
-               gtk_get_current_event_time ());
+       empathy_call_new_with_streams (empathy_contact_get_id (contact),
+               empathy_contact_get_account (contact),
+               TRUE, TRUE,
+               empathy_get_current_action_time ());
 }
 
 GtkWidget *
@@ -490,46 +487,6 @@ empathy_contact_share_my_desktop_menu_item_new (EmpathyContact *contact)
        return item;
 }
 
-static void
-favourite_menu_item_toggled_cb (GtkCheckMenuItem *item,
-       EmpathyContact *contact)
-{
-       EmpathyContactManager *manager;
-       EmpathyContactList *list;
-
-       manager = empathy_contact_manager_dup_singleton ();
-       list = EMPATHY_CONTACT_LIST (manager);
-
-       if (gtk_check_menu_item_get_active (item)) {
-               empathy_contact_list_add_to_favourites (list, contact);
-       } else {
-               empathy_contact_list_remove_from_favourites (list, contact);
-       }
-
-       g_object_unref (manager);
-}
-
-GtkWidget *
-empathy_contact_favourite_menu_item_new (EmpathyContact *contact)
-{
-       GtkWidget *item;
-       EmpathyContactManager *manager;
-
-       item = gtk_check_menu_item_new_with_label (_("Favorite"));
-
-       manager = empathy_contact_manager_dup_singleton ();
-       gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item),
-               empathy_contact_list_is_favourite (EMPATHY_CONTACT_LIST (manager),
-                                                  contact));
-
-       g_signal_connect (item, "toggled",
-                         G_CALLBACK (favourite_menu_item_toggled_cb),
-                         contact);
-
-       g_object_unref (manager);
-       return item;
-}
-
 static void
 contact_info_menu_item_activate_cb (EmpathyContact *contact)
 {