diff --git a/src/settingsadapter.cpp b/src/settingsadapter.cpp index ef15a53bd77ba86ffbb1fc1c39588da0ef19fd6d..c9c75eb4eb8f5697e0355e335339d6819b30f9ae 100644 --- a/src/settingsadapter.cpp +++ b/src/settingsadapter.cpp @@ -1100,17 +1100,44 @@ SettingsAdapter::isAllModeratorsEnabled(const QString& accountId) return lrcInstance_->accountModel().isAllModerators(accountId); } +QString +SettingsAdapter::getLogs() const +{ + return logList_.join("\n"); +} + +int +SettingsAdapter::getSizeOfLogs() const +{ + return logList_.size(); +} + +int +SettingsAdapter::getFirstLogLength() const +{ + return logList_.isEmpty() ? 0 : (logList_.first()).length(); +} + +void +SettingsAdapter::clearLogs() +{ + logList_.clear(); +} + void SettingsAdapter::monitor(const bool& continuous) { + disconnect(debugMessageReceivedConnection_); if (continuous) debugMessageReceivedConnection_ = QObject::connect(&lrcInstance_->behaviorController(), &lrc::api::BehaviorController::debugMessageReceived, - this, - &SettingsAdapter::debugMessageReceived, - Qt::ConnectionType::UniqueConnection); - else - disconnect(debugMessageReceivedConnection_); + [this](const QString& data) { + logList_.append(data); + if (logList_.size() >= LOGSLIMIT) { + logList_.removeFirst(); + } + Q_EMIT SettingsAdapter::debugMessageReceived(data); + }); lrcInstance_->monitor(continuous); } diff --git a/src/settingsadapter.h b/src/settingsadapter.h index 98e1be2d0c5bd23667e370db0107703f84399866..cc06b307041885bc8550f34d1df0bc96cf664ade 100644 --- a/src/settingsadapter.h +++ b/src/settingsadapter.h @@ -31,6 +31,9 @@ class SettingsAdapter : public QmlAdapterBase { Q_OBJECT + +#define LOGSLIMIT 10000 + public: explicit SettingsAdapter(AppSettingsManager* settingsManager, LRCInstance* instance, @@ -229,6 +232,10 @@ public: Q_INVOKABLE bool isAllModeratorsEnabled(const QString& accountId); Q_INVOKABLE void monitor(const bool& continuous); + Q_INVOKABLE QString getLogs() const; + Q_INVOKABLE int getSizeOfLogs() const; + Q_INVOKABLE int getFirstLogLength() const; + Q_INVOKABLE void clearLogs(); Q_SIGNALS: void debugMessageReceived(const QString& message); @@ -237,5 +244,7 @@ private: AppSettingsManager* settingsManager_; QMetaObject::Connection debugMessageReceivedConnection_; + + QStringList logList_; }; Q_DECLARE_METATYPE(SettingsAdapter*) diff --git a/src/settingsview/components/GeneralSettingsPage.qml b/src/settingsview/components/GeneralSettingsPage.qml index eb56ce115cbf5811fac2020ed0b9b629e5c57dec..b14be3899006dd4a4d15246ec7c9a622c591899a 100644 --- a/src/settingsview/components/GeneralSettingsPage.qml +++ b/src/settingsview/components/GeneralSettingsPage.qml @@ -84,7 +84,6 @@ Rectangle { Layout.rightMargin: JamiTheme.preferredMarginSize Layout.bottomMargin: JamiTheme.preferredMarginSize itemWidth: preferredColumnWidth - visible: Qt.platform.os == "windows" ? false : true } // update setting panel diff --git a/src/settingsview/components/LogsView.qml b/src/settingsview/components/LogsView.qml index 3e34394bcf379e85bbeb25d0a0d4bbcf39f1b657..543eea97e929f0664e01f33c9693f65e7d0f7813 100644 --- a/src/settingsview/components/LogsView.qml +++ b/src/settingsview/components/LogsView.qml @@ -33,66 +33,58 @@ Dialog { id: root property bool cancelPressed: false - property bool startedLogs: false + property bool logging: false property bool isStopped: false + property bool hasOpened: false + property int itemWidth: Math.min(root.width / 2 - 50, 350) * 1.5 property int widthDivisor: 4 property int selectBeginning property int selectEnd + property var lineSize: [] + property var lineCounter: 0 - function findNthIndexInText(substring, n){ - var i; - var t = logsText.text - var index = t.indexOf(substring) - for (i = 0; i < n - 1; i++){ - index = t.indexOf(substring, index + 1) - } - return index - } - function monitor(continuous){ + function monitor(continuous) { SettingsAdapter.monitor(continuous) } Connections{ target: SettingsAdapter - function onDebugMessageReceived(message){ - var initialPosition = scroll.position - var oldContent = flickable.contentY - if (!root.cancelPressed){ - logsText.append(message); + function onDebugMessageReceived(message) { + if (!root.visible) { + return; } - if (logsText.lineCount >= 10000){ - var index = findNthIndexInText("\n", 10) - logsText.remove(0, index) + var initialPosition = scrollView.ScrollBar.vertical.position + lineCounter += 1 + lineSize.push(message.length) + if (!root.cancelPressed) { + logsText.append(message); } - var approximateBottom = (1.0 - flickable.visibleArea.heightRatio); - if (!isStopped){ - - if (initialPosition < 0){ - flickable.flick(0, -(100)) - } - else if (initialPosition >= approximateBottom * .8){ - flickable.contentY = flickable.contentHeight - flickable.height - flickable.flick(0, -(flickable.maximumFlickVelocity)) - } - else{ - flickable.contentY = oldContent - } + if (lineCounter >= 10000){ + lineCounter -= 1 + logsText.remove(0, lineSize[0]) + lineSize.shift() } + scrollView.ScrollBar.vertical.position = initialPosition > (.8*(1.0 - scrollView.ScrollBar.vertical.size)) ? 1.0 - scrollView.ScrollBar.vertical.size : initialPosition } } onVisibleChanged: { - logsText.clear() - copiedToolTip.close() - if (startStopToggle.checked){ - startStopToggle.checked = false - startedLogs = false + if (visible && startStopToggle.checked) { + if (hasOpened && lineCounter == 0) { + logsText.append(SettingsAdapter.getLogs()) + lineCounter = SettingsAdapter.getSizeOfLogs() + lineSize.push(SettingsAdapter.getFirstLogLength()) + } + } else { + logsText.clear() + copiedToolTip.close() + lineCounter = 0 + lineSize = [] } - root.cancelPressed = true - monitor(false) + hasOpened = true } title: JamiStrings.logsViewTitle @@ -101,7 +93,7 @@ Dialog { height: 700 standardButtons: StandardButton.NoButton - ColumnLayout{ + ColumnLayout { Layout.alignment: Qt.AlignHCenter Layout.fillWidth: true @@ -110,8 +102,9 @@ Dialog { height: root.height width: root.width - Rectangle{ + Rectangle { id: buttonRectangleBackground + Layout.fillWidth: true Layout.fillHeight: true Layout.alignment: Qt.AlignHCenter @@ -122,7 +115,7 @@ Dialog { border.width: 0 height: JamiTheme.preferredFieldHeight*2 - RowLayout{ + RowLayout { id: buttons Layout.alignment: Qt.AlignTop| Qt.AlignHCenter @@ -140,13 +133,12 @@ Dialog { fontPointSize: JamiTheme.settingsFontSize onSwitchToggled: { - startedLogs = !startedLogs - if (startedLogs){ + logging = !logging + if (logging){ isStopped = false root.cancelPressed = false monitor(true) - } - else{ + } else { isStopped = true root.cancelPressed = true monitor(false) @@ -154,30 +146,7 @@ Dialog { } } - MaterialButton{ - id: showStatsButton - - Layout.preferredHeight: JamiTheme.preferredFieldHeight - Layout.preferredWidth: itemWidth/widthDivisor - Layout.topMargin: JamiTheme.preferredMarginSize - Layout.bottomMargin: JamiTheme.preferredMarginSize - Layout.alignment: Qt.AlignHCenter - - text: JamiStrings.logsViewShowStats - color: startedLogs ? JamiTheme.buttonTintedGreyInactive : JamiTheme.buttonTintedBlack - hoveredColor: startedLogs ? JamiTheme.buttonTintedGreyInactive : JamiTheme.buttonTintedBlackHovered - pressedColor: startedLogs ? JamiTheme.buttonTintedGreyInactive : JamiTheme.buttonTintedBlackPressed - outlined: true - - onClicked:{ - if (!startedLogs){ - root.cancelPressed = false - monitor(false) - } - } - } - - MaterialButton{ + MaterialButton { id: clearButton Layout.alignment: Qt.AlignHCenter @@ -194,14 +163,15 @@ Dialog { onClicked: { logsText.clear() - startedLogs = false + logging = false startStopToggle.checked = false root.cancelPressed = true + SettingsAdapter.clearLogs() monitor(false) } } - MaterialButton{ + MaterialButton { id: copyButton Layout.alignment: Qt.AlignHCenter @@ -227,18 +197,16 @@ Dialog { height: JamiTheme.preferredFieldHeight TextArea{ - text: JamiStrings.logsViewCopied + text: JamiStrings.logsViewCopied color: JamiTheme.textColor } - - background: Rectangle{ color: JamiTheme.primaryBackgroundColor } - } + } } - MaterialButton{ + MaterialButton { id: reportButton Layout.alignment: Qt.AlignHCenter @@ -259,7 +227,7 @@ Dialog { } } - Rectangle{ + Rectangle { id: flickableRectangleBackground property alias text: logsText.text @@ -273,16 +241,14 @@ Dialog { height: root.height - buttonRectangleBackground.height - Flickable { - id: flickable + ScrollView{ + id: scrollView - Layout.fillWidth: true Layout.fillHeight: true + Layout.fillWidth: true anchors.fill: flickableRectangleBackground - boundsBehavior: Flickable.StopAtBounds - - TextArea.flickable: TextArea { + TextArea{ id: logsText readOnly: true @@ -291,36 +257,35 @@ Dialog { wrapMode: TextArea.Wrap selectByMouse: true - MouseArea{ + MouseArea { anchors.fill: logsText acceptedButtons: Qt.RightButton hoverEnabled: true - onClicked:{ + onClicked: { selectBeginning = logsText.selectionStart selectEnd = logsText.selectionEnd rightClickMenu.open() logsText.select(selectBeginning, selectEnd) } - Menu{ + Menu { id: rightClickMenu - MenuItem{ + MenuItem { text: JamiStrings.logsViewCopy - onTriggered:{ + onTriggered: { logsText.copy() } } } } } - ScrollBar.vertical: ScrollBar { - id: scroll - } } } } +} + + -}