diff options
-rw-r--r-- | logic/BaseInstance.h | 7 | ||||
-rw-r--r-- | logic/launch/LaunchTask.cpp | 43 | ||||
-rw-r--r-- | logic/launch/LaunchTask.h | 17 | ||||
-rw-r--r-- | logic/launch/steps/CheckJava.cpp | 1 | ||||
-rw-r--r-- | logic/minecraft/MinecraftInstance.cpp | 40 | ||||
-rw-r--r-- | logic/minecraft/MinecraftInstance.h | 3 |
6 files changed, 53 insertions, 58 deletions
diff --git a/logic/BaseInstance.h b/logic/BaseInstance.h index 6201f1ac..9c282bbc 100644 --- a/logic/BaseInstance.h +++ b/logic/BaseInstance.h @@ -25,6 +25,7 @@ #include "settings/INIFile.h" #include "BaseVersionList.h" #include "auth/MojangAccount.h" +#include "launch/MessageLevel.h" class QDir; class Task; @@ -94,6 +95,12 @@ public: QString getPostExitCommand(); QString getWrapperCommand(); + /// guess log level from a line of game log + virtual MessageLevel::Enum guessLevel(const QString &line, MessageLevel::Enum level) + { + return level; + }; + virtual QStringList extraArguments() const; virtual QString intendedVersionId() const = 0; diff --git a/logic/launch/LaunchTask.cpp b/logic/launch/LaunchTask.cpp index 248761f0..66502020 100644 --- a/logic/launch/LaunchTask.cpp +++ b/logic/launch/LaunchTask.cpp @@ -119,47 +119,6 @@ QString LaunchTask::censorPrivateInfo(QString in) return in; } -// console window -MessageLevel::Enum LaunchTask::guessLevel(const QString &line, MessageLevel::Enum level) -{ - QRegularExpression re("\\[(?<timestamp>[0-9:]+)\\] \\[[^/]+/(?<level>[^\\]]+)\\]"); - auto match = re.match(line); - if(match.hasMatch()) - { - // New style logs from log4j - QString timestamp = match.captured("timestamp"); - QString levelStr = match.captured("level"); - if(levelStr == "INFO") - level = MessageLevel::Message; - if(levelStr == "WARN") - level = MessageLevel::Warning; - if(levelStr == "ERROR") - level = MessageLevel::Error; - if(levelStr == "FATAL") - level = MessageLevel::Fatal; - if(levelStr == "TRACE" || levelStr == "DEBUG") - level = MessageLevel::Debug; - } - else - { - // Old style forge logs - if (line.contains("[INFO]") || line.contains("[CONFIG]") || line.contains("[FINE]") || - line.contains("[FINER]") || line.contains("[FINEST]")) - level = MessageLevel::Message; - if (line.contains("[SEVERE]") || line.contains("[STDERR]")) - level = MessageLevel::Error; - if (line.contains("[WARNING]")) - level = MessageLevel::Warning; - if (line.contains("[DEBUG]")) - level = MessageLevel::Debug; - } - if (line.contains("overwriting existing")) - return MessageLevel::Fatal; - if (line.contains("Exception in thread") || line.contains(QRegularExpression("\\s+at "))) - return MessageLevel::Error; - return level; -} - void LaunchTask::proceed() { if(state != LaunchTask::Waiting) @@ -223,7 +182,7 @@ void LaunchTask::onLogLine(QString line, MessageLevel::Enum level) // If the level is still undetermined, guess level if (level == MessageLevel::StdErr || level == MessageLevel::StdOut || level == MessageLevel::Unknown) { - level = this->guessLevel(line, level); + level = m_instance->guessLevel(line, level); } // censor private user info diff --git a/logic/launch/LaunchTask.h b/logic/launch/LaunchTask.h index 75dc1d35..24139ea8 100644 --- a/logic/launch/LaunchTask.h +++ b/logic/launch/LaunchTask.h @@ -21,18 +21,7 @@ #include "MessageLevel.h" #include "LoggedProcess.h" #include "LaunchStep.h" -/* HACK: MINECRAFT: split! */ -#include "minecraft/MinecraftInstance.h" -#include "java/JavaChecker.h" -#include "QObjectPtr.h" -#include "tasks/Task.h" -class ProcessTask -{ - -}; - -class BaseProfilerFactory; class LaunchTask: public Task { Q_OBJECT @@ -89,13 +78,9 @@ public: /* methods */ */ virtual bool abort() override; - - -public: /* HACK: remove this from here! */ - +public: QString substituteVariables(const QString &cmd) const; QString censorPrivateInfo(QString in); - virtual MessageLevel::Enum guessLevel(const QString &message, MessageLevel::Enum defaultLevel); protected: /* methods */ virtual void emitFailed(QString reason); diff --git a/logic/launch/steps/CheckJava.cpp b/logic/launch/steps/CheckJava.cpp index bd4c4856..22f62057 100644 --- a/logic/launch/steps/CheckJava.cpp +++ b/logic/launch/steps/CheckJava.cpp @@ -16,6 +16,7 @@ #include "CheckJava.h" #include <launch/LaunchTask.h> #include <QStandardPaths> +#include <QFileInfo> void CheckJava::executeTask() { diff --git a/logic/minecraft/MinecraftInstance.cpp b/logic/minecraft/MinecraftInstance.cpp index a078c8fd..13e696b9 100644 --- a/logic/minecraft/MinecraftInstance.cpp +++ b/logic/minecraft/MinecraftInstance.cpp @@ -204,4 +204,44 @@ QProcessEnvironment MinecraftInstance::createEnvironment() return env; } +MessageLevel::Enum MinecraftInstance::guessLevel(const QString &line, MessageLevel::Enum level) +{ + QRegularExpression re("\\[(?<timestamp>[0-9:]+)\\] \\[[^/]+/(?<level>[^\\]]+)\\]"); + auto match = re.match(line); + if(match.hasMatch()) + { + // New style logs from log4j + QString timestamp = match.captured("timestamp"); + QString levelStr = match.captured("level"); + if(levelStr == "INFO") + level = MessageLevel::Message; + if(levelStr == "WARN") + level = MessageLevel::Warning; + if(levelStr == "ERROR") + level = MessageLevel::Error; + if(levelStr == "FATAL") + level = MessageLevel::Fatal; + if(levelStr == "TRACE" || levelStr == "DEBUG") + level = MessageLevel::Debug; + } + else + { + // Old style forge logs + if (line.contains("[INFO]") || line.contains("[CONFIG]") || line.contains("[FINE]") || + line.contains("[FINER]") || line.contains("[FINEST]")) + level = MessageLevel::Message; + if (line.contains("[SEVERE]") || line.contains("[STDERR]")) + level = MessageLevel::Error; + if (line.contains("[WARNING]")) + level = MessageLevel::Warning; + if (line.contains("[DEBUG]")) + level = MessageLevel::Debug; + } + if (line.contains("overwriting existing")) + return MessageLevel::Fatal; + if (line.contains("Exception in thread") || line.contains(QRegularExpression("\\s+at "))) + return MessageLevel::Error; + return level; +} + #include "MinecraftInstance.moc" diff --git a/logic/minecraft/MinecraftInstance.h b/logic/minecraft/MinecraftInstance.h index 45589daf..7ed659a7 100644 --- a/logic/minecraft/MinecraftInstance.h +++ b/logic/minecraft/MinecraftInstance.h @@ -40,6 +40,9 @@ public: /// create an environment for launching processes virtual QProcessEnvironment createEnvironment() override; + + /// guess log level from a line of minecraft log + virtual MessageLevel::Enum guessLevel(const QString &line, MessageLevel::Enum level); }; typedef std::shared_ptr<MinecraftInstance> MinecraftInstancePtr; |