diff --git a/src/gui/src/CommandProcess.cpp b/src/gui/src/CommandProcess.cpp index 763a7058..ce239129 100644 --- a/src/gui/src/CommandProcess.cpp +++ b/src/gui/src/CommandProcess.cpp @@ -18,17 +18,46 @@ #include "CommandProcess.h" #include +#include -CommandProcess::CommandProcess(QString cmd, QStringList arguments) : +CommandProcess::CommandProcess(QString cmd, QStringList arguments, QString input) : m_Command(cmd), - m_Arguments(arguments) + m_Arguments(arguments), + m_Input(input) { } -void CommandProcess::run() +QString CommandProcess::run() { QProcess process; + process.setReadChannel(QProcess::StandardOutput); process.start(m_Command, m_Arguments); - process.waitForFinished(); + bool success = process.waitForFinished(); + + QString output, error; + if (success) + { + if (!m_Input.isEmpty()) { + process.write(m_Input.toStdString().c_str()); + } + + if (process.waitForFinished()) { + output = process.readAllStandardOutput().trimmed(); + error = process.readAllStandardError().trimmed(); + } + } + + int code = process.exitCode(); + if (!error.isEmpty() || !success || code != 0) + { + throw std::runtime_error( + QString("Code: %1\nError: %2") + .arg(process.exitCode()) + .arg(error.isEmpty() ? "Unknown" : error) + .toStdString()); + } + emit finished(); + + return output; } diff --git a/src/gui/src/CommandProcess.h b/src/gui/src/CommandProcess.h index 62e89bfb..508552da 100644 --- a/src/gui/src/CommandProcess.h +++ b/src/gui/src/CommandProcess.h @@ -25,17 +25,18 @@ class CommandProcess : public QObject Q_OBJECT public: - CommandProcess(QString cmd, QStringList arguments); + CommandProcess(QString cmd, QStringList arguments, QString input = ""); signals: void finished(); public slots: - void run(); + QString run(); private: QString m_Command; QStringList m_Arguments; + QString m_Input; }; #endif // COMMANDTHREAD_H diff --git a/src/gui/src/PluginManager.cpp b/src/gui/src/PluginManager.cpp index a39fef0b..f4d16ff0 100644 --- a/src/gui/src/PluginManager.cpp +++ b/src/gui/src/PluginManager.cpp @@ -18,7 +18,6 @@ #include "PluginManager.h" #include "CoreInterface.h" -#include "CommandProcess.h" #include "DataDownloader.h" #include "QUtility.h" #include "ProcessorArch.h" diff --git a/src/gui/src/QUtility.cpp b/src/gui/src/QUtility.cpp index 14d1d1e1..8be55c18 100644 --- a/src/gui/src/QUtility.cpp +++ b/src/gui/src/QUtility.cpp @@ -18,6 +18,7 @@ #include "QUtility.h" #include "ProcessorArch.h" +#include "CommandProcess" #if defined(Q_OS_LINUX) #include @@ -90,3 +91,21 @@ qProcessorArch getProcessorArch() return kProcessorArchUnknown; } + +QString getOSInformation() +{ + QString output; + +#if defined(Q_OS_LINUX) + CommandProcess cp("/bin/cat", "/etc/os-release"); + QString output = cp.run(); + + QRegExp resultRegex(".*PRETTY_NAME=\".*\".*"); + if (resultRegex.exactMatch(output)) { + QString OSInfo = resultRegex.cap(1); + output = OSInfo; + } +#endif + + return output; +} diff --git a/src/gui/src/QUtility.h b/src/gui/src/QUtility.h index 89861dda..01a42c03 100644 --- a/src/gui/src/QUtility.h +++ b/src/gui/src/QUtility.h @@ -28,3 +28,4 @@ void setIndexFromItemData(QComboBox* comboBox, const QVariant& itemData); QString hash(const QString& string); QString getFirstMacAddress(); qProcessorArch getProcessorArch(); +QString getOSInformation();