From 81ca4f4d3fd1bb7e2810574305e6d836b212b4f8 Mon Sep 17 00:00:00 2001 From: Vladimir Sitnikov Date: Wed, 3 Dec 2025 14:27:35 +0300 Subject: [PATCH] fix: trim the log panel so it contains recent log lines only Previusly, the log panel was not trimming the logs, so the app became unresponsive in case of scanning big repositories. Fixes https://github.com/exadmin/CyberFerret/issues/8 --- .../cyberferret/async/RunnableLogger.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/github/exadmin/cyberferret/async/RunnableLogger.java b/src/main/java/com/github/exadmin/cyberferret/async/RunnableLogger.java index 6e14e35..0af3133 100644 --- a/src/main/java/com/github/exadmin/cyberferret/async/RunnableLogger.java +++ b/src/main/java/com/github/exadmin/cyberferret/async/RunnableLogger.java @@ -61,15 +61,15 @@ public void run() { Platform.runLater(() -> { textArea.appendText(text); - if (textArea.getText().length() > MAX_LOG_SIZE_IN_TEXT_AREA_CHARS) { + if (textArea.getLength() > MAX_LOG_SIZE_IN_TEXT_AREA_CHARS * 2) { String currentText = textArea.getText(); - currentText = currentText.substring(CUT_PORTION); - int newLineIndex = currentText.indexOf("\n"); - currentText = currentText.substring(newLineIndex + 1); - currentText = "...\n" + currentText; - textArea.setText(currentText); - textArea.selectPositionCaret(currentText.length()); - textArea.deselect(); + int newlinePos = currentText.lastIndexOf('\n', currentText.length() - MAX_LOG_SIZE_IN_TEXT_AREA_CHARS); + if (newlinePos > 0) { + currentText = currentText.substring(newlinePos + 1); + textArea.setText(currentText); + textArea.selectPositionCaret(currentText.length()); + textArea.deselect(); + } } });