From 6cd6b35c737e0e4042a8fd79af1decc9f10ed84b Mon Sep 17 00:00:00 2001 From: Benjamin Dobell Date: Mon, 1 Oct 2012 12:43:05 +1000 Subject: Heimdall 1.4 RC1: - Massive refactoring. - Support for Qualcomm based devices. - Print PIT from file. - Use partition names as arguments e.g. --HIDDEN, --KERNEL, --MOVINAND etc. - Heimdall Frontend UI improvements. - And much more... --- heimdall-frontend/Source/aboutform.cpp | 95 ++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) (limited to 'heimdall-frontend/Source/aboutform.cpp') diff --git a/heimdall-frontend/Source/aboutform.cpp b/heimdall-frontend/Source/aboutform.cpp index bce9791..9bb975a 100644 --- a/heimdall-frontend/Source/aboutform.cpp +++ b/heimdall-frontend/Source/aboutform.cpp @@ -18,12 +18,107 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.*/ +// Qt +#include +#include + // Heimdall Frontend #include "aboutform.h" +#define UNUSED(x) (void)(x) + using namespace HeimdallFrontend; AboutForm::AboutForm(QWidget *parent) : QWidget(parent) { setupUi(this); + + // Heimdall Command Line + QObject::connect(&heimdallProcess, SIGNAL(readyRead()), this, SLOT(HandleHeimdallStdout())); + QObject::connect(&heimdallProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(HandleHeimdallReturned(int, QProcess::ExitStatus))); + QObject::connect(&heimdallProcess, SIGNAL(error(QProcess::ProcessError)), this, SLOT(HandleHeimdallError(QProcess::ProcessError))); + + heimdallFailed = false; + + RetrieveHeimdallVersion(); +} + +void AboutForm::RetrieveHeimdallVersion(void) +{ + heimdallProcess.setReadChannel(QProcess::StandardOutput); + + heimdallProcess.start("heimdall", QStringList("version")); + heimdallProcess.waitForFinished(350); + + // OS X was playing up and not finding heimdall, so we're manually checking the PATH. + if (heimdallFailed) + { + QStringList environment = QProcess::systemEnvironment(); + + QStringList paths; + + // Ensure /usr/bin is in PATH + for (int i = 0; i < environment.length(); i++) + { + if (environment[i].left(5) == "PATH=") + { + paths = environment[i].mid(5).split(':'); + paths.prepend("/usr/bin"); + break; + } + } + + int pathIndex = -1; + + while (heimdallFailed && ++pathIndex < paths.length()) + { + QString heimdallPath = paths[pathIndex]; + + if (heimdallPath.length() > 0) + { + heimdallFailed = false; + + if (heimdallPath[heimdallPath.length() - 1] != QDir::separator()) + heimdallPath += QDir::separator(); + + heimdallPath += "heimdall"; + + heimdallProcess.start(heimdallPath, QStringList("version")); + heimdallProcess.waitForFinished(350); + } + } + + if (heimdallFailed) + versionCopyrightLabel->setText(versionCopyrightLabel->text().replace("%HEIMDALL-VERSION%", "")); + } +} + +void AboutForm::HandleHeimdallStdout(void) +{ + QString version = heimdallProcess.readAll(); + + if (version.length() > 0) + { + if (version.at(0) == QChar('v')) + version = version.mid(1); + + versionCopyrightLabel->setText(versionCopyrightLabel->text().replace("%HEIMDALL-VERSION%", "Version " + version + "
")); + } +} + +void AboutForm::HandleHeimdallReturned(int exitCode, QProcess::ExitStatus exitStatus) +{ + UNUSED(exitCode); + UNUSED(exitStatus); + + // If for some reason %HEIMDALL-VERSION% hasn't been replaced yet, we'll replace it with an empty string. + versionCopyrightLabel->setText(versionCopyrightLabel->text().replace("%HEIMDALL-VERSION%", "")); } + +void AboutForm::HandleHeimdallError(QProcess::ProcessError error) +{ + UNUSED(error); + + heimdallFailed = true; +} + -- cgit v1.2.3