Remove the timeout for pre/post commands. Fixes #107

This commit is contained in:
Jan Dalheimer 2014-03-15 09:02:56 +01:00
parent de2eb3fc54
commit a74f3b553a
2 changed files with 34 additions and 4 deletions

View File

@ -259,7 +259,14 @@ void MinecraftProcess::finish(int code, ExitStatus status)
void MinecraftProcess::killMinecraft() void MinecraftProcess::killMinecraft()
{ {
killed = true; killed = true;
if (m_prepostlaunchprocess.state() == QProcess::Running)
{
m_prepostlaunchprocess.kill();
}
else
{
kill(); kill();
}
} }
bool MinecraftProcess::preLaunch() bool MinecraftProcess::preLaunch()
@ -271,8 +278,10 @@ bool MinecraftProcess::preLaunch()
// Launch // Launch
emit log(tr("Running Pre-Launch command: %1").arg(prelaunch_cmd)); emit log(tr("Running Pre-Launch command: %1").arg(prelaunch_cmd));
m_prepostlaunchprocess.start(prelaunch_cmd); m_prepostlaunchprocess.start(prelaunch_cmd);
// Wait if (!waitForPrePost())
m_prepostlaunchprocess.waitForFinished(); {
return false;
}
// Flush console window // Flush console window
if (!m_err_leftover.isEmpty()) if (!m_err_leftover.isEmpty())
{ {
@ -310,7 +319,10 @@ bool MinecraftProcess::postLaunch()
postlaunch_cmd = substituteVariables(postlaunch_cmd); postlaunch_cmd = substituteVariables(postlaunch_cmd);
emit log(tr("Running Post-Launch command: %1").arg(postlaunch_cmd)); emit log(tr("Running Post-Launch command: %1").arg(postlaunch_cmd));
m_prepostlaunchprocess.start(postlaunch_cmd); m_prepostlaunchprocess.start(postlaunch_cmd);
m_prepostlaunchprocess.waitForFinished(); if (!waitForPrePost())
{
return false;
}
// Flush console window // Flush console window
if (!m_err_leftover.isEmpty()) if (!m_err_leftover.isEmpty())
{ {
@ -338,6 +350,23 @@ bool MinecraftProcess::postLaunch()
return true; return true;
} }
bool MinecraftProcess::waitForPrePost()
{
m_prepostlaunchprocess.waitForStarted();
QEventLoop eventLoop;
auto finisher = [this, &eventLoop](QProcess::ProcessState state)
{
if (state == QProcess::NotRunning)
{
eventLoop.quit();
}
};
auto connection = connect(&m_prepostlaunchprocess, &QProcess::stateChanged, finisher);
int ret = eventLoop.exec();
disconnect(connection);
return ret == 0;
}
QMap<QString, QString> MinecraftProcess::getVariables() const QMap<QString, QString> MinecraftProcess::getVariables() const
{ {
QMap<QString, QString> out; QMap<QString, QString> out;

View File

@ -133,6 +133,7 @@ protected:
bool preLaunch(); bool preLaunch();
bool postLaunch(); bool postLaunch();
bool waitForPrePost();
QMap<QString, QString> getVariables() const; QMap<QString, QString> getVariables() const;
QString substituteVariables(const QString &cmd) const; QString substituteVariables(const QString &cmd) const;