* Count Metacontacts only once. Fixes #3110
* add new function: is_big_brother
This commit is contained in:
parent
8bbc23dfd6
commit
97bb683e08
|
@ -277,6 +277,10 @@ class Contacts:
|
||||||
for account in accounts:
|
for account in accounts:
|
||||||
our_jid = common.gajim.get_jid_from_account(account)
|
our_jid = common.gajim.get_jid_from_account(account)
|
||||||
for jid in self.get_jid_list(account):
|
for jid in self.get_jid_list(account):
|
||||||
|
if self.has_brother(account, jid) and not \
|
||||||
|
self.is_big_brother(account, jid):
|
||||||
|
# count metacontacts only once
|
||||||
|
continue
|
||||||
if jid == our_jid:
|
if jid == our_jid:
|
||||||
continue
|
continue
|
||||||
if common.gajim.jid_is_transport(jid) and not \
|
if common.gajim.jid_is_transport(jid) and not \
|
||||||
|
@ -370,6 +374,17 @@ class Contacts:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def is_big_brother(self, account, jid):
|
||||||
|
tag = self.get_metacontacts_tag(account, jid)
|
||||||
|
if tag:
|
||||||
|
family = self.get_metacontacts_family(account, jid)
|
||||||
|
bb_data = self.get_metacontacts_big_brother(family)
|
||||||
|
bb_jid = bb_data['jid']
|
||||||
|
bb_account = bb_data['account']
|
||||||
|
if bb_jid == jid and bb_account == account:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def get_metacontacts_jids(self, tag):
|
def get_metacontacts_jids(self, tag):
|
||||||
'''Returns all jid for the given tag in the form {acct: [jid1, jid2],.}'''
|
'''Returns all jid for the given tag in the form {acct: [jid1, jid2],.}'''
|
||||||
answers = {}
|
answers = {}
|
||||||
|
|
|
@ -4713,6 +4713,7 @@ class RosterWindow:
|
||||||
# remove the source row
|
# remove the source row
|
||||||
self.remove_contact(c_source, account_source)
|
self.remove_contact(c_source, account_source)
|
||||||
# brother inherite big brother groups
|
# brother inherite big brother groups
|
||||||
|
old_groups = c_source.groups
|
||||||
c_source.groups = []
|
c_source.groups = []
|
||||||
for g in c_dest.groups:
|
for g in c_dest.groups:
|
||||||
c_source.groups.append(g)
|
c_source.groups.append(g)
|
||||||
|
@ -4733,6 +4734,9 @@ class RosterWindow:
|
||||||
self.draw_contact(_jid, _account)
|
self.draw_contact(_jid, _account)
|
||||||
self.add_contact_to_roster(c_source.jid, account_source)
|
self.add_contact_to_roster(c_source.jid, account_source)
|
||||||
self.draw_contact(c_dest.jid, account_dest)
|
self.draw_contact(c_dest.jid, account_dest)
|
||||||
|
# FIXME: Why do groups have to be redrawn by hand?
|
||||||
|
for g in old_groups:
|
||||||
|
self.draw_group(g, account_source)
|
||||||
|
|
||||||
context.finish(True, True, etime)
|
context.finish(True, True, etime)
|
||||||
|
|
||||||
|
@ -4925,13 +4929,7 @@ class RosterWindow:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Is the contact we drag a meta contact?
|
# Is the contact we drag a meta contact?
|
||||||
is_meta_contact = False
|
is_big_brother = gajim.contacts.is_big_brother(account_source, jid_source)
|
||||||
is_big_brother = False
|
|
||||||
tag = gajim.contacts.get_metacontacts_tag(account_source, jid_source)
|
|
||||||
if tag:
|
|
||||||
is_meta_contact = True
|
|
||||||
if model.iter_has_child(iter_source):
|
|
||||||
is_big_brother = True
|
|
||||||
|
|
||||||
# Contact drop on group row or between two contacts
|
# Contact drop on group row or between two contacts
|
||||||
if type_dest == 'group' or position == gtk.TREE_VIEW_DROP_BEFORE or \
|
if type_dest == 'group' or position == gtk.TREE_VIEW_DROP_BEFORE or \
|
||||||
|
|
Loading…
Reference in New Issue