diff --git a/src/common/helpers.py b/src/common/helpers.py index a6c9dbaf3430740673b7eb00ca46d6480e83da5a..98162da2ddd4763348ebe2372da76b47c18cd4c2 100644 --- a/src/common/helpers.py +++ b/src/common/helpers.py @@ -290,6 +290,21 @@ def get_uf_role(role, plural = False): else: role_name = _('Visitor') return role_name + +def get_uf_affiliation(affiliation): + '''Get a nice and translated affilition for muc''' + if affiliation == 'none': + affiliation_name = Q_('?Group Chat Contact Affiliation:None') + elif affiliation == 'owner': + affiliation_name = _('Owner') + elif affiliation == 'admin': + affiliation_name = _('Administrator') + elif affiliation == 'member': + affiliation_name = _('Member') + else: # Argl ! An unknown affiliation ! + affiliation_name = affiliation.capitalize() + return affiliation_name + def get_sorted_keys(adict): keys = adict.keys() diff --git a/src/tooltips.py b/src/tooltips.py index 56c4dd4611e65e6e565ac7c80e4702e277c51546..a03f9810ad83ad6afb5311ebec5125ec9f55f343 100644 --- a/src/tooltips.py +++ b/src/tooltips.py @@ -179,8 +179,10 @@ class StatusTable: status = unicode(status, encoding='utf-8') # reduce to 200 chars, 1 line status = gtkgui_helpers.reduce_chars_newlines(status, 200, 1) - str_status += ' - ' + status - return gtkgui_helpers.escape_for_pango_markup(str_status) + str_status = gtkgui_helpers.escape_for_pango_markup(str_status) + status = gtkgui_helpers.escape_for_pango_markup(status) + str_status += ' - <span style="italic">' + status + '</span>' + return str_status def add_status_row(self, file_path, show, str_status, status_time = None, show_lock = False): ''' appends a new row with status icon to the table ''' @@ -213,13 +215,6 @@ class StatusTable: gtk.ICON_SIZE_MENU) self.table.attach(lock_image, 4, 5, self.current_row, self.current_row + 1, 0, 0, 0, 0) - if status_time: - self.current_row += 1 - # decode locale encoded string, the same way as below (10x nk) - local_time = time.strftime("%c", status_time) - local_time = local_time.decode(locale.getpreferredencoding()) - status_time_label = gtk.Label(local_time) - status_time_label.set_alignment(0, 0) class NotificationAreaTooltip(BaseTooltip, StatusTable): ''' Tooltip that is shown in the notification area ''' @@ -364,32 +359,34 @@ class GCTooltip(BaseTooltip): vcard_table.set_homogeneous(False) vcard_current_row = 1 properties = [] - status_message_present = False - show = helpers.get_uf_show(contact.show) - nick_show_markup = '<span weight="bold">' + \ + nick_markup = '<span weight="bold">' + \ gtkgui_helpers.escape_for_pango_markup(contact.get_shown_name()) \ - + '</span> (' + show + ')' - properties.append((nick_show_markup, None)) + + '</span>' + properties.append((nick_markup, None)) - #status message : - if contact.status: - status_message = contact.status.strip() - if status_message != '': + if contact.status: # status message + status = contact.status.strip() + if status != '': # escape markup entities - status_message = gtkgui_helpers.reduce_chars_newlines(status_message, 200, 5) - status_message = '<span style="italic">' +\ - gtkgui_helpers.escape_for_pango_markup(status_message) + '</span>' - properties.append((status_message, None)) - status_message_present = True + status = gtkgui_helpers.reduce_chars_newlines(status, 200, 5) + status = '<span style="italic">' +\ + gtkgui_helpers.escape_for_pango_markup(status) + '</span>' + properties.append((status, None)) + else: # no status message, show SHOW instead + show = helpers.get_uf_show(contact.show) + show = '<span style="italic">' + show + '</span>' + properties.append((show, None)) if contact.jid.strip() != '': - properties.append((_('JID: '), contact.jid)) - if contact.affiliation != "none": - properties.append((_('Affiliation: '), contact.affiliation.capitalize())) + properties.append((_('Jabber ID: '), contact.jid)) if hasattr(contact, 'resource') and contact.resource.strip() != '': properties.append((_('Resource: '), gtkgui_helpers.escape_for_pango_markup(contact.resource) )) + if contact.affiliation != 'none': + affiliation = helpers.get_uf_affiliation(contact.affiliation) +\ + _(' of the room') + properties.append((affiliation, None)) # Add avatar puny_name = helpers.sanitize_filename(contact.name) @@ -491,23 +488,10 @@ class RosterTooltip(NotificationAreaTooltip): vcard_table.set_homogeneous(False) vcard_current_row = 1 properties = [] - jid_markup = '<span weight="bold">' + prim_contact.jid + '</span>' - properties.append((jid_markup, None)) - - properties.append((_('Name: '), gtkgui_helpers.escape_for_pango_markup( - prim_contact.get_shown_name()))) - if prim_contact.sub: - properties.append(( _('Subscription: '), - gtkgui_helpers.escape_for_pango_markup(helpers.get_uf_sub(prim_contact.sub)))) - if prim_contact.keyID: - keyID = None - if len(prim_contact.keyID) == 8: - keyID = prim_contact.keyID - elif len(prim_contact.keyID) == 16: - keyID = prim_contact.keyID[8:] - if keyID: - properties.append((_('OpenPGP: '), - gtkgui_helpers.escape_for_pango_markup(keyID))) + name_markup = u'<span weight="bold">' + gtkgui_helpers.escape_for_pango_markup( + prim_contact.get_shown_name())+ '</span>' + properties.append((name_markup, None)) + num_resources = 0 # put contacts in dict, where key is priority contacts_dict = {} @@ -518,11 +502,6 @@ class RosterTooltip(NotificationAreaTooltip): contacts_dict[contact.priority].append(contact) else: contacts_dict[contact.priority] = [contact] - - if num_resources == 1 and contact.resource: - properties.append((_('Resource: '), - gtkgui_helpers.escape_for_pango_markup(contact.resource) + ' (' + \ - unicode(contact.priority) + ')')) if num_resources > 1: properties.append((_('Status: '), ' ')) contact_keys = contacts_dict.keys() @@ -540,6 +519,26 @@ class RosterTooltip(NotificationAreaTooltip): else: # only one resource if contact.show: show = helpers.get_uf_show(contact.show) + if contact.last_status_time: + vcard_current_row += 1 + if contact.show == 'offline': + text = ' - ' + _('Last status : %s') + else: + text = _(' since %s') + + if time.strftime('%j', time.localtime())== \ + time.strftime('%j', contact.last_status_time): + # it's today, show only the locale hour representation + local_time = time.strftime('%X', contact.last_status_time) + else: + # time.strftime returns locale encoded string + local_time = time.strftime('%c', contact.last_status_time) + local_time = local_time.decode(locale.getpreferredencoding()) + text = text % local_time + show += text + show = u'<span style="italic">' + show + '</span>' + # we append show at end of properties below + if contact.status: status = contact.status.strip() if status: @@ -548,26 +547,32 @@ class RosterTooltip(NotificationAreaTooltip): status = gtkgui_helpers.reduce_chars_newlines(status, 200, 5) # escape markup entities. status = gtkgui_helpers.escape_for_pango_markup(status) - show += ' - ' + status - properties.append((_('Status: '), show)) - - if contact.last_status_time: - vcard_current_row += 1 - if contact.show == 'offline': - text = _('Last status on %s') - else: - text = _('Since %s') - - if time.strftime('%j', time.localtime())== \ - time.strftime('%j', contact.last_status_time): - # it's today, show only the locale hour representation - local_time = time.strftime('%X', contact.last_status_time) - else: - # time.strftime returns locale encoded string - local_time = time.strftime('%c', contact.last_status_time) - local_time = local_time.decode(locale.getpreferredencoding()) - text = text % local_time - properties.append(('<span style="italic">%s</span>' % text, None)) + properties.append((u'<span style="italic">%s</span>' % status, None)) + + + properties.append((_('Jabber ID: '), prim_contact.jid )) + if prim_contact.sub and prim_contact.sub != 'both': + # ('both' is the normal sub so we don't show it) + properties.append(( _('Subscription: '), + gtkgui_helpers.escape_for_pango_markup(helpers.get_uf_sub(prim_contact.sub)))) + if prim_contact.keyID: + keyID = None + if len(prim_contact.keyID) == 8: + keyID = prim_contact.keyID + elif len(prim_contact.keyID) == 16: + keyID = prim_contact.keyID[8:] + if keyID: + properties.append((_('OpenPGP: '), + gtkgui_helpers.escape_for_pango_markup(keyID))) + + if num_resources <= 1: + # contact is offline(show only show) or has only one ressource + if num_resources == 1 and contact.resource: + properties.append((_('Resource: '), + gtkgui_helpers.escape_for_pango_markup(contact.resource) + ' (' + \ + unicode(contact.priority) + ')')) + properties.append((show, None)) + while properties: property = properties.pop(0) vcard_current_row += 1