diff --git a/configdialog.cpp b/configdialog.cpp index 7c53bdd..5c8d3ad 100644 --- a/configdialog.cpp +++ b/configdialog.cpp @@ -12,6 +12,9 @@ const QString ConfigSettings::defaultMapperExecutableName("minetestmapper"); QStringList ConfigSettings::predefinedMapperLocations; +QString ConfigSettings::versionUnknown("(unknown)"); +QString ConfigSettings::versionError("(error)"); + ConfigSettings::InitStatics::InitStatics() { #ifndef Q_OS_WIN @@ -106,6 +109,39 @@ void ConfigDialog::on_browseMapper_clicked() } } +QString ConfigSettings::getMapperVersion(const QString &mapperBinary, QWidget *parent) +{ + QProcess mapperProcess(parent); + mapperProcess.setProgram(mapperBinary); + mapperProcess.setArguments(QStringList("--version")); + mapperProcess.start(); + if (!mapperProcess.waitForStarted(1000)) { + mapperProcess.terminate(); + return ConfigSettings::versionError; + } + if (!mapperProcess.waitForFinished(1000)) { + mapperProcess.terminate(); + if (!mapperProcess.waitForFinished(1000)) { + mapperProcess.kill(); + } + return ConfigSettings::versionError; + } + + QByteArray dataRaw; + QString data; + dataRaw = mapperProcess.readAllStandardError(); + data = QString(dataRaw).trimmed(); + if (data.contains("unrecognized option")) { + return ConfigSettings::versionUnknown; + } + dataRaw = mapperProcess.readAllStandardOutput(); + data = QString(dataRaw).trimmed(); + if (!data.contains("Version-ID:")) { + return ConfigSettings::versionUnknown; + } + return data.replace(QRegularExpression(".*Version-ID: *"),""); +} + QString ConfigSettings::getDefaultMapperExecutable(void) { QStringList locations = getMapperExecutables(); diff --git a/configdialog.h b/configdialog.h index fa8d60a..51760d6 100644 --- a/configdialog.h +++ b/configdialog.h @@ -13,10 +13,13 @@ struct ConfigSettings { QString mapperPath; + static QString versionUnknown; + static QString versionError; static QStringList getMapperExecutables(void); static QString getDefaultMapperExecutable(void); static const QString defaultMapperExecutableName; static QStringList predefinedMapperLocations; + static QString getMapperVersion(const QString &mapperBinary, QWidget *parent = NULL); private: struct InitStatics { InitStatics(void); }; diff --git a/mainwindow.cpp b/mainwindow.cpp index 773e6d0..9c1cecf 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -227,6 +227,8 @@ void MainWindow::on_button_generate_clicked() return; } + qDebug() << QString("Minetestmapper version: ") + ConfigSettings::getMapperVersion(mapperBinary.fileName(), this); + QDir worldPath = QDir(ui->path_World->text()); if(!worldPath.exists()||worldPath.path()=="."||worldPath.path()=="/"){ QMessageBox::critical(this, tr("no input world selected"),