Commit 88e5b2d1 authored by Maxime Buquet's avatar Maxime Buquet

Read newer LMC rules

Version 1.1.0 of Last Message Correction (0308) added clarifications
that break the way poezio handles corrections. Instead of linking
corrections to the previous correction/message as we were doing, we
are now required to link all corrections to the original messages.
Signed-off-by: Maxime Buquet's avatarMaxime “pep” Buquet <pep@bouah.net>
parent f56ce0b8
......@@ -609,7 +609,7 @@ class ChatTab(Tab):
message = self._text_buffer.modify_message(
txt, old_id, new_id, time=time, user=user, jid=jid)
if message:
self.text_win.modify_message(old_id, message)
self.text_win.modify_message(message.identifier, message)
self.core.refresh_window()
return True
return False
......
......@@ -1129,7 +1129,7 @@ class MucTab(ChatTab):
user=user,
jid=jid)
if message:
self.text_win.modify_message(old_id, message)
self.text_win.modify_message(message.identifier, message)
return highlight
return False
......
......@@ -11,7 +11,7 @@ independently by their TextWins.
import logging
log = logging.getLogger(__name__)
from typing import Union, Optional, List, Tuple
from typing import Dict, Union, Optional, List, Tuple
from datetime import datetime
from poezio.config import config
from poezio.theming import get_theme, dump_tuple
......@@ -121,6 +121,8 @@ class TextBuffer:
self._messages_nb_limit = messages_nb_limit # type: int
# Message objects
self.messages = [] # type: List[Message]
# Correction id -> Original message id
self.correction_ids = {} # type: Dict[str, str]
# we keep track of one or more windows
# so we can pass the new messages to them, as they are added, so
# they (the windows) can build the lines from the new message
......@@ -186,15 +188,20 @@ class TextBuffer:
return min(ret_val, 1)
def _find_message(self, old_id: str) -> int:
def _find_message(self, old_id: str) -> Tuple[str, int]:
"""
Find a message in the text buffer from its message id
"""
# When looking for a message, ensure the id doesn't appear in a
# message we've removed from our message list. If so return the index
# of the corresponding id for the original message instead.
old_id = self.correction_ids.get(old_id, old_id)
for i in range(len(self.messages) - 1, -1, -1):
msg = self.messages[i]
if msg.identifier == old_id:
return i
return -1
return (old_id, i)
return (old_id, -1)
def ack_message(self, old_id: str, jid: str) -> Union[None, bool, Message]:
"""Mark a message as acked"""
......@@ -211,7 +218,7 @@ class TextBuffer:
Edit the ack status of a message, and optionally
append some text.
"""
i = self._find_message(old_id)
_, i = self._find_message(old_id)
if i == -1:
return None
msg = self.messages[i]
......@@ -236,9 +243,14 @@ class TextBuffer:
jid: Optional[str] = None):
"""
Correct a message in a text buffer.
Version 1.1.0 of Last Message Correction (0308) added clarifications
that break the way poezio handles corrections. Instead of linking
corrections to the previous correction/message as we were doing, we
are now required to link all corrections to the original messages.
"""
i = self._find_message(old_id)
old_id, i = self._find_message(old_id)
if i == -1:
log.debug(
......@@ -262,6 +274,8 @@ class TextBuffer:
if not time:
time = msg.time
self.correction_ids[new_id] = old_id
message = Message(
txt,
time,
......@@ -269,7 +283,7 @@ class TextBuffer:
msg.nick_color,
False,
msg.user,
new_id,
old_id,
highlight=highlight,
old_message=msg,
revisions=msg.revisions + 1,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment