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/conversation/view.py')
-rw-r--r--gajim/gtk/conversation/view.py85
1 files changed, 26 insertions, 59 deletions
diff --git a/gajim/gtk/conversation/view.py b/gajim/gtk/conversation/view.py
index fdbe85e4b..89808fa67 100644
--- a/gajim/gtk/conversation/view.py
+++ b/gajim/gtk/conversation/view.py
@@ -19,7 +19,6 @@ from typing import cast
from typing import Literal
import logging
-import time
from collections.abc import Generator
from datetime import datetime
from datetime import timedelta
@@ -29,22 +28,20 @@ from gi.repository import Gio
from gi.repository import GObject
from gi.repository import Gtk
from nbxmpp.errors import StanzaError
-from nbxmpp.modules.security_labels import Displaymarking
from nbxmpp.protocol import JID
-from nbxmpp.structs import CommonError
from nbxmpp.structs import MucSubject
from gajim.common import app
from gajim.common import events
from gajim.common import types
from gajim.common.const import Direction
-from gajim.common.helpers import AdditionalDataDict
from gajim.common.helpers import get_start_of_day
from gajim.common.helpers import to_user_string
from gajim.common.modules.contacts import BareContact
from gajim.common.modules.contacts import GroupchatContact
from gajim.common.modules.httpupload import HTTPFileTransfer
-from gajim.common.storage.archive import ConversationRow
+from gajim.common.storage.archive.const import ChatDirection
+from gajim.common.storage.archive.structs import DbConversationJoinedData
from gajim.common.types import ChatContactT
from gajim.gtk.conversation.rows.base import BaseRow
@@ -384,16 +381,17 @@ class ConversationView(Gtk.ScrolledWindow):
assert row is not None
return cast(BaseRow, row)
- def get_first_message_row(self) -> MessageRow | None:
+ def get_first_message_row(self
+ ) -> MessageRow | CallRow | FileTransferJingleRow | None:
for row in self._list_box.get_children():
- if isinstance(row, MessageRow):
+ if isinstance(row, MessageRow | CallRow | FileTransferJingleRow):
return row
return None
- def get_last_message_row(self) -> MessageRow | None:
+ def get_last_message_row(self) -> MessageRow | CallRow | FileTransferJingleRow | None:
children = reversed(self._list_box.get_children())
for row in children:
- if isinstance(row, MessageRow):
+ if isinstance(row, MessageRow | CallRow | FileTransferJingleRow):
return row
return None
@@ -472,7 +470,7 @@ class ConversationView(Gtk.ScrolledWindow):
event: (events.FileRequestReceivedEvent |
events.FileRequestSent |
None) = None,
- db_message: ConversationRow | None = None
+ db_row: DbConversationJoinedData | None = None
) -> None:
assert isinstance(self._contact, BareContact)
@@ -480,7 +478,7 @@ class ConversationView(Gtk.ScrolledWindow):
self._contact.account,
self._contact,
event=event,
- db_message=db_message)
+ db_row=db_row)
self._insert_message(jingle_transfer_row)
def add_encryption_info(self, event: events.EncryptionInfo) -> None:
@@ -489,14 +487,14 @@ class ConversationView(Gtk.ScrolledWindow):
def add_call_message(self,
event: events.JingleRequestReceived | None = None,
- db_message: ConversationRow | None = None
+ db_row: DbConversationJoinedData | None = None
) -> None:
assert isinstance(self._contact, BareContact)
call_row = CallRow(
self._contact.account,
self._contact,
event=event,
- db_message=db_message)
+ db_row=db_row)
self._insert_message(call_row)
def add_command_output(self, text: str, is_error: bool) -> None:
@@ -504,46 +502,21 @@ class ConversationView(Gtk.ScrolledWindow):
self.contact.account, text, is_error)
self._insert_message(command_output_row)
- def add_message(self,
- text: str,
- kind: str,
- name: str,
- timestamp: float,
- log_line_id: int | None = None,
- message_id: str | None = None,
- stanza_id: str | None = None,
- display_marking: Displaymarking | None = None,
- additional_data: AdditionalDataDict | None = None,
- marker: str | None = None,
- error: CommonError | StanzaError | None = None
- ) -> None:
-
- if not timestamp:
- timestamp = time.time()
-
- message_row = MessageRow(
- self.contact.account,
- self.contact,
- message_id,
- stanza_id,
- timestamp,
- kind,
- name,
- text,
- additional_data=additional_data,
- display_marking=display_marking,
- marker=marker,
- error=error,
- log_line_id=log_line_id)
+ def add_message_from_db(self, db_row: DbConversationJoinedData) -> None:
+ message_row = MessageRow.from_db_row(self.contact, db_row)
+
+ message_id = db_row.message_id
if message_id is not None:
self._message_id_row_map[message_id] = message_row
- if kind == 'incoming':
+ if db_row.direction == ChatDirection.INCOMING:
assert self._read_marker_row is not None
self._read_marker_row.set_last_incoming_timestamp(
message_row.timestamp)
- if (marker is not None and marker == 'displayed' and
+
+ if (db_row.marker is not None and
+ db_row.marker.displayed_ts is not None and
message_id is not None):
self.set_read_marker(message_id)
@@ -555,7 +528,7 @@ class ConversationView(Gtk.ScrolledWindow):
self._check_for_merge(message)
assert self._read_marker_row is not None
- if message.kind == 'incoming':
+ if message.direction == ChatDirection.INCOMING:
if message.timestamp > self._read_marker_row.timestamp:
self._read_marker_row.hide()
@@ -789,7 +762,6 @@ class ConversationView(Gtk.ScrolledWindow):
if row is None:
return
- row.set_displayed()
assert self._read_marker_row is not None
timestamp = row.timestamp + timedelta(microseconds=1)
if self._read_marker_row.timestamp > timestamp:
@@ -802,16 +774,11 @@ class ConversationView(Gtk.ScrolledWindow):
if isinstance(row, MessageRow):
row.update_avatar()
- def correct_message(self,
- correct_id: str,
- text: str,
- nickname: str | None
- ) -> None:
-
- message_row = self._get_row_by_message_id(correct_id)
+ def correct_message(self, db_row: DbConversationJoinedData) -> None:
+ assert db_row.message_id is not None
+ message_row = self._get_row_by_message_id(db_row.message_id)
if message_row is not None:
- message_row.set_correction(text, nickname)
- message_row.set_merged(False)
+ message_row.update_with_content(db_row)
def show_message_retraction(self, stanza_id: str, text: str) -> None:
message_row = self.get_row_by_stanza_id(stanza_id)
@@ -821,12 +788,12 @@ class ConversationView(Gtk.ScrolledWindow):
def show_receipt(self, id_: str) -> None:
message_row = self._get_row_by_message_id(id_)
if message_row is not None:
- message_row.set_receipt()
+ message_row.show_receipt(True)
def show_error(self, id_: str, error: StanzaError) -> None:
message_row = self._get_row_by_message_id(id_)
if message_row is not None:
- message_row.set_error(to_user_string(error))
+ message_row.show_error(to_user_string(error))
message_row.set_merged(False)
def _on_contact_setting_changed(self,