Philipp Hörist pushed to branch mainwindow at gajim / gajim
Commits: e40936f5 by lovetox at 2021-04-29T22:35:33+02:00 Add MucUserStatus row
- - - - -
3 changed files:
- gajim/gtk/controls/groupchat.py - + gajim/gtk/conversation/rows/muc_user_status.py - gajim/gtk/conversation/view.py
Changes:
===================================== gajim/gtk/controls/groupchat.py ===================================== @@ -51,7 +51,6 @@ from gajim.common.const import AvatarSize
from gajim.common.i18n import _ -from gajim.common.const import MUCJoinedState from gajim.common.structs import OutgoingMessage
from gajim.gui.controls.base import BaseControl @@ -88,9 +87,9 @@ class GroupchatControl(BaseControl):
def __init__(self, account, jid): BaseControl.__init__(self, - 'groupchat_control', - account, - jid) + 'groupchat_control', + account, + jid)
self._client.connect_signal('state-changed', self._on_client_state_changed) @@ -972,23 +971,9 @@ def _on_user_status_show_changed(self, user_contact, properties):
- if not self.contact.settings.get('print_status'): - return - - nick = user_contact.name - status = user_contact.status - status = '' if status is None else ' - %s' % status - show = helpers.get_uf_show(user_contact.show.value) - - if properties.is_muc_self_presence: - message = _('You are now {show}{status}').format(show=show, - status=status) - - else: - message = _('{nick} is now {show}{status}').format(nick=nick, - show=show, - status=status) - self.add_info_message(message) + self.conversation_view.add_muc_user_status( + user_contact, + properties.is_muc_self_presence)
def _on_user_affiliation_changed(self, _contact,
===================================== gajim/gtk/conversation/rows/muc_user_status.py ===================================== @@ -0,0 +1,73 @@ +# This file is part of Gajim. +# +# Gajim is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published +# by the Free Software Foundation; version 3 only. +# +# Gajim is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Gajim. If not, see http://www.gnu.org/licenses/. + +import time +from datetime import datetime + +from gi.repository import Gtk + +from gajim.common.i18n import _ +from gajim.common.const import AvatarSize +from gajim.common import helpers + +from .widgets import SimpleLabel +from .base import BaseRow + + +class MUCUserStatus(BaseRow): + def __init__(self, account, user_contact, is_self): + BaseRow.__init__(self, account) + + self.type = 'muc-user-status' + timestamp = time.time() + self.timestamp = datetime.fromtimestamp(timestamp) + self.db_timestamp = timestamp + + avatar_placeholder = Gtk.Box() + avatar_placeholder.set_size_request(AvatarSize.ROSTER, -1) + self.grid.attach(avatar_placeholder, 0, 0, 1, 1) + + icon_name = 'feather-info-symbolic' + icon = Gtk.Image.new_from_icon_name(icon_name, Gtk.IconSize.MENU) + self.grid.attach(icon, 1, 0, 1, 1) + + self._label = SimpleLabel() + self._label.set_text(self._make_text(user_contact, is_self)) + self._label.get_style_context().add_class('gajim-status-message') + self.grid.attach(self._label, 2, 0, 1, 1) + + timestamp_widget = self.create_timestamp_widget(self.timestamp) + timestamp_widget.set_hexpand(True) + timestamp_widget.set_halign(Gtk.Align.END) + timestamp_widget.set_valign(Gtk.Align.START) + self.grid.attach(timestamp_widget, 3, 0, 1, 1) + + self.show_all() + + @staticmethod + def _make_text(user_contact, is_self): + nick = user_contact.name + status = user_contact.status + status = '' if status is None else ' - %s' % status + show = helpers.get_uf_show(user_contact.show.value) + + if is_self: + message = _('You are now {show}{status}').format(show=show, + status=status) + + else: + message = _('{nick} is now {show}{status}').format(nick=nick, + show=show, + status=status) + return message
===================================== gajim/gtk/conversation/view.py ===================================== @@ -34,6 +34,7 @@ from .conversation.rows.date import DateRow from .conversation.rows.muc_subject import MUCSubject from .conversation.rows.muc_join_left import MUCJoinLeft +from .conversation.rows.muc_user_status import MUCUserStatus
log = logging.getLogger('gajim.gui.conversation_view') @@ -80,6 +81,11 @@ def __init__(self, account, contact, history_mode=False): account=self._account, jid=self._contact.jid)
+ app.settings.connect_signal('print_status', + self._on_contact_setting_changed, + account=self._account, + jid=self._contact.jid) + if self._contact is not None: self._read_marker_row = ReadMarkerRow(self._account, self._contact) self.add(self._read_marker_row) @@ -116,6 +122,9 @@ def _sort_func(self, row1, row2): def _filter_func(self, row): if row.type in ('muc-user-joined', 'muc-user-left'): return self._contact.settings.get('print_join_left') + if row.type == 'muc-user-status': + return self._contact.settings.get('print_status') + return True
def add_muc_subject(self, text, nick, date): @@ -136,6 +145,10 @@ def add_muc_user_joined(self, nick): nick) self._insert_message(join_left)
+ def add_muc_user_status(self, user_contact, is_self): + user_status = MUCUserStatus(self._account, user_contact, is_self) + self._insert_message(user_status) + def add_info_message(self, text): message = InfoMessage(self._account, text) self._insert_message(message)
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/e40936f5b1051510a4bb308b189ba93e8...