Mercurial > trustbridge
view ui/listupdatedialog.cpp @ 98:6090e673c707
Add some error handling. Change process path for testing
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Fri, 21 Mar 2014 10:50:01 +0000 |
parents | e52df5870c4f |
children | 04dcc0fb1eca |
line wrap: on
line source
#include "listupdatedialog.h" #include <QDebug> #include <QProcess> #include <QPushButton> #include <QGroupBox> #include <QHBoxLayout> #include <QListWidget> #include <QVBoxLayout> #include "certificate.h" ListUpdateDialog::ListUpdateDialog(QDialog *parent, const CertificateList &listToInstall) : QDialog(parent), mCertificateList(listToInstall) { qDebug() << "I am a happy list update dialog"; setupGUI(); } void ListUpdateDialog::setupGUI() { /* Top level layout / widgets */ QVBoxLayout *topLayout = new QVBoxLayout; QHBoxLayout *listLayout = new QHBoxLayout; QPushButton *executeUpdate = new QPushButton(tr("Update Stores")); connect(executeUpdate, &QPushButton::clicked, this, &ListUpdateDialog::executeUpdate); /* The remove groups */ QVBoxLayout *removeGroupLayout = new QVBoxLayout; mRemoveListWidget = new QListWidget; removeGroupLayout->addWidget(mRemoveListWidget); QGroupBox *removeGroup = new QGroupBox(tr("Select certificates to be removed")); removeGroup->setLayout(removeGroupLayout); foreach (const Certificate& cert, mCertificateList.getRemoveCertificates()) { if (!cert.isValid()) { qWarning() << "Invalid certificate in list"; continue; } QListWidgetItem* item = new QListWidgetItem(cert.shortDescription()); item->setFlags(item->flags() | Qt::ItemIsUserCheckable); item->setCheckState(Qt::Checked); mRemoveListWidget->addItem(item); } /* The install group */ QVBoxLayout *installGroupLayout = new QVBoxLayout; mInstallListWidget = new QListWidget; QGroupBox *installGroup = new QGroupBox(tr("Select certificates to install")); installGroupLayout->addWidget(mInstallListWidget); installGroup->setLayout(installGroupLayout); foreach (const Certificate& cert, mCertificateList.getInstallCertificates()) { if (!cert.isValid()) { qWarning() << "Invalid certificate in list"; continue; } QListWidgetItem* item = new QListWidgetItem(cert.shortDescription()); item->setFlags(item->flags() | Qt::ItemIsUserCheckable); item->setData(Qt::ToolTipRole, cert.details()); item->setData(Qt::UserRole, cert.base64Line()); item->setCheckState(Qt::Checked); mInstallListWidget->addItem(item); } /* Add groups to layout */ listLayout->addWidget(installGroup); listLayout->addWidget(removeGroup); /* Fill top level layout */ topLayout->addLayout(listLayout); topLayout->addWidget(executeUpdate); setLayout(topLayout); return; } void ListUpdateDialog::executeUpdate() { /* TODO move this in another dialog and call it async*/ QProcess installerProcess; installerProcess.setProgram("../cinst/cinst"); installerProcess.start(); installerProcess.waitForStarted(); if (installerProcess.state() == QProcess::NotRunning) { qWarning() << "Failed to start installer Process."; /* TODO ERROR message for the user */ return; } installerProcess.write("-----BEGIN CERTIFICATE LIST-----\r\n"); installerProcess.write(mCertificateList.rawData().toLatin1()); installerProcess.write("-----END CERTIFICATE LIST-----\r\n"); QList<QListWidgetItem *> selectedItems = mInstallListWidget->selectedItems(); selectedItems << mRemoveListWidget->selectedItems(); foreach (const QListWidgetItem * item, selectedItems) { installerProcess.write(item->data(Qt::UserRole).toString().toLatin1()); installerProcess.write("\r\n"); } installerProcess.closeWriteChannel(); installerProcess.waitForFinished(); if (installerProcess.exitStatus() == QProcess::CrashExit) { /* Woops */ qWarning() << "Installer process crashed"; } else if (installerProcess.exitStatus() != QProcess::NormalExit) { /* Can not Happen. there are only those two values but maybe * qt changed.. */ qWarning() << "Exit status neither normal nor crash."; return; } if (installerProcess.exitCode() == 0) { qDebug() << "Success!"; } else { /* TODO handle errors defined by errorcodes.h */ qDebug() << "Installer Process returned: " << installerProcess.exitCode(); qDebug() << "output: " << installerProcess.readAllStandardOutput(); return; } }