buffer: Fix redactions for multiline messages.

This commit is contained in:
Damir Jelić 2019-01-28 16:56:32 +01:00
parent 2159deb823
commit 67f3b1883a

View file

@ -1083,6 +1083,19 @@ class RoomBuffer(object):
return False return False
def redact_string(message):
new_message = ""
if G.CONFIG.look.redactions == RedactType.STRIKETHROUGH:
plaintext_msg = W.string_remove_color(message, "")
new_message = string_strikethrough(plaintext_msg)
elif G.CONFIG.look.redactions == RedactType.NOTICE:
new_message = message
elif G.CONFIG.look.redactions == RedactType.DELETE:
pass
return new_message
lines = self.weechat_buffer.find_lines( lines = self.weechat_buffer.find_lines(
partial(predicate, event.redacts) partial(predicate, event.redacts)
) )
@ -1091,13 +1104,7 @@ class RoomBuffer(object):
if not lines: if not lines:
return return
# TODO multiple lines can contain a single matrix ID, we need to redact
# them all
line = lines[0]
censor = self.find_nick(event.sender) censor = self.find_nick(event.sender)
message = line.message
tags = line.tags
reason = ( reason = (
"" ""
@ -1117,23 +1124,33 @@ class RoomBuffer(object):
reason=reason, reason=reason,
) )
new_message = "" line = lines[0]
message = line.message
if G.CONFIG.look.redactions == RedactType.STRIKETHROUGH: tags = line.tags
plaintext_msg = W.string_remove_color(message, "")
new_message = string_strikethrough(plaintext_msg)
elif G.CONFIG.look.redactions == RedactType.NOTICE:
new_message = message
elif G.CONFIG.look.redactions == RedactType.DELETE:
pass
new_message = redact_string(message)
message = " ".join(s for s in [new_message, redaction_msg] if s) message = " ".join(s for s in [new_message, redaction_msg] if s)
tags.append("matrix_redacted") tags.append("matrix_redacted")
line.message = message line.message = message
line.tags = tags line.tags = tags
for line in lines[1:]:
message = line.message
tags = line.tags
new_message = redact_string(message)
if not new_message:
new_message = redaction_msg
elif G.CONFIG.look.redactions == RedactType.NOTICE:
new_message += " {}".format(redaction_msg)
tags.append("matrix_redacted")
line.message = new_message
line.tags = tags
def _handle_redacted_message(self, event): def _handle_redacted_message(self, event):
nick = self.find_nick(event.sender) nick = self.find_nick(event.sender)
date = server_ts_to_weechat(event.server_timestamp) date = server_ts_to_weechat(event.server_timestamp)