summaryrefslogtreecommitdiffstats
path: root/application
diff options
context:
space:
mode:
Diffstat (limited to 'application')
-rw-r--r--application/MultiMC.cpp2
-rw-r--r--application/pages/LogPage.cpp38
-rw-r--r--application/pages/LogPage.h3
-rw-r--r--application/pages/global/MultiMCPage.cpp4
-rw-r--r--application/pages/global/MultiMCPage.ui45
5 files changed, 91 insertions, 1 deletions
diff --git a/application/MultiMC.cpp b/application/MultiMC.cpp
index c76a171f..0319ea75 100644
--- a/application/MultiMC.cpp
+++ b/application/MultiMC.cpp
@@ -454,6 +454,8 @@ void MultiMC::initGlobalSettings(bool test_mode)
m_settings->registerSetting("ConsoleFont", defaultMonospace);
}
m_settings->registerSetting("ConsoleFontSize", defaultSize);
+ m_settings->registerSetting("ConsoleMaxLines", 100000);
+ m_settings->registerSetting("ConsoleOverflowStop", true);
FTBPlugin::initialize(m_settings);
diff --git a/application/pages/LogPage.cpp b/application/pages/LogPage.cpp
index 7d2013cc..3fade26f 100644
--- a/application/pages/LogPage.cpp
+++ b/application/pages/LogPage.cpp
@@ -8,6 +8,7 @@
#include <QShortcut>
#include "BaseProcess.h"
+#include <settings/Setting.h>
#include "GuiUtil.h"
LogPage::LogPage(BaseProcess *proc, QWidget *parent)
@@ -29,6 +30,18 @@ LogPage::LogPage(BaseProcess *proc, QWidget *parent)
}
defaultFormat->setFont(QFont(fontFamily, fontSize));
+ // ensure we don't eat all the RAM
+ auto lineSetting = MMC->settings()->getSetting("ConsoleMaxLines");
+ int maxLines = lineSetting->get().toInt(&conversionOk);
+ if(!conversionOk)
+ {
+ maxLines = lineSetting->defValue().toInt();
+ qWarning() << "ConsoleMaxLines has nonsensical value, defaulting to" << maxLines;
+ }
+ ui->text->setMaximumBlockCount(maxLines);
+
+ m_stopOnOverflow = MMC->settings()->get("ConsoleOverflowStop").toBool();
+
auto findShortcut = new QShortcut(QKeySequence(QKeySequence::Find), this);
connect(findShortcut, SIGNAL(activated()), SLOT(findActivated()));
auto findNextShortcut = new QShortcut(QKeySequence(QKeySequence::FindNext), this);
@@ -126,6 +139,11 @@ void LogPage::findPreviousActivated()
}
}
+void LogPage::setParentContainer(BasePageContainer * container)
+{
+ m_parentContainer = container;
+}
+
void LogPage::write(QString data, MessageLevel::Enum mode)
{
if (!m_write_active)
@@ -135,6 +153,26 @@ void LogPage::write(QString data, MessageLevel::Enum mode)
return;
}
}
+ if(m_stopOnOverflow && m_write_active)
+ {
+ if(mode != MessageLevel::PrePost && mode != MessageLevel::MultiMC)
+ {
+ if(ui->text->blockCount() >= ui->text->maximumBlockCount())
+ {
+ m_write_active = false;
+ data = tr("MultiMC stopped watching the game log because the log length surpassed %1 lines.\n"
+ "You may have to fix your mods because the game is still loggging to files and"
+ " likely wasting harddrive space at an alarming rate!")
+ .arg(ui->text->maximumBlockCount());
+ mode = MessageLevel::Fatal;
+ ui->trackLogCheckbox->setCheckState(Qt::Unchecked);
+ if(!isVisible())
+ {
+ m_parentContainer->selectPage(id());
+ }
+ }
+ }
+ }
// save the cursor so it can be restored.
auto savedCursor = ui->text->cursor();
diff --git a/application/pages/LogPage.h b/application/pages/LogPage.h
index 15c123d7..0cbf3d23 100644
--- a/application/pages/LogPage.h
+++ b/application/pages/LogPage.h
@@ -53,6 +53,7 @@ public:
return "Minecraft-Logs";
}
virtual bool shouldDisplay() const;
+ virtual void setParentContainer(BasePageContainer *);
private slots:
/**
@@ -81,6 +82,8 @@ private:
bool m_scroll_active = true;
int m_saved_offset = 0;
bool m_write_active = true;
+ bool m_stopOnOverflow = true;
QTextCharFormat * defaultFormat;
+ BasePageContainer * m_parentContainer;
};
diff --git a/application/pages/global/MultiMCPage.cpp b/application/pages/global/MultiMCPage.cpp
index 65f258b5..b5389e25 100644
--- a/application/pages/global/MultiMCPage.cpp
+++ b/application/pages/global/MultiMCPage.cpp
@@ -299,6 +299,8 @@ void MultiMCPage::applySettings()
QString consoleFontFamily = ui->consoleFont->currentFont().family();
s->set("ConsoleFont", consoleFontFamily);
s->set("ConsoleFontSize", ui->fontSizeBox->value());
+ s->set("ConsoleMaxLines", ui->lineLimitSpinBox->value());
+ s->set("ConsoleOverflowStop", ui->checkStopLogging->checkState() != Qt::Unchecked);
// FTB
s->set("TrackFTBInstances", ui->trackFtbBox->isChecked());
@@ -388,6 +390,8 @@ void MultiMCPage::loadSettings()
}
ui->fontSizeBox->setValue(fontSize);
refreshFontPreview();
+ ui->lineLimitSpinBox->setValue(s->get("ConsoleMaxLines").toInt());
+ ui->checkStopLogging->setChecked(s->get("ConsoleOverflowStop").toBool());
// FTB
ui->trackFtbBox->setChecked(s->get("TrackFTBInstances").toBool());
diff --git a/application/pages/global/MultiMCPage.ui b/application/pages/global/MultiMCPage.ui
index 3faafc6e..cf748812 100644
--- a/application/pages/global/MultiMCPage.ui
+++ b/application/pages/global/MultiMCPage.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>487</width>
- <height>519</height>
+ <height>557</height>
</rect>
</property>
<property name="sizePolicy">
@@ -434,6 +434,47 @@
</widget>
</item>
<item>
+ <widget class="QGroupBox" name="groupBox_4">
+ <property name="title">
+ <string>History limit</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="1" column="0">
+ <widget class="QCheckBox" name="checkStopLogging">
+ <property name="text">
+ <string>Stop logging when log overflows</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QSpinBox" name="lineLimitSpinBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="suffix">
+ <string> lines</string>
+ </property>
+ <property name="minimum">
+ <number>10000</number>
+ </property>
+ <property name="maximum">
+ <number>1000000</number>
+ </property>
+ <property name="singleStep">
+ <number>10000</number>
+ </property>
+ <property name="value">
+ <number>100000</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<widget class="QGroupBox" name="themeBox_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
@@ -520,6 +561,8 @@
<tabstop>themeComboBox</tabstop>
<tabstop>showConsoleCheck</tabstop>
<tabstop>autoCloseConsoleCheck</tabstop>
+ <tabstop>lineLimitSpinBox</tabstop>
+ <tabstop>checkStopLogging</tabstop>
<tabstop>consoleFont</tabstop>
<tabstop>fontSizeBox</tabstop>
<tabstop>fontPreview</tabstop>