From ac84845d67793c6023c258fa9c9c9c2337b62282 Mon Sep 17 00:00:00 2001 From: Vankka Date: Fri, 27 Oct 2023 20:04:40 +0300 Subject: [PATCH] Add splitting by newline to console message as well --- .../common/console/SingleConsoleHandler.java | 49 +++++++++++++------ 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/common/src/main/java/com/discordsrv/common/console/SingleConsoleHandler.java b/common/src/main/java/com/discordsrv/common/console/SingleConsoleHandler.java index dccb3413..f14747d1 100644 --- a/common/src/main/java/com/discordsrv/common/console/SingleConsoleHandler.java +++ b/common/src/main/java/com/discordsrv/common/console/SingleConsoleHandler.java @@ -304,6 +304,14 @@ public class SingleConsoleHandler { mostRecentMessageId = receivedMessage.getId(); } }); + }).exceptionally(ex -> { + String error = "Failed to send message to console channel"; + if (message.contains(error)) { + // Prevent infinite loop of the same error + return null; + } + logger.error(error, ex); + return null; }); } } @@ -357,26 +365,15 @@ public class SingleConsoleHandler { List formatted = new ArrayList<>(); // Handle message being longer than a message - message = cutToSizeIfNeeded(message, blockLength, maximumPart, formatted); + if (message.length() > MESSAGE_MAX_LENGTH) { + message = chopOnNewlines(message, blockLength, maximumPart, formatted); + } // Handle log entry being longer than a message int totalLength = blockLength + throwable.length() + message.length(); if (totalLength > MESSAGE_MAX_LENGTH) { - StringBuilder builder = new StringBuilder(message); - for (String line : throwable.split("\n")) { - line += "\n"; - - // Handle a single line of a throwable being longer than a message - line = cutToSizeIfNeeded(line, blockLength, maximumPart, formatted); - - if (blockLength + line.length() > MESSAGE_MAX_LENGTH) { - // Need to split here - formatted.add(builder.toString()); - builder.setLength(0); - } - builder.append(line); - } - formatted.add(builder.toString()); + String remainingPart = chopOnNewlines(message, blockLength, maximumPart, formatted); + formatted.add(remainingPart); } else { formatted.add(message + throwable); } @@ -384,6 +381,26 @@ public class SingleConsoleHandler { return formatted; } + private String chopOnNewlines(String input, int blockLength, int maximumPart, List formatted) { + if (!input.contains("\n")) { + return cutToSizeIfNeeded(input, blockLength, maximumPart, formatted); + } + + StringBuilder builder = new StringBuilder(); + for (String line : input.split("\n")) { + line += "\n"; + + line = cutToSizeIfNeeded(line, blockLength, maximumPart, formatted); + + if (blockLength + line.length() + builder.length() > MESSAGE_MAX_LENGTH) { + formatted.add(builder.toString()); + builder.setLength(0); + } + builder.append(line); + } + return builder.toString(); + } + private String cutToSizeIfNeeded( String content, int blockLength,