Daniel Brötzmann pushed to branch master at gajim / gajim


Commits:
6fd1b99d by wurstsalat at 2022-08-14T20:35:02+02:00
new: Control: Store info messages per contact

- - - - -


3 changed files:

- gajim/gtk/control.py
- gajim/gtk/conversation/rows/info.py
- gajim/gtk/conversation/view.py


Changes:

=====================================
gajim/gtk/control.py
=====================================
@@ -19,6 +19,7 @@
 from typing import Union
 from typing import cast
 
+from collections import defaultdict
 import os
 import logging
 import time
@@ -61,6 +62,8 @@
 
 log = logging.getLogger('gajim.gui.control')
 
+INFO_MESSAGES_COUNT = 100
+
 
 class ChatControl(EventHelper):
     def __init__(self) -> None:
@@ -101,6 +104,9 @@ def __init__(self) -> None:
 
         self._subject_text_cache: dict[JID, str] = {}
 
+        self._info_messages: dict[
+            types.ChatContactT, list[tuple[float, str]]] = defaultdict(list)
+
         self.widget = cast(Gtk.Box, self._ui.get_object('control_box'))
         self.widget.show_all()
 
@@ -202,6 +208,9 @@ def switch_contact(self, contact: Union[BareContact,
             for transfer in transfers:
                 self.add_file_transfer(transfer)
 
+        for timestamp, message in self._info_messages[contact]:
+            self.add_info_message(message, timestamp)
+
     def _register_events(self) -> None:
         if self.has_events_registered():
             return
@@ -485,8 +494,19 @@ def get_our_nick(self) -> str:
     def _allow_add_message(self) -> bool:
         return self._scrolled_view.get_lower_complete()
 
-    def add_info_message(self, text: str) -> None:
-        self.conversation_view.add_info_message(text)
+    def add_info_message(self,
+                         text: str,
+                         timestamp: Optional[float] = None
+                         ) -> None:
+
+        if timestamp is None:
+            assert self._contact is not None
+            self._info_messages[self._contact].append((time.time(), text))
+            info_messages = self._info_messages[self._contact]
+            if len(info_messages) > INFO_MESSAGES_COUNT:
+                info_messages.pop(0)
+
+        self.conversation_view.add_info_message(text, timestamp)
 
     def add_file_transfer(self, transfer: HTTPFileTransfer) -> None:
         self.conversation_view.add_file_transfer(transfer)


=====================================
gajim/gtk/conversation/rows/info.py
=====================================
@@ -12,6 +12,10 @@
 # You should have received a copy of the GNU General Public License
 # along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 
+from __future__ import annotations
+
+from typing import Optional
+
 import time
 from datetime import datetime
 
@@ -25,13 +29,18 @@
 
 
 class InfoMessage(BaseRow):
-    def __init__(self, account: str, text: str) -> None:
+    def __init__(self,
+                 account: str,
+                 text: str,
+                 timestamp: Optional[float]
+                 ) -> None:
+
         BaseRow.__init__(self, account)
 
         self.type = 'info'
-        timestamp = time.time()
-        self.timestamp = datetime.fromtimestamp(timestamp)
-        self.db_timestamp = timestamp
+        current_timestamp = timestamp or time.time()
+        self.timestamp = datetime.fromtimestamp(current_timestamp)
+        self.db_timestamp = current_timestamp
 
         text = GLib.markup_escape_text(text)
 


=====================================
gajim/gtk/conversation/view.py
=====================================
@@ -193,8 +193,12 @@ def add_user_status(self, name: str, show: str, status: 
str) -> None:
         user_status = UserStatus(self.contact.account, name, show, status)
         self._insert_message(user_status)
 
-    def add_info_message(self, text: str) -> None:
-        message = InfoMessage(self.contact.account, text)
+    def add_info_message(self,
+                         text: str,
+                         timestamp: Optional[float] = None
+                         ) -> None:
+
+        message = InfoMessage(self.contact.account, text, timestamp)
         self._insert_message(message)
 
     def add_file_transfer(self, transfer: HTTPFileTransfer) -> None:



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/6fd1b99da4ca1731926aa92e6c219b7c30dc81f9

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/6fd1b99da4ca1731926aa92e6c219b7c30dc81f9
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
Commits@gajim.org
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to