From d9a20ad5749022b10fecf67e6d8b3e94ff0a4f22 Mon Sep 17 00:00:00 2001 From: Alex Spataru Date: Sat, 1 Jan 2022 20:56:10 -0500 Subject: [PATCH] Limit scrollback to 10'000 lines --- src/IO/Console.cpp | 1 + src/JSON/Generator.cpp | 25 ++++++++++++------------- src/JSON/Generator.h | 2 ++ src/UI/Widgets/Terminal.cpp | 10 +++++----- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/IO/Console.cpp b/src/IO/Console.cpp index 941550bc..261232bd 100644 --- a/src/IO/Console.cpp +++ b/src/IO/Console.cpp @@ -292,6 +292,7 @@ void IO::Console::save() void IO::Console::clear() { m_textBuffer.clear(); + m_textBuffer.reserve(10 * 1000); m_isStartingLine = true; Q_EMIT dataReceived(); } diff --git a/src/JSON/Generator.cpp b/src/JSON/Generator.cpp index d07ad080..6c464bb9 100644 --- a/src/JSON/Generator.cpp +++ b/src/JSON/Generator.cpp @@ -321,13 +321,9 @@ void JSON::Generator::readData(const QByteArray &data) void JSON::Generator::processFrame(const QByteArray &data, const quint64 frame, const QDateTime &time) { - // Init variables - QJsonParseError error; - QJsonDocument document; - // Serial device sends JSON (auto mode) if (operationMode() == JSON::Generator::kAutomatic) - document = QJsonDocument::fromJson(data, &error); + m_jfi.jsonDocument = QJsonDocument::fromJson(data, &m_error); // We need to use a map file, check if its loaded & replace values into map else @@ -343,12 +339,8 @@ void JSON::Generator::processFrame(const QByteArray &data, const quint64 frame, for (int i = 0; i < list.count(); ++i) json.replace(QString("\"%%1\"").arg(i + 1), "\"" + list.at(i) + "\""); - // Create json document - const auto jsonData = json.toUtf8(); - const auto jsonDocument = QJsonDocument::fromJson(jsonData, &error); - // Calculate dynamically generated values - auto root = jsonDocument.object(); + auto root = QJsonDocument::fromJson(json.toUtf8(), &m_error).object(); auto groups = JFI_Value(root, "groups", "g").toArray(); for (int i = 0; i < groups.count(); ++i) { @@ -380,12 +372,19 @@ void JSON::Generator::processFrame(const QByteArray &data, const quint64 frame, root.insert("groups", groups); // Create JSON document - document = QJsonDocument(root); + m_jfi.jsonDocument = QJsonDocument(root); + + // Clear strings + json.clear(); } // No parse error, update UI & reset error counter - if (error.error == QJsonParseError::NoError) - Q_EMIT jsonChanged(JFI_CreateNew(frame, time, document)); + if (m_error.error == QJsonParseError::NoError) + { + m_jfi.rxDateTime = time; + m_jfi.frameNumber = frame; + Q_EMIT jsonChanged(m_jfi); + } } //---------------------------------------------------------------------------------------- diff --git a/src/JSON/Generator.h b/src/JSON/Generator.h index 8c65c54d..3d8b35c2 100644 --- a/src/JSON/Generator.h +++ b/src/JSON/Generator.h @@ -153,10 +153,12 @@ private Q_SLOTS: private: QFile m_jsonMap; + JFI_Object m_jfi; quint64 m_frameCount; QSettings m_settings; QString m_jsonMapData; OperationMode m_opMode; + QJsonParseError m_error; bool m_processInSeparateThread; }; } diff --git a/src/UI/Widgets/Terminal.cpp b/src/UI/Widgets/Terminal.cpp index c467453a..b5adb6c1 100644 --- a/src/UI/Widgets/Terminal.cpp +++ b/src/UI/Widgets/Terminal.cpp @@ -66,14 +66,10 @@ Widgets::Terminal::Terminal(QQuickItem *parent) #endif m_textEdit.setPalette(palette); - // Connect console signals + // Connect signals/slots // clang-format off connect(&IO::Console::instance(), &IO::Console::stringReceived, this, &Widgets::Terminal::insertText); - // clang-format on - - // Configure re-paint timer at 10 Hz - // clang-format off connect(&Misc::TimerEvents::instance(), &Misc::TimerEvents::timeout10Hz, this, &Widgets::Terminal::repaint); // clang-format on @@ -555,6 +551,10 @@ void Widgets::Terminal::addText(const QString &text, const bool enableVt100) if (enableVt100) textToInsert = vt100Processing(text); + // Clear terminal scrollback after 10000 lines + if (m_textEdit.blockCount() >= 10000) + m_textEdit.clear(); + // Add text at the end of the text document QTextCursor cursor(m_textEdit.document()); cursor.beginEditBlock();