Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'gajim/gtk/control.py')
-rw-r--r--gajim/gtk/control.py53
1 files changed, 46 insertions, 7 deletions
diff --git a/gajim/gtk/control.py b/gajim/gtk/control.py
index 91cd4ca86..8efba1e47 100644
--- a/gajim/gtk/control.py
+++ b/gajim/gtk/control.py
@@ -27,6 +27,7 @@ from nbxmpp import JID
from nbxmpp.const import StatusCode
from nbxmpp.modules.security_labels import Displaymarking
from nbxmpp.structs import MucSubject
+from nbxmpp.structs import ReplyData
from gajim.common import app
from gajim.common import events
@@ -44,6 +45,7 @@ from gajim.common.modules.contacts import GroupchatContact
from gajim.common.modules.contacts import GroupchatParticipant
from gajim.common.modules.httpupload import HTTPFileTransfer
from gajim.common.storage.archive import ConversationRow
+from gajim.common.util.text import remove_fallback_text
from gajim.gtk.builder import get_builder
from gajim.gtk.conversation.jump_to_end_button import JumpToEndButton
@@ -95,6 +97,8 @@ class ChatControl(EventHelper):
app.window.get_action('activate-message-selection').connect(
'activate', self._on_activate_message_selection)
+ app.window.get_action('jump-to-message').connect(
+ 'activate', self._on_jump_to_message)
self.widget = cast(Gtk.Box, self._ui.get_object('control_box'))
self.widget.show_all()
@@ -347,7 +351,8 @@ class ChatControl(EventHelper):
msg_log_id=event.msg_log_id,
message_id=message_id,
stanza_id=None,
- additional_data=event.additional_data)
+ additional_data=event.additional_data,
+ reply_data=event.reply_data)
def _on_message_received(self, event: events.MessageReceived) -> None:
if not self._is_event_processable(event):
@@ -373,7 +378,8 @@ class ChatControl(EventHelper):
msg_log_id=event.msg_log_id,
message_id=event.properties.id,
stanza_id=event.stanza_id,
- additional_data=event.additional_data)
+ additional_data=event.additional_data,
+ reply_data=event.properties.reply_data)
def _on_mam_message_received(self,
event: events.MamMessageReceived) -> None:
@@ -417,7 +423,8 @@ class ChatControl(EventHelper):
msg_log_id=event.msg_log_id,
message_id=event.properties.id,
stanza_id=event.stanza_id,
- additional_data=event.additional_data)
+ additional_data=event.additional_data,
+ reply_data=event.properties.reply_data)
def _on_gc_message_received(self, event: events.GcMessageReceived) -> None:
if not self._is_event_processable(event):
@@ -439,7 +446,8 @@ class ChatControl(EventHelper):
msg_log_id=event.msg_log_id,
message_id=event.properties.id,
stanza_id=event.stanza_id,
- additional_data=event.additional_data)
+ additional_data=event.additional_data,
+ reply_data=event.properties.reply_data)
def _on_message_updated(self, event: events.MessageUpdated) -> None:
if not self._is_event_processable(event):
@@ -551,6 +559,14 @@ class ChatControl(EventHelper):
def _on_cancel_selection(self, _widget: MessageSelection) -> None:
self._scrolled_view.disable_row_selection()
+ def _on_jump_to_message(self,
+ _action: Gio.SimpleAction,
+ param: GLib.Variant
+ ) -> None:
+
+ log_line_id, timestamp = param.unpack()
+ self.scroll_to_message(log_line_id, timestamp)
+
def _on_jump_to_end(self, _button: Gtk.Button) -> None:
self.reset_view()
@@ -590,12 +606,23 @@ class ChatControl(EventHelper):
msg_log_id: int | None,
message_id: str | None,
stanza_id: str | None,
- additional_data: AdditionalDataDict | None
+ additional_data: AdditionalDataDict | None,
+ reply_data: ReplyData | None
) -> None:
if additional_data is None:
additional_data = AdditionalDataDict()
+ referred_message = None
+ if reply_data is not None:
+ referred_message = app.storage.archive.get_referred_message(
+ self._contact, reply_data.id)
+ if referred_message is not None:
+ text = remove_fallback_text(
+ text,
+ reply_data.fallback_start,
+ reply_data.fallback_end)
+
if self._allow_add_message():
self._scrolled_view.add_message(
text,
@@ -606,7 +633,8 @@ class ChatControl(EventHelper):
message_id=message_id,
stanza_id=stanza_id,
log_line_id=msg_log_id,
- additional_data=additional_data)
+ additional_data=additional_data,
+ referred_message=referred_message)
if not self._scrolled_view.get_autoscroll():
if kind == 'outgoing':
@@ -666,6 +694,16 @@ class ChatControl(EventHelper):
message_text = get_retraction_text(
self.contact.account, retracted_by, reason)
+ referred_message = None
+ if msg.reply_data is not None:
+ referred_message = app.storage.archive.get_referred_message(
+ self._contact, msg.reply_data.id)
+ if referred_message is not None:
+ message_text = remove_fallback_text(
+ message_text,
+ msg.reply_data.fallback_start,
+ msg.reply_data.fallback_end)
+
self._scrolled_view.add_message(
message_text,
kind,
@@ -676,7 +714,8 @@ class ChatControl(EventHelper):
stanza_id=msg.stanza_id,
log_line_id=msg.log_line_id,
marker=msg.marker,
- error=msg.error)
+ error=msg.error,
+ referred_message=referred_message)
def _request_messages(self, before: bool) -> list[ConversationRow]:
if before: