GH-1008 implement log window max line count
Defaults to 100k lines
This commit is contained in:
@ -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();
|
||||
|
Reference in New Issue
Block a user