From 9dbac0f0980dc236dc7fbbba6f1e20dec47279a2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philipp=20H=C3=B6rist?= <philipp@hoerist.com>
Date: Fri, 17 May 2019 23:38:06 +0200
Subject: [PATCH] Remove custom status per contact feature

---
 gajim/common/modules/privacylists.py   | 17 ------
 gajim/data/gui/contact_context_menu.ui | 15 -----
 gajim/gui_interface.py                 |  9 ---
 gajim/gui_menu_builder.py              | 49 +--------------
 gajim/roster_window.py                 | 82 --------------------------
 test/lib/gajim_mocks.py                |  1 -
 6 files changed, 2 insertions(+), 171 deletions(-)

diff --git a/gajim/common/modules/privacylists.py b/gajim/common/modules/privacylists.py
index 0e8088d669..64d5250b1e 100644
--- a/gajim/common/modules/privacylists.py
+++ b/gajim/common/modules/privacylists.py
@@ -242,23 +242,6 @@ class PrivacyLists(BaseModule):
     def _build_invisible_rule(self):
         node = nbxmpp.Node('list', {'name': 'invisible'})
         iq = nbxmpp.Iq('set', nbxmpp.NS_PRIVACY, payload=[node])
-        if (self._account in app.interface.status_sent_to_groups and
-                app.interface.status_sent_to_groups[self._account]):
-            for group in app.interface.status_sent_to_groups[self._account]:
-                item = node.setTag('item', {'type': 'group',
-                                            'value': group,
-                                            'action': 'allow',
-                                            'order': '1'})
-                item.setTag('presence-out')
-
-        if (self._account in app.interface.status_sent_to_users and
-                app.interface.status_sent_to_users[self._account]):
-            for jid in app.interface.status_sent_to_users[self._account]:
-                item = node.setTag('item', {'type': 'jid',
-                                            'value': jid,
-                                            'action': 'allow',
-                                            'order': '2'})
-                item.setTag('presence-out')
 
         item = node.setTag('item', {'action': 'deny', 'order': '3'})
         item.setTag('presence-out')
diff --git a/gajim/data/gui/contact_context_menu.ui b/gajim/data/gui/contact_context_menu.ui
index 8912111695..53e85a09ae 100644
--- a/gajim/data/gui/contact_context_menu.ui
+++ b/gajim/data/gui/contact_context_menu.ui
@@ -51,21 +51,6 @@
         <property name="can_focus">False</property>
       </object>
     </child>
-    <child>
-      <object class="GtkMenuItem" id="send_custom_status_menuitem">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="label" translatable="yes">Send Cus_tom Status</property>
-        <property name="use_underline">True</property>
-        <child type="submenu">
-          <object class="GtkMenu" id="menu5">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-          </object>
-        </child>
-      </object>
-    </child>
     <child>
       <object class="GtkMenuItem" id="execute_command_menuitem">
         <property name="visible">True</property>
diff --git a/gajim/gui_interface.py b/gajim/gui_interface.py
index dd9c0b71c7..2e4695f3fb 100644
--- a/gajim/gui_interface.py
+++ b/gajim/gui_interface.py
@@ -311,13 +311,6 @@ class Interface:
         account = obj.conn.name
         jid = obj.jid
 
-        # unset custom status
-        if (obj.old_show == 0 and obj.new_show > 1) or \
-        (obj.old_show > 1 and obj.new_show == 0 and obj.conn.connected > 1):
-            if account in self.status_sent_to_users and \
-            jid in self.status_sent_to_users[account]:
-                del self.status_sent_to_users[account][jid]
-
         if app.jid_is_transport(jid):
             # It must be an agent
 
@@ -2272,8 +2265,6 @@ class Interface:
         # This is the manager and factory of message windows set by the module
         self.msg_win_mgr = None
         self.minimized_controls = {}
-        self.status_sent_to_users = {}
-        self.status_sent_to_groups = {}
         self.pass_dialog = {}
         self.db_error_dialog = None
 
diff --git a/gajim/gui_menu_builder.py b/gajim/gui_menu_builder.py
index 93af1dd669..28af51d16f 100644
--- a/gajim/gui_menu_builder.py
+++ b/gajim/gui_menu_builder.py
@@ -221,7 +221,6 @@ control=None, gc_contact=None, is_anonymous=True):
     send_file_menuitem = xml.get_object('send_file_menuitem')
     information_menuitem = xml.get_object('information_menuitem')
     history_menuitem = xml.get_object('history_menuitem')
-    send_custom_status_menuitem = xml.get_object('send_custom_status_menuitem')
     send_single_message_menuitem = xml.get_object('send_single_message_menuitem')
     invite_menuitem = xml.get_object('invite_menuitem')
     block_menuitem = xml.get_object('block_menuitem')
@@ -327,7 +326,7 @@ control=None, gc_contact=None, is_anonymous=True):
 
     # Zeroconf Account
     if app.config.get_per('accounts', account, 'is_zeroconf'):
-        for item in (send_custom_status_menuitem, send_single_message_menuitem,
+        for item in (send_single_message_menuitem,
         invite_menuitem, block_menuitem, unblock_menuitem, ignore_menuitem,
         unignore_menuitem, subscription_menuitem,
         manage_contact_menuitem, convert_to_gc_menuitem):
@@ -348,22 +347,6 @@ control=None, gc_contact=None, is_anonymous=True):
 
     # normal account
 
-    # send custom status icon
-    blocked = False
-    if helpers.jid_is_blocked(account, jid):
-        blocked = True
-    else:
-        for group in contact.get_shown_groups():
-            if helpers.group_is_blocked(account, group):
-                blocked = True
-                break
-    transport = app.get_transport_name_from_jid(jid, use_config_setting=False)
-    if transport and transport != 'jabber':
-        # Transport contact, send custom status unavailable
-        send_custom_status_menuitem.set_sensitive(False)
-    elif blocked:
-        send_custom_status_menuitem.set_sensitive(False)
-
     if gc_contact:
         if not gc_contact.jid:
             # it's a pm and we don't know real JID
@@ -387,16 +370,6 @@ control=None, gc_contact=None, is_anonymous=True):
     if app.account_is_disconnected(account):
         invite_menuitem.set_sensitive(False)
 
-    # One or several resource, we do the same for send_custom_status
-    status_menuitems = Gtk.Menu()
-    send_custom_status_menuitem.set_submenu(status_menuitems)
-    for s in ('online', 'chat', 'away', 'xa', 'dnd', 'offline'):
-        # icon MUST be different instance for every item
-        status_menuitem = Gtk.MenuItem.new_with_label(helpers.get_uf_show(s))
-        status_menuitem.connect('activate', roster.on_send_custom_status,
-                                [(contact, account)], s)
-        status_menuitems.append(status_menuitem)
-
     send_single_message_menuitem.connect('activate',
         roster.on_send_single_message_menuitem_activate, account, contact)
 
@@ -447,7 +420,7 @@ control=None, gc_contact=None, is_anonymous=True):
     if app.account_is_disconnected(account):
         for widget in (send_single_message_menuitem, subscription_menuitem,
         add_to_roster_menuitem, remove_from_roster_menuitem,
-        execute_command_menuitem, send_custom_status_menuitem):
+        execute_command_menuitem):
             widget.set_sensitive(False)
 
 
@@ -507,24 +480,6 @@ def get_transport_menu(contact, account):
     if helpers.jid_is_blocked(account, jid):
         blocked = True
 
-    # Send Custom Status
-    send_custom_status_menuitem = Gtk.MenuItem.new_with_mnemonic(
-        _('Send Cus_tom Status'))
-    if blocked:
-        send_custom_status_menuitem.set_sensitive(False)
-    else:
-        status_menuitems = Gtk.Menu()
-        send_custom_status_menuitem.set_submenu(status_menuitems)
-        for s in ('online', 'chat', 'away', 'xa', 'dnd', 'offline'):
-            status_menuitem = Gtk.MenuItem.new_with_label(helpers.get_uf_show(
-                s))
-            status_menuitem.connect('activate', roster.on_send_custom_status,
-                [(contact, account)], s)
-            status_menuitems.append(status_menuitem)
-    menu.append(send_custom_status_menuitem)
-    if app.account_is_disconnected(account):
-        send_custom_status_menuitem.set_sensitive(False)
-
     item = Gtk.SeparatorMenuItem.new() # separator
     menu.append(item)
 
diff --git a/gajim/roster_window.py b/gajim/roster_window.py
index 9b2c01bcf2..4175ce0ac5 100644
--- a/gajim/roster_window.py
+++ b/gajim/roster_window.py
@@ -2113,10 +2113,6 @@ class RosterWindow:
                     app.SHOW_LIST.index('invisible')
             app.connections[account].change_status(status, txt, auto)
 
-            if account in app.interface.status_sent_to_users:
-                app.interface.status_sent_to_users[account] = {}
-            if account in app.interface.status_sent_to_groups:
-                app.interface.status_sent_to_groups[account] = {}
             for gc_control in app.interface.msg_win_mgr.get_controls(
             message_control.TYPE_GC) + \
             list(app.interface.minimized_controls[account].values()):
@@ -3362,67 +3358,6 @@ class RosterWindow:
                 'offline.') % jids
             ConfirmationDialog(pritext, sectext, on_response_ok=on_ok2)
 
-    def on_send_custom_status(self, widget, contact_list, show, group=None):
-        """
-        Send custom status
-        """
-        # contact_list has only one element except if group != None
-        def on_response(message, pep_dict):
-            if message is None: # None if user pressed Cancel
-                return
-            account_list = []
-            for (contact, account) in contact_list:
-                if account not in account_list:
-                    account_list.append(account)
-            # 1. update status_sent_to_[groups|users] list
-            if group:
-                for account in account_list:
-                    if account not in app.interface.status_sent_to_groups:
-                        app.interface.status_sent_to_groups[account] = {}
-                    app.interface.status_sent_to_groups[account][group] = show
-            else:
-                for (contact, account) in contact_list:
-                    if account not in app.interface.status_sent_to_users:
-                        app.interface.status_sent_to_users[account] = {}
-                    app.interface.status_sent_to_users[account][contact.jid] \
-                        = show
-
-            # 2. update privacy lists if main status is invisible
-            for account in account_list:
-                if app.SHOW_LIST[app.connections[account].connected] == \
-                'invisible':
-                    con = app.connections[account]
-                    con.get_module('PrivacyLists').set_invisible_rule()
-
-            # 3. send directed presence
-            for (contact, account) in contact_list:
-                our_jid = app.get_jid_from_account(account)
-                jid = contact.jid
-                if jid == our_jid:
-                    jid += '/' + contact.resource
-                self.send_status(account, show, message, to=jid)
-
-        def send_it(is_checked=None):
-            if is_checked is not None: # dialog has been shown
-                if is_checked: # user does not want to be asked again
-                    app.config.set('confirm_custom_status', 'no')
-                else:
-                    app.config.set('confirm_custom_status', 'yes')
-            self.get_status_message(show, on_response, show_pep=False,
-                always_ask=True)
-
-        confirm_custom_status = app.config.get('confirm_custom_status')
-        if confirm_custom_status == 'no':
-            send_it()
-            return
-        pritext = _('You are about to send a custom status. Are you sure you '
-            'want to continue?')
-        sectext = _('This contact will temporarily see you as %(status)s, '
-            'but only until you change your status. Then they will see '
-            'your global status.') % {'status': show}
-        ConfirmationDialogCheck(pritext, sectext,
-            _('_Do not ask me again'), on_response_ok=send_it)
-
     def on_status_combobox_changed(self, widget):
         """
         When we change our status via the combobox
@@ -5025,30 +4960,13 @@ class RosterWindow:
                     list_online, show_bookmarked=show_bookmarked)
                 menu.append(invite_menuitem)
 
-            # Send Custom Status
-            send_custom_status_menuitem = Gtk.MenuItem.new_with_mnemonic(
-                _('Send Cus_tom Status'))
-            if helpers.group_is_blocked(account, group):
-                send_custom_status_menuitem.set_sensitive(False)
-            status_menuitems = Gtk.Menu()
-            send_custom_status_menuitem.set_submenu(status_menuitems)
-            for s in ('online', 'chat', 'away', 'xa', 'dnd', 'offline'):
-                status_menuitem = Gtk.MenuItem.new_with_label(
-                    helpers.get_uf_show(s))
-                status_menuitem.connect('activate', self.on_send_custom_status,
-                    list_, s, group)
-                status_menuitems.append(status_menuitem)
-            menu.append(send_custom_status_menuitem)
-
             # there is no singlemessage and custom status for zeroconf
             if app.config.get_per('accounts', account, 'is_zeroconf'):
-                send_custom_status_menuitem.set_sensitive(False)
                 send_group_message_item.set_sensitive(False)
 
             if app.connections[account].connected < 2:
                 send_group_message_item.set_sensitive(False)
                 invite_menuitem.set_sensitive(False)
-                send_custom_status_menuitem.set_sensitive(False)
 
         if not group in helpers.special_groups:
             item = Gtk.SeparatorMenuItem.new() # separator
diff --git a/test/lib/gajim_mocks.py b/test/lib/gajim_mocks.py
index f554d58f5b..69efeecd6b 100644
--- a/test/lib/gajim_mocks.py
+++ b/test/lib/gajim_mocks.py
@@ -104,7 +104,6 @@ class MockInterface(Mock):
 
         self.instances = {}
         self.minimized_controls = {}
-        self.status_sent_to_users = Mock()
 
 
 class MockLogger(Mock):
-- 
GitLab