From 7003a6d69189a11d0b93a22037eda28efb904486 Mon Sep 17 00:00:00 2001
From: lovetox <philipp@hoerist.com>
Date: Mon, 19 Apr 2021 21:47:00 +0200
Subject: [PATCH] Make Correction Work again

---
 gajim/common/styling.py                  |  3 ++-
 gajim/gtk/conversation/message_widget.py | 18 +++++++++++++++---
 gajim/gtk/conversation/rows/info.py      |  2 +-
 gajim/gtk/conversation/rows/message.py   | 22 ++++++++--------------
 gajim/gtk/conversation/view.py           | 16 +++-------------
 5 files changed, 29 insertions(+), 32 deletions(-)

diff --git a/gajim/common/styling.py b/gajim/common/styling.py
index 7ffc5e7828..1f5ccc95fc 100644
--- a/gajim/common/styling.py
+++ b/gajim/common/styling.py
@@ -127,6 +127,7 @@ class StrikeSpan(StyleObject):
 
 @dataclass
 class ParsingResult:
+    text: str
     blocks: list
 
 
@@ -144,7 +145,7 @@ def process(text, nested=False):
             result = process(block.unquote(), nested=True)
             block.blocks = result.blocks
 
-    return ParsingResult(blocks)
+    return ParsingResult(text, blocks)
 
 
 def _parse_blocks(text, nested):
diff --git a/gajim/gtk/conversation/message_widget.py b/gajim/gtk/conversation/message_widget.py
index cb4fab76c9..ab741d7f58 100644
--- a/gajim/gtk/conversation/message_widget.py
+++ b/gajim/gtk/conversation/message_widget.py
@@ -24,8 +24,15 @@ def __init__(self, account):
         Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL)
         self._account = account
 
-    def add_content(self, blocks):
-        for block in blocks:
+        self._content = None
+
+    def get_content(self):
+        return self._content
+
+    def add_content(self, content):
+        self.clear()
+        self._content = content
+        for block in content.blocks:
             if block.name == 'plain':
                 widget = PlainWidget(self._account)
                 widget.add_content(block)
@@ -40,8 +47,13 @@ def add_content(self, blocks):
 
             if block.name == 'quote':
                 message_widget = MessageWidget(self._account)
-                message_widget.add_content(block.blocks)
+                message_widget.add_content(block)
                 widget = QuoteWidget(self._account)
                 widget.attach_message_widget(message_widget)
                 self.add(widget)
                 continue
+
+        self.show_all()
+
+    def clear(self):
+        self.foreach(self.remove)
diff --git a/gajim/gtk/conversation/rows/info.py b/gajim/gtk/conversation/rows/info.py
index d66221b939..db1fd3f2ad 100644
--- a/gajim/gtk/conversation/rows/info.py
+++ b/gajim/gtk/conversation/rows/info.py
@@ -60,7 +60,7 @@ def __init__(self,
 
         result = process(text)
         message_widget = MessageWidget(account)
-        message_widget.add_content(result.blocks)
+        message_widget.add_content(result)
 
         self.grid.attach(message_widget, 1, 0, 1, 1)
         self.show_all()
diff --git a/gajim/gtk/conversation/rows/message.py b/gajim/gtk/conversation/rows/message.py
index 7979305a19..a278b0bf93 100644
--- a/gajim/gtk/conversation/rows/message.py
+++ b/gajim/gtk/conversation/rows/message.py
@@ -82,8 +82,8 @@ def __init__(self,
                     'conversation-mention-highlight')
 
         result = process(text)
-        message_widget = MessageWidget(account)
-        message_widget.add_content(result.blocks)
+        self._message_widget = MessageWidget(account)
+        self._message_widget.add_content(result)
 
         self._meta_box = Gtk.Box(spacing=6)
         self._meta_box.pack_start(
@@ -129,7 +129,7 @@ def __init__(self,
         avatar_placeholder.add(self._avatar_surface)
 
         bottom_box = Gtk.Box(spacing=6)
-        bottom_box.add(message_widget)
+        bottom_box.add(self._message_widget)
         bottom_box.add(MoreMenuButton(self, history_mode=history_mode))
 
         self.grid.attach(avatar_placeholder, 0, 0, 1, 2)
@@ -214,21 +214,15 @@ def set_receipt(self):
     def set_displayed(self):
         self._has_displayed = True
 
-    def set_correction(self, message_id, text, other_text_tags, kind, name,
-                       additional_data=None):
-        self._corrections.append(self.textview.get_text())
-        self.textview.clear()
+    def set_correction(self, text, message_id):
+        self._corrections.append(self._message_widget.get_content().text)
+        result = process(text)
+        self._message_widget.add_content(result)
+
         self._has_receipt = False
         self._message_icons.set_receipt_icon_visible(False)
         self._message_icons.set_correction_icon_visible(True)
 
-        self.textview.print_text(
-            text,
-            other_text_tags=other_text_tags,
-            kind=kind,
-            name=name,
-            additional_data=additional_data)
-
         corrections = '\n'.join(line for line in self._corrections)
         corrections = reduce_chars_newlines(
             corrections, max_chars=150, max_lines=10)
diff --git a/gajim/gtk/conversation/view.py b/gajim/gtk/conversation/view.py
index 0898aeca4f..04fa705ecb 100644
--- a/gajim/gtk/conversation/view.py
+++ b/gajim/gtk/conversation/view.py
@@ -150,14 +150,7 @@ def add_message(self,
                 history_mode=self._history_mode)
         else:
             if correct_id:
-                self.correct_message(
-                    correct_id,
-                    message_id,
-                    text,
-                    other_text_tags,
-                    kind,
-                    name,
-                    additional_data=additional_data)
+                self.correct_message(correct_id, message_id, text)
                 return
 
             avatar = self._get_avatar(kind, name)
@@ -371,13 +364,10 @@ def scroll_to_end(self, force=False):
         if self.autoscroll or force:
             GLib.idle_add(scroll_to_end, self.get_parent().get_parent())
 
-    def correct_message(self, correct_id, message_id, text,
-                        other_text_tags, kind, name, additional_data=None):
+    def correct_message(self, correct_id, message_id, text):
         message_row = self._get_row_by_message_id(correct_id)
         if message_row is not None:
-            message_row.set_correction(
-                message_id, text, other_text_tags, kind, name,
-                additional_data=additional_data)
+            message_row.set_correction(text, message_id)
             message_row.set_merged(False)
 
     def show_receipt(self, id_):
-- 
GitLab