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@85: installerProcess.setProgram("cinst"); aheinecke@85: installerProcess.start(); aheinecke@85: installerProcess.waitForStarted(); 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@85: qDebug() << "cinst output: " << installerProcess.readAllStandardOutput(); aheinecke@85: qDebug() << " Done " << " exitCode: " << installerProcess.exitCode(); aheinecke@85: qDebug() << " Done " << " exitStatus: " << installerProcess.exitStatus(); aheinecke@82: }