[roidelapluie] ability to block several contacts in the same time. fixes #3128

This commit is contained in:
Yann Leboulanger 2007-04-25 15:54:58 +00:00
parent 5162f691fd
commit 550785233f
5 changed files with 249 additions and 106 deletions

View file

@ -11,7 +11,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1461"> <widget class="GtkImage" id="image1466">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-new</property> <property name="stock">gtk-new</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -32,11 +32,23 @@
</child> </child>
<child> <child>
<widget class="GtkMenuItem" id="blocked_contacts_menuitem"> <widget class="GtkImageMenuItem" id="blocked_contacts_menuitem">
<property name="visible">True</property> <property name="visible">True</property>
<property name="label" translatable="yes">_Blocked Contacts</property> <property name="label" translatable="yes">_Blocked Contacts</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<signal name="activate" handler="on_blocked_contacts_menuitem_activate" last_modification_time="Thu, 19 Apr 2007 15:32:47 GMT"/> <signal name="activate" handler="on_blocked_contacts_menuitem_activate" last_modification_time="Thu, 19 Apr 2007 15:32:47 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image1467">
<property name="visible">True</property>
<property name="stock">gtk-stop</property>
<property name="icon_size">1</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget> </widget>
</child> </child>
@ -67,7 +79,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1462"> <widget class="GtkImage" id="image1468">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-new</property> <property name="stock">gtk-new</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -109,7 +121,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1463"> <widget class="GtkImage" id="image1469">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-clear</property> <property name="stock">gtk-clear</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>

View file

@ -50,6 +50,7 @@
<property name="fixed_height_mode">False</property> <property name="fixed_height_mode">False</property>
<property name="hover_selection">False</property> <property name="hover_selection">False</property>
<property name="hover_expand">False</property> <property name="hover_expand">False</property>
<signal name="row_activated" handler="on_contacts_treeview_row_activated" last_modification_time="Wed, 25 Apr 2007 13:09:39 GMT"/>
</widget> </widget>
</child> </child>
</widget> </widget>
@ -65,11 +66,73 @@
<property name="border_width">3</property> <property name="border_width">3</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="label">gtk-remove</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property> <property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property> <property name="focus_on_click">True</property>
<signal name="clicked" handler="on_remove_button_clicked" last_modification_time="Sun, 22 Apr 2007 14:02:48 GMT"/> <signal name="clicked" handler="on_remove_button_clicked" last_modification_time="Sun, 22 Apr 2007 14:02:48 GMT"/>
<child>
<widget class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xscale">0</property>
<property name="yscale">0</property>
<property name="top_padding">0</property>
<property name="bottom_padding">0</property>
<property name="left_padding">0</property>
<property name="right_padding">0</property>
<child>
<widget class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">2</property>
<child>
<widget class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="stock">gtk-remove</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label">_Unblock</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
</child>
</widget>
</child>
</widget> </widget>
<packing> <packing>
<property name="padding">0</property> <property name="padding">0</property>

View file

@ -12,7 +12,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1650"> <widget class="GtkImage" id="image1701">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-jump-to</property> <property name="stock">gtk-jump-to</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -32,7 +32,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1651"> <widget class="GtkImage" id="image1702">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-go-up</property> <property name="stock">gtk-go-up</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -52,7 +52,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1652"> <widget class="GtkImage" id="image1703">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-new</property> <property name="stock">gtk-new</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -72,7 +72,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1653"> <widget class="GtkImage" id="image1704">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-go-back</property> <property name="stock">gtk-go-back</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -91,7 +91,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1654"> <widget class="GtkImage" id="image1705">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-refresh</property> <property name="stock">gtk-refresh</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -111,48 +111,6 @@
</widget> </widget>
</child> </child>
<child>
<widget class="GtkImageMenuItem" id="block_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Block</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_block_menuitem_activate" last_modification_time="Sun, 22 Apr 2007 10:35:33 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image1655">
<property name="visible">True</property>
<property name="stock">gtk-stop</property>
<property name="icon_size">1</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="unblock_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Unblock</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_unblock_menuitem_activate" last_modification_time="Sun, 22 Apr 2007 12:08:00 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image1656">
<property name="visible">True</property>
<property name="stock">gtk-stop</property>
<property name="icon_size">1</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
</child>
<child> <child>
<widget class="GtkSeparatorMenuItem" id="above_send_file_separator"> <widget class="GtkSeparatorMenuItem" id="above_send_file_separator">
<property name="visible">True</property> <property name="visible">True</property>
@ -166,7 +124,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1657"> <widget class="GtkImage" id="image1706">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-file</property> <property name="stock">gtk-file</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -186,7 +144,7 @@
<signal name="activate" handler="on_assign_openpgp_key_menuitem_activate" last_modification_time="Thu, 30 Jun 2005 22:57:59 GMT"/> <signal name="activate" handler="on_assign_openpgp_key_menuitem_activate" last_modification_time="Thu, 30 Jun 2005 22:57:59 GMT"/>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1658"> <widget class="GtkImage" id="image1707">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-dialog-authentication</property> <property name="stock">gtk-dialog-authentication</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -206,7 +164,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1659"> <widget class="GtkImage" id="image1708">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-info</property> <property name="stock">gtk-info</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -226,7 +184,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1660"> <widget class="GtkImage" id="image1709">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-execute</property> <property name="stock">gtk-execute</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -251,7 +209,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1661"> <widget class="GtkImage" id="image1710">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-dialog-question</property> <property name="stock">gtk-dialog-question</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -272,7 +230,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1662"> <widget class="GtkImage" id="image1711">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-go-up</property> <property name="stock">gtk-go-up</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -292,7 +250,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1663"> <widget class="GtkImage" id="image1712">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-go-down</property> <property name="stock">gtk-go-down</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -312,7 +270,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1664"> <widget class="GtkImage" id="image1713">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-stop</property> <property name="stock">gtk-stop</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -329,13 +287,55 @@
</widget> </widget>
</child> </child>
<child>
<widget class="GtkImageMenuItem" id="block_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Block</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_block_menuitem_activate" last_modification_time="Sun, 22 Apr 2007 10:35:33 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image1714">
<property name="visible">True</property>
<property name="stock">gtk-no</property>
<property name="icon_size">1</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="unblock_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Unblock</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_unblock_menuitem_activate" last_modification_time="Sun, 22 Apr 2007 12:08:00 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image1715">
<property name="visible">True</property>
<property name="stock">gtk-yes</property>
<property name="icon_size">1</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
</child>
<child> <child>
<widget class="GtkImageMenuItem" id="add_to_roster_menuitem"> <widget class="GtkImageMenuItem" id="add_to_roster_menuitem">
<property name="label" translatable="yes">_Add to Roster</property> <property name="label" translatable="yes">_Add to Roster</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1665"> <widget class="GtkImage" id="image1716">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-add</property> <property name="stock">gtk-add</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -354,7 +354,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1666"> <widget class="GtkImage" id="image1717">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-remove</property> <property name="stock">gtk-remove</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>
@ -386,7 +386,7 @@
<property name="use_underline">True</property> <property name="use_underline">True</property>
<child internal-child="image"> <child internal-child="image">
<widget class="GtkImage" id="image1667"> <widget class="GtkImage" id="image1718">
<property name="visible">True</property> <property name="visible">True</property>
<property name="stock">gtk-justify-fill</property> <property name="stock">gtk-justify-fill</property>
<property name="icon_size">1</property> <property name="icon_size">1</property>

View file

@ -56,7 +56,7 @@ class EditGroupsDialog:
if len(list_) == 1: if len(list_) == 1:
contact = list_[0][0] contact = list_[0][0]
self.xml.get_widget('nickname_label').set_markup( self.xml.get_widget('nickname_label').set_markup(
_("Contact name: <i>%s</i>") % contact.get_shown_name()) _('Contact name: <i>%s</i>') % contact.get_shown_name())
self.xml.get_widget('jid_label').set_markup( self.xml.get_widget('jid_label').set_markup(
_('Jabber ID: <i>%s</i>') % contact.jid) _('Jabber ID: <i>%s</i>') % contact.jid)
else: else:
@ -2308,12 +2308,11 @@ class BlockedContactsWindow:
self.remove_button = self.xml.get_widget('remove_button') self.remove_button = self.xml.get_widget('remove_button')
self.contacts_treeview = self.xml.get_widget('contacts_treeview') self.contacts_treeview = self.xml.get_widget('contacts_treeview')
renderer = gtk.CellRendererText() renderer = gtk.CellRendererText()
self.store = gtk.ListStore(str) self.store = gtk.ListStore(str)
self.contacts_treeview.set_model(self.store) self.contacts_treeview.set_model(self.store)
column = gtk.TreeViewColumn("Contact", renderer, text=0) column = gtk.TreeViewColumn('Contact', renderer, text=0)
self.contacts_treeview.append_column(column) self.contacts_treeview.append_column(column)
if len(gajim.connections) > 1: if len(gajim.connections) > 1:
@ -2321,7 +2320,6 @@ class BlockedContactsWindow:
else: else:
title = _('Blocked Contacts') title = _('Blocked Contacts')
self.window.set_title(title) self.window.set_title(title)
self.window.show_all() self.window.show_all()
self.xml.signal_autoconnect(self) self.xml.signal_autoconnect(self)
gajim.connections[self.account].get_privacy_list('block') gajim.connections[self.account].get_privacy_list('block')
@ -2332,38 +2330,53 @@ class BlockedContactsWindow:
del gajim.interface.instances[self.account][key_name] del gajim.interface.instances[self.account][key_name]
def on_remove_button_clicked(self, widget): def on_remove_button_clicked(self, widget):
tags=[] if self.contacts_treeview.get_selection().get_selected()[1] == None:
return
tags = []
rule_selected = self.store.get_path( rule_selected = self.store.get_path(
self.contacts_treeview.get_selection().get_selected()[1])[0] self.contacts_treeview.get_selection().get_selected()[1])[0]
for i in range(0,len(self.global_rules)): for i in range(0,len(self.global_rules)):
if i != rule_selected: if i != rule_selected:
tags.append(self.global_rules[i]) tags.append(self.global_rules[i])
else:
deleted_rule = self.global_rules[i]
for rule in self.global_rules_to_append: for rule in self.global_rules_to_append:
tags.append(rule) tags.append(rule)
gajim.connections[self.account].set_privacy_list( gajim.connections[self.account].set_privacy_list(
'block', tags) 'block', tags)
gajim.connections[self.account].set_active_list('block')
gajim.connections[self.account].set_default_list('block')
gajim.connections[self.account].get_privacy_list('block') gajim.connections[self.account].get_privacy_list('block')
if len(tags) == 0: if len(tags) == 0:
self.privacy_list_received([]) self.privacy_list_received([])
gajim.connections[self.account].blocked_contacts = [] gajim.connections[self.account].blocked_contacts = []
gajim.connections[self.account].blocked_groups = []
gajim.connections[self.account].blocked_list = [] gajim.connections[self.account].blocked_list = []
gajim.connections[self.account].set_default_list('') gajim.connections[self.account].set_default_list('')
gajim.connections[self.account].set_active_list('') gajim.connections[self.account].set_active_list('')
gajim.connections[self.account].del_privacy_list('block') gajim.connections[self.account].del_privacy_list('block')
status = gajim.connections[self.account].connected
msg = gajim.connections[self.account].status
show = gajim.SHOW_LIST[gajim.connections[self.account].connected]
if deleted_rule['type'] == 'jid':
gajim.connections[self.account].send_custom_status(show, msg,
deleted_rule['value'])
else:
for jid in gajim.contacts.get_jid_list(self.account):
contact = gajim.contacts.get_contact_with_highest_priority(
self.account, jid)
if deleted_rule['value'] in contact.groups:
gajim.connections[self.account].send_custom_status(show, msg,
contact.jid)
def privacy_list_received(self, rules): def privacy_list_received(self, rules):
self.store.clear() self.store.clear()
self.global_rules = [] self.global_rules = []
self.global_rules_to_append = [] self.global_rules_to_append = []
for rule in rules: for rule in rules:
if rule['type'] == "jid" and rule['action'] == "deny": if rule['type'] == 'jid' and rule['action'] == 'deny':
#self.global_rules[text_item] = rule #self.global_rules[text_item] = rule
self.store.append([rule['value']]) self.store.append([rule['value']])
self.global_rules.append(rule) self.global_rules.append(rule)
elif rule['type'] == "group" and rule['action'] == "deny": elif rule['type'] == 'group' and rule['action'] == 'deny':
text_item = _('Group %s') % rule['value'] text_item = _('Group %s') % rule['value']
self.store.append([text_item]) self.store.append([text_item])
self.global_rules.append(rule) self.global_rules.append(rule)

View file

@ -1425,6 +1425,7 @@ class RosterWindow:
on_response_ok = (remove, list_)) on_response_ok = (remove, list_))
def on_block(self, widget, iter, blockedlist): def on_block(self, widget, iter, blockedlist):
''' When clicked on the 'block' button in context menu. '''
model = self.tree.get_model() model = self.tree.get_model()
accounts = [] accounts = []
if blockedlist == None: if blockedlist == None:
@ -1435,50 +1436,86 @@ class RosterWindow:
self.send_status(account, 'offline', msg, to = jid) self.send_status(account, 'offline', msg, to = jid)
new_rule = {'order': u'1', 'type': u'jid', 'action': u'deny', new_rule = {'order': u'1', 'type': u'jid', 'action': u'deny',
'value' : jid, 'child': [u'message', u'iq', u'presence-out']} 'value' : jid, 'child': [u'message', u'iq', u'presence-out']}
else:
model = self.tree.get_model()
group = model[iter][C_JID].decode('utf-8')
msg = self.get_status_message('offline')
for (contact, account) in blockedlist:
if account not in accounts:
if gajim.connections[account].privacy_rules_supported:
accounts.append(account)
self.send_status(account, 'offline', msg, to = contact.jid)
else:
self.send_status(account, 'offline', msg, to = contact.jid)
new_rule = {'order': u'1', 'type': u'group', 'action': u'deny',
'value' : group, 'child': [u'message', u'iq', u'presence-out']}
for account in accounts:
gajim.connections[account].blocked_list.append(new_rule) gajim.connections[account].blocked_list.append(new_rule)
gajim.connections[account].set_privacy_list( else:
msg = self.get_status_message('offline')
if iter == None:
for (contact, account) in blockedlist:
if account not in accounts:
if gajim.connections[account].privacy_rules_supported:
accounts.append(account)
self.send_status(account, 'offline', msg, to = contact.jid)
new_rule = {'order': u'1', 'type': u'jid',
'action': u'deny', 'value' : contact.jid,
'child': [u'message', u'iq', u'presence-out']}
gajim.connections[account].blocked_list.append(new_rule)
else:
self.send_status(account, 'offline', msg, to = contact.jid)
new_rule = {'order': u'1', 'type': u'jid',
'action': u'deny', 'value' : contact.jid,
'child': [u'message', u'iq', u'presence-out']}
gajim.connections[account].blocked_list.append(new_rule)
else:
group = model[iter][C_JID].decode('utf-8')
msg = self.get_status_message('offline')
for (contact, account) in blockedlist:
if account not in accounts:
if gajim.connections[account].privacy_rules_supported:
accounts.append(account)
self.send_status(account, 'offline', msg, to = contact.jid)
else:
self.send_status(account, 'offline', msg, to = contact.jid)
new_rule = {'order': u'1', 'type': u'group', 'action': u'deny',
'value' : group, 'child': [u'message', u'iq', u'presence-out']}
gajim.connections[account].blocked_list.append(new_rule)
for account in accounts:
gajim.connections[account].set_privacy_list(
'block', gajim.connections[account].blocked_list) 'block', gajim.connections[account].blocked_list)
if len(gajim.connections[account].blocked_list) == 1: if len(gajim.connections[account].blocked_list) == 1:
gajim.connections[account].set_active_list('block') gajim.connections[account].set_active_list('block')
gajim.connections[account].set_default_list('block') gajim.connections[account].set_default_list('block')
gajim.connections[account].get_privacy_list('block') gajim.connections[account].get_privacy_list('block')
def on_unblock(self, widget, iter, blockedlist): def on_unblock(self, widget, iter, group_list):
''' When clicked on the 'unblock' button in context menu. '''
model = self.tree.get_model() model = self.tree.get_model()
accounts = [] accounts = []
if blockedlist == None: if group_list == None:
jid = model[iter][C_JID].decode('utf-8') jid = model[iter][C_JID].decode('utf-8')
jid_account = model[iter][C_ACCOUNT].decode('utf-8') jid_account = model[iter][C_ACCOUNT].decode('utf-8')
accounts.append(jid_account) accounts.append(jid_account)
gajim.connections[jid_account].new_blocked_list = [] gajim.connections[jid_account].new_blocked_list = []
for rule in gajim.connections[jid_account].blocked_list: for rule in gajim.connections[jid_account].blocked_list:
if rule['action'] != 'deny' or rule['type'] != 'jid' or rule['value'] != jid: if rule['action'] != 'deny' or rule['type'] != 'jid' \
or rule['value'] != jid:
gajim.connections[jid_account].new_blocked_list.append(rule) gajim.connections[jid_account].new_blocked_list.append(rule)
else: else:
model = self.tree.get_model() if iter == None:
group = model[iter][C_JID].decode('utf-8') for (contact, account) in group_list:
for (contact, account) in blockedlist: if account not in accounts:
if account not in accounts: if gajim.connections[account].privacy_rules_supported:
if gajim.connections[account].privacy_rules_supported: accounts.append(account)
accounts.append(account) gajim.connections[account].new_blocked_list = []
gajim.connections[account].new_blocked_list = [] gajim.connections[account].to_unblock = []
for rule in gajim.connections[account].blocked_list: gajim.connections[account].to_unblock.append(contact.jid)
if rule['action'] != 'deny' or rule['type'] != 'group' or rule['value'] != group: else:
gajim.connections[account].new_blocked_list.append(rule) gajim.connections[account].to_unblock.append(contact.jid)
for account in accounts:
for rule in gajim.connections[account].blocked_list:
if rule['action'] != 'deny' or rule['type'] != 'jid' \
or rule['value'] not in gajim.connections[account].to_unblock:
gajim.connections[account].new_blocked_list.append(rule)
else:
group = model[iter][C_JID].decode('utf-8')
for (contact, account) in group_list:
if account not in accounts:
if gajim.connections[account].privacy_rules_supported:
accounts.append(account)
gajim.connections[account].new_blocked_list = []
for rule in gajim.connections[account].blocked_list:
if rule['action'] != 'deny' or rule['type'] != 'group' \
or rule['value'] != group:
gajim.connections[account].new_blocked_list.append(rule)
for account in accounts: for account in accounts:
gajim.connections[account].set_privacy_list( gajim.connections[account].set_privacy_list(
'block', gajim.connections[account].new_blocked_list) 'block', gajim.connections[account].new_blocked_list)
@ -1490,7 +1527,10 @@ class RosterWindow:
gajim.connections[account].set_default_list('') gajim.connections[account].set_default_list('')
gajim.connections[account].set_active_list('') gajim.connections[account].set_active_list('')
gajim.connections[account].del_privacy_list('block') gajim.connections[account].del_privacy_list('block')
if blockedlist == None: if gajim.interface.instances[account].has_key('blocked_contacts'):
gajim.interface.instances[account]['blocked_contacts'].\
privacy_list_received([])
if group_list == None:
status = gajim.connections[jid_account].connected status = gajim.connections[jid_account].connected
msg = gajim.connections[jid_account].status msg = gajim.connections[jid_account].status
if not self.regroup: if not self.regroup:
@ -1499,7 +1539,7 @@ class RosterWindow:
show = helpers.get_global_show() show = helpers.get_global_show()
self.send_status(jid_account, show, msg, to = jid) self.send_status(jid_account, show, msg, to = jid)
else: else:
for (contact, account) in blockedlist: for (contact, account) in group_list:
if not self.regroup: if not self.regroup:
show = gajim.SHOW_LIST[gajim.connections[account].connected] show = gajim.SHOW_LIST[gajim.connections[account].connected]
else: # accounts merged else: # accounts merged
@ -2146,6 +2186,7 @@ class RosterWindow:
connected_accounts = [] connected_accounts = []
contacts_transport = -1 contacts_transport = -1
# -1 is at start, False when not from the same, None when jabber # -1 is at start, False when not from the same, None when jabber
is_blocked = True
for iter in iters: for iter in iters:
jid = model[iter][C_JID].decode('utf-8') jid = model[iter][C_JID].decode('utf-8')
account = model[iter][C_ACCOUNT].decode('utf-8') account = model[iter][C_ACCOUNT].decode('utf-8')
@ -2160,6 +2201,8 @@ class RosterWindow:
contacts_transport = transport contacts_transport = transport
if contacts_transport != transport: if contacts_transport != transport:
contacts_transport = False contacts_transport = False
if jid not in gajim.connections[account].blocked_contacts:
is_blocked = False
list_.append((contact, account)) list_.append((contact, account))
menu = gtk.Menu() menu = gtk.Menu()
@ -2229,6 +2272,18 @@ class RosterWindow:
send_group_message_item.connect('activate', send_group_message_item.connect('activate',
self.on_send_single_message_menuitem_activate, account, list_) self.on_send_single_message_menuitem_activate, account, list_)
if is_blocked:
unblock_menuitem = gtk.ImageMenuItem(_('_Unblock'))
icon = gtk.image_new_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_MENU)
unblock_menuitem.set_image(icon)
unblock_menuitem.connect('activate', self.on_unblock, None, list_)
menu.append(unblock_menuitem)
else:
block_menuitem = gtk.ImageMenuItem(_('_Block'))
icon = gtk.image_new_from_stock(gtk.STOCK_NO, gtk.ICON_SIZE_MENU)
block_menuitem.set_image(icon)
block_menuitem.connect('activate', self.on_block, None, list_)
menu.append(block_menuitem)
# unsensitive if one account is not connected # unsensitive if one account is not connected
if one_account_offline: if one_account_offline:
remove_item.set_sensitive(False) remove_item.set_sensitive(False)
@ -2330,13 +2385,13 @@ class RosterWindow:
if group not in helpers.special_groups + (_('General'),): if group not in helpers.special_groups + (_('General'),):
if is_blocked: if is_blocked:
unblock_menuitem = gtk.ImageMenuItem(_('_Unblock')) unblock_menuitem = gtk.ImageMenuItem(_('_Unblock'))
icon = gtk.image_new_from_stock(gtk.STOCK_STOP, gtk.ICON_SIZE_MENU) icon = gtk.image_new_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_MENU)
unblock_menuitem.set_image(icon) unblock_menuitem.set_image(icon)
unblock_menuitem.connect('activate', self.on_unblock, iter, list_) unblock_menuitem.connect('activate', self.on_unblock, iter, list_)
menu.append(unblock_menuitem) menu.append(unblock_menuitem)
else: else:
block_menuitem = gtk.ImageMenuItem(_('_Block')) block_menuitem = gtk.ImageMenuItem(_('_Block'))
icon = gtk.image_new_from_stock(gtk.STOCK_STOP, gtk.ICON_SIZE_MENU) icon = gtk.image_new_from_stock(gtk.STOCK_NO, gtk.ICON_SIZE_MENU)
block_menuitem.set_image(icon) block_menuitem.set_image(icon)
block_menuitem.connect('activate', self.on_block, iter, list_) block_menuitem.connect('activate', self.on_block, iter, list_)
menu.append(block_menuitem) menu.append(block_menuitem)