diff --git a/clients_icons/clients_icons.py b/clients_icons/clients_icons.py index af05612..c66de3b 100644 --- a/clients_icons/clients_icons.py +++ b/clients_icons/clients_icons.py @@ -33,16 +33,16 @@ log = logging.getLogger('gajim.p.client_icons') class ClientsIconsPlugin(GajimPlugin): def init(self): - self.description = _('Shows client icons in roster' - ' and in groupchats.') + self.description = _('Shows client icons in your contact list ' + 'and in the groupchat participants list.') self.config_dialog = partial(ClientsIconsConfigDialog, self) self.gui_extension_points = { - 'roster_tooltip_populate': ( - self.connect_with_roster_tooltip_populate, + 'roster_tooltip_resource_populate': ( + self._roster_tooltip_resource_populate, None), 'gc_tooltip_populate': ( - self.connect_with_gc_tooltip_populate, + self._gc_roster_tooltip_populate, None), } @@ -62,8 +62,7 @@ class ClientsIconsPlugin(GajimPlugin): return identity.name def _get_image_and_client_name(self, contact, widget): - disco_info = app.storage.cache.get_last_disco_info( - contact.get_full_jid()) + disco_info = app.storage.cache.get_last_disco_info(contact.jid) if disco_info is None: return None @@ -78,46 +77,26 @@ class ClientsIconsPlugin(GajimPlugin): surface = load_icon(icon_name, widget=widget) return Gtk.Image.new_from_surface(surface), client_name - @staticmethod - def _is_groupchat(contact): - if hasattr(contact, 'is_groupchat'): - return contact.is_groupchat - return False + def _roster_tooltip_resource_populate(self, resource_box, resource): + if not self.config['show_in_tooltip']: + return - def add_tooltip_row(self, tooltip, contact, tooltip_grid): - caps = contact.client_caps._node - caps_image, client_name = self.get_icon(caps, contact, tooltip_grid) - caps_image.set_halign(Gtk.Align.END) + result = self._get_image_and_client_name(resource, resource_box) + if result is None: + return - # Fill clients grid - self.grid = Gtk.Grid() - self.grid.set_name('client_icons_grid') - self.grid.set_property('column-spacing', 5) - self.grid.attach(caps_image, 1, 1, 1, 1) - label_name = Gtk.Label() - label_name.set_halign(Gtk.Align.END) - label_name.set_valign(Gtk.Align.CENTER) - label_name.set_markup(client_name) - self.grid.attach(label_name, 2, 1, 1, 1) - self.grid.show_all() + image, client_name = result + label = Gtk.Label(label=client_name) - # Set label - label = Gtk.Label() - label.set_name('client_icons_label') - label.set_halign(Gtk.Align.END) - label.set_valign(Gtk.Align.CENTER) - label.set_markup(_('Client:')) - label.show() + client_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, + halign=Gtk.Align.START) + client_box.add(image) + client_box.add(label) - # Set client grid to tooltip - tooltip_grid.insert_next_to(tooltip.resource_label, - Gtk.PositionType.BOTTOM) - tooltip_grid.attach_next_to(label, tooltip.resource_label, - Gtk.PositionType.BOTTOM, 1, 1) - tooltip_grid.attach_next_to(self.grid, label, - Gtk.PositionType.RIGHT, 1, 1) + children = resource_box.get_children() + children[0].add(client_box) - def connect_with_gc_tooltip_populate(self, tooltip, contact, tooltip_grid): + def _gc_roster_tooltip_populate(self, tooltip, contact, tooltip_grid): if not self.config['show_in_tooltip']: return @@ -138,74 +117,3 @@ class ClientsIconsPlugin(GajimPlugin): Gtk.PositionType.BOTTOM) tooltip_grid.attach_next_to(box, tooltip._ui.affiliation, Gtk.PositionType.BOTTOM, 1, 1) - - def connect_with_roster_tooltip_populate(self, tooltip, contacts, - tooltip_grid): - if not self.config['show_in_tooltip']: - return - - if len(contacts) == 1 and contacts[0].jid in app.get_our_jids(): - return - - if self._is_groupchat(contacts[0]): - return - - # Put contacts in dict, where key is priority - num_resources = 0 - contacts_dict = {} - for contact in contacts: - if contact.show == 'offline': - return - if contact.resource: - num_resources += 1 - if int(contact.priority) in contacts_dict: - contacts_dict[int(contact.priority)].append(contact) - else: - contacts_dict[int(contact.priority)] = [contact] - contact_keys = sorted(contacts_dict.keys()) - contact_keys.reverse() - - # Fill clients grid - grid = Gtk.Grid() - grid.insert_row(0) - grid.insert_row(0) - grid.insert_column(0) - grid.set_property('column-spacing', 2) - - vcard_current_row = 0 - for priority in contact_keys: - for acontact in contacts_dict[priority]: - - result = self._get_image_and_client_name(acontact, tooltip_grid) - if result is None: - continue - image, client_name = result - - image.set_valign(Gtk.Align.START) - grid.attach(image, 1, vcard_current_row, 1, 1) - label = Gtk.Label(label=client_name) - label.set_valign(Gtk.Align.START) - label.set_halign(Gtk.Align.START) - label.set_xalign(0) - grid.attach(label, 2, vcard_current_row, 1, 1) - vcard_current_row += 1 - grid.show_all() - grid.set_valign(Gtk.Align.START) - - # Set label - label = Gtk.Label() - label.set_halign(Gtk.Align.END) - label.set_valign(Gtk.Align.START) - if num_resources > 1: - label.set_text(_('Clients:')) - else: - label.set_text(_('Client:')) - label.show() - - # Set clients grid to tooltip - tooltip_grid.insert_next_to(tooltip._ui.resource_label, - Gtk.PositionType.BOTTOM) - tooltip_grid.attach_next_to(label, tooltip._ui.resource_label, - Gtk.PositionType.BOTTOM, 1, 1) - tooltip_grid.attach_next_to(grid, label, - Gtk.PositionType.RIGHT, 1, 1)