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