Philipp Hörist pushed to branch mainwindow at gajim / gajim
Commits: 5242da70 by lovetox at 2021-02-06T23:01:07+01:00 Handle presence
- - - - -
5 changed files:
- gajim/chat_control.py - gajim/common/modules/presence.py - gajim/gtk/chat_list.py - gajim/gtk/chat_list_stack.py - gajim/gtk/main.py
Changes:
===================================== gajim/chat_control.py ===================================== @@ -1405,17 +1405,19 @@ def got_disconnected(self): ChatControlBase.got_disconnected(self) self.update_actions()
- def update_status_display(self, name, uf_show, status): + def _on_presence_received(self, event): + uf_show = helpers.get_uf_show(event.show) + name = self.contact.get_shown_name() + self.update_ui() self.parent_win.redraw_tab(self)
if not app.settings.get('print_status_in_chats'): return
- if status: - status = '- %s' % status + status = '- %s' % event.status if event.status else '' status_line = _('%(name)s is now %(show)s %(status)s') % { - 'name': name, 'show': uf_show, 'status': status or ''} + 'name': name, 'show': uf_show, 'status': status} self.add_status_message(status_line)
def _info_bar_show_message(self):
===================================== gajim/common/modules/presence.py ===================================== @@ -108,6 +108,7 @@ def _presence_received(self, _con, stanza, properties): show = 'offline'
event_attrs = { + 'account': self._account, 'conn': self._con, 'stanza': stanza, 'prio': properties.priority, @@ -132,7 +133,6 @@ def _presence_received(self, _con, stanza, properties):
event_ = NetworkEvent('presence-received', **event_attrs)
- # TODO: Refactor self._update_contact(event_, properties)
app.nec.push_incoming_event(event_)
===================================== gajim/gtk/chat_list.py ===================================== @@ -141,6 +141,8 @@ def process_event(self, event): 'mam-message-received', 'gc-message-received'): self._on_message_received(event) + elif event.name == 'presence-received': + self._on_presence_received(event) else: log.warning('Unhandled Event: %s', event.name)
@@ -153,6 +155,10 @@ def _on_message_received(self, event):
self._add_unread(row, event.properties)
+ def _on_presence_received(self, event): + row = self._chats.get((event.account, event.jid)) + row.update_avatar() + @staticmethod def _add_unread(row, properties): if properties.is_carbon_message and properties.carbon.is_sent: @@ -189,33 +195,8 @@ def __init__(self, workspace_id, account, jid, type_): if len(app.get_enabled_accounts_with_labels()) > 1: self._ui.account_identifier.show()
- contact = app.contacts.get_contact(account, jid) - - scale = self.get_scale_factor() - if contact: - if contact.is_groupchat: - avatar = app.contacts.get_avatar(account, - jid, - AvatarSize.ROSTER, - scale) - con = app.connections[account] - name = get_groupchat_name(con, jid) - else: - avatar = app.contacts.get_avatar(account, - contact.jid, - AvatarSize.ROSTER, - scale, - contact.show) - name = contact.get_shown_name() - else: - avatar = app.contacts.get_avatar(account, - jid, - AvatarSize.ROSTER, - scale) - name = jid - - self._ui.avatar_image.set_from_surface(avatar) - self._ui.name_label.set_text(name) + self.update_avatar() + self.update_name()
# Get last chat message from archive line = app.storage.archive.get_last_conversation_line(account, jid) @@ -244,6 +225,44 @@ def __init__(self, workspace_id, account, jid, type_):
self.show_all()
+ def update_avatar(self): + contact = app.contacts.get_contact(self.account, self.jid) + + scale = self.get_scale_factor() + if contact: + if contact.is_groupchat: + avatar = app.contacts.get_avatar(self.account, + self.jid, + AvatarSize.ROSTER, + scale) + else: + avatar = app.contacts.get_avatar(self.account, + contact.jid, + AvatarSize.ROSTER, + scale, + contact.show) + else: + avatar = app.contacts.get_avatar(self.account, + self.jid, + AvatarSize.ROSTER, + scale) + + self._ui.avatar_image.set_from_surface(avatar) + + def update_name(self): + contact = app.contacts.get_contact(self.account, self.jid) + if contact is None: + self._ui.name_label.set_text(self.jid) + return + + if contact.is_groupchat: + client = app.get_client(self.account) + name = get_groupchat_name(client, self.jid) + else: + name = contact.get_shown_name() + + self._ui.name_label.set_text(name) + @property def unread_count(self): return self._unread_count
===================================== gajim/gtk/chat_list_stack.py ===================================== @@ -11,6 +11,7 @@ 'message-received', 'mam-message-received', 'gc-message-received', + 'presence-received', ]
@@ -162,4 +163,6 @@ def process_event(self, event): return
chat_list = self._find_chat(event.account, event.jid) + if chat_list is None: + return chat_list.process_event(event)
===================================== gajim/gtk/main.py ===================================== @@ -67,6 +67,7 @@ def __init__(self):
# pylint: disable=line-too-long self.register_events([ + ('presence-received', ged.GUI1, self._on_event), ('nickname-received', ged.GUI1, self._on_event), ('mood-received', ged.GUI1, self._on_event), ('activity-received', ged.GUI1, self._on_event),
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/5242da70ad92c403216663e0dbb908f60...