[merzhin & asterix] show number of connecter / total contacts in account and group rows. fixes #1728

This commit is contained in:
Yann Leboulanger 2006-11-15 10:44:27 +00:00
parent e9755daa9d
commit f15305b7c6
2 changed files with 77 additions and 10 deletions

View File

@ -251,6 +251,38 @@ class Contacts:
group_contacts += contacts
return group_contacts
def get_nb_online_total_contacts(self, accounts = [], groups = []):
'''Returns the number of online contacts and the total number of
contacts'''
if accounts == []:
accounts = self.get_accounts()
nbr_online = 0
nbr_total = 0
for account in accounts:
for jid in self.get_jid_list(account):
if common.gajim.jid_is_transport(jid):
# do not count transports
continue
contact = self.get_contact_with_highest_priority(account, jid)
in_groups = False
if groups == []:
in_groups = True
else:
contact_groups = contact.groups
if not contact_groups:
# Contact is not in a group, so count it in General group
contact_groups.append(_('General'))
for group in groups:
if group in contact_groups:
in_groups = True
break
if in_groups:
if contact.show not in ('offline', 'error'):
nbr_online += 1
nbr_total += 1
return nbr_online, nbr_total
def define_metacontacts(self, account, tags_list):
self._metacontacts_tags[account] = tags_list

View File

@ -80,9 +80,8 @@ class RosterWindow:
root = self.get_account_iter(account)
group_iter = model.iter_children(root)
# C_NAME column contacts the pango escaped group name
name = gtkgui_helpers.escape_for_pango_markup(name)
while group_iter:
group_name = model[group_iter][C_NAME].decode('utf-8')
group_name = model[group_iter][C_JID].decode('utf-8')
if name == group_name:
break
group_iter = model.iter_next(group_iter)
@ -217,13 +216,20 @@ class RosterWindow:
else:
model[iter][C_SECPIXBUF] = None
path = model.get_path(iter)
account_name = account
accounts = [account]
if self.regroup:
account = _('Merged accounts')
account_name = _('Merged accounts')
accounts = []
if not self.tree.row_expanded(path) and model.iter_has_child(iter):
# account row not expanded
model[iter][C_NAME] = '[%s]' % account
else:
model[iter][C_NAME] = account
account_name = '[%s]' % account_name
if gajim.account_is_connected(account) or (self.regroup and \
gajim.get_number_of_connected_accounts()):
nbr_on, nbr_total = gajim.contacts.get_nb_online_total_contacts(
accounts = accounts)
account_name += ' (%s/%s)' % (repr(nbr_on),repr(nbr_total))
model[iter][C_NAME] = account_name
def remove_newly_added(self, jid, account):
if jid in gajim.newly_added[account]:
@ -342,6 +348,7 @@ class RosterWindow:
self.jabber_state_images['16']['closed'],
gtkgui_helpers.escape_for_pango_markup(group), 'group',
group, account, False, None])
self.draw_group(group, account)
if model.iter_n_children(IterAcct) == 1: # We added the first one
self.draw_account(account)
if group not in gajim.groups[account]: # It can probably never append
@ -372,6 +379,20 @@ class RosterWindow:
data['jid'])
self.add_contact_to_roster(data['jid'], data['account'])
def draw_group(self, group, account):
iter = self.get_group_iter(group, account)
if not iter:
return
if self.regroup:
accounts = []
else:
accounts = [account]
nbr_on, nbr_total = gajim.contacts.get_nb_online_total_contacts(
accounts = accounts, groups = [group])
model = self.tree.get_model()
model.set_value(iter, 1 , gtkgui_helpers.escape_for_pango_markup(
'%s (%s/%s)' % (group, repr(nbr_on), repr(nbr_total))))
def add_to_not_in_the_roster(self, account, jid):
''' add jid to group "not in the roster", he MUST not be in roster yet,
return contact '''
@ -1189,6 +1210,14 @@ class RosterWindow:
account, contact.jid):
ctrl.draw_banner()
if not contact.groups:
self.draw_group(_('General'), account)
else:
for group in contact.groups:
self.draw_group(group, account)
self.draw_account(account)
def on_info(self, widget, contact, account):
'''Call vcard_information_window class to display contact's information'''
info = gajim.interface.instances[account]['infos']
@ -1275,8 +1304,14 @@ class RosterWindow:
contacts = []
connection = gajim.connections[account]
# get our current contact info
contact = gajim.contacts.create_contact(jid = jid, name = account,
show = connection.get_status(), sub = '',
nbr_on, nbr_total = gajim.contacts.get_nb_online_total_contacts(
accounts = [account])
account_name = account
if gajim.account_is_connected(account):
account_name += '(%s/%s)' % (repr(nbr_on), repr(nbr_total))
contact = gajim.contacts.create_contact(jid = jid,
name = account_name, show = connection.get_status(), sub = '',
status = connection.status,
resource = gajim.config.get_per('accounts', connection.name,
'resource'),