diff --git a/src/commands/gnupgprocesscommand.h b/src/commands/gnupgprocesscommand.h index 3ac54547d..33cd30325 100644 --- a/src/commands/gnupgprocesscommand.h +++ b/src/commands/gnupgprocesscommand.h @@ -1,71 +1,71 @@ /* -*- mode: c++; c-basic-offset:4 -*- commands/gnupgprocesscommand.h This file is part of Kleopatra, the KDE keymanager SPDX-FileCopyrightText: 2008 Klarälvdalens Datakonsult AB SPDX-License-Identifier: GPL-2.0-or-later */ #pragma once #include #include class QString; class QProcess; namespace Kleo { namespace Commands { class GnuPGProcessCommand : public Command { Q_OBJECT protected: explicit GnuPGProcessCommand(QAbstractItemView *view, KeyListController *parent); explicit GnuPGProcessCommand(KeyListController *parent); explicit GnuPGProcessCommand(const GpgME::Key &key); ~GnuPGProcessCommand() override; public: QDialog *dialog() const; + void setShowsOutputWindow(bool show); private: virtual bool preStartHook(QWidget *parentWidget) const; virtual QStringList arguments() const = 0; virtual QString errorCaption() const = 0; virtual QString successCaption() const; virtual QString crashExitMessage(const QStringList &args) const = 0; virtual QString errorExitMessage(const QStringList &args) const = 0; virtual QString successMessage(const QStringList &args) const; virtual void postSuccessHook(QWidget *parentWidget); protected: QString errorString() const; void setIgnoresSuccessOrFailure(bool ignore); bool ignoresSuccessOrFailure() const; - void setShowsOutputWindow(bool show); bool showsOutputWindow() const; QProcess *process(); void doStart() override; void doCancel() override; private: class Private; inline Private *d_func(); inline const Private *d_func() const; Q_PRIVATE_SLOT(d_func(), void slotProcessFinished(int, QProcess::ExitStatus)) Q_PRIVATE_SLOT(d_func(), void slotProcessReadyReadStandardError()) }; } } diff --git a/src/commands/learncardkeyscommand.cpp b/src/commands/learncardkeyscommand.cpp index 838e4cf2e..178c35fdb 100644 --- a/src/commands/learncardkeyscommand.cpp +++ b/src/commands/learncardkeyscommand.cpp @@ -1,107 +1,111 @@ /* -*- mode: c++; c-basic-offset:4 -*- commands/learncardkeyscommand.cpp This file is part of Kleopatra, the KDE keymanager SPDX-FileCopyrightText: 2008 Klarälvdalens Datakonsult AB SPDX-License-Identifier: GPL-2.0-or-later */ #include #include "learncardkeyscommand.h" #include "command_p.h" #include #include #include #include #include using namespace Kleo; using namespace Kleo::Commands; using namespace GpgME; LearnCardKeysCommand::LearnCardKeysCommand(GpgME::Protocol proto) : GnuPGProcessCommand(nullptr), m_protocol(proto) { setIgnoresSuccessOrFailure(true); setShowsOutputWindow(true); connect(this, &Command::finished, SmartCard::ReaderStatus::mutableInstance(), &SmartCard::ReaderStatus::updateStatus); } LearnCardKeysCommand::~LearnCardKeysCommand() {} Protocol LearnCardKeysCommand::protocol() const { return m_protocol; } QStringList LearnCardKeysCommand::arguments() const { if (protocol() == OpenPGP) { return QStringList() << gpgPath() << QStringLiteral("--batch") << QStringLiteral("--card-status") << QStringLiteral("-v"); } else { return QStringList() << gpgSmPath() << QStringLiteral("--learn-card") << QStringLiteral("-v"); } } QString LearnCardKeysCommand::errorCaption() const { return i18nc("@title:window", "Error Learning SmartCard"); } QString LearnCardKeysCommand::successCaption() const { return i18nc("@title:window", "Finished Learning SmartCard"); } QString LearnCardKeysCommand::crashExitMessage(const QStringList &args) const { return xi18nc("@info", "The GPG or GpgSM process that tried to learn the smart card " "ended prematurely because of an unexpected error." "Please check the output of %1 for details.", args.join(QLatin1Char(' '))); } QString LearnCardKeysCommand::errorExitMessage(const QStringList &) const { // unused, since we setIgnoresSuccessOrFailure(true) return QString(); } QString LearnCardKeysCommand::successMessage(const QStringList &) const { // unused, since we setIgnoresSuccessOrFailure(true) return QString(); } void LearnCardKeysCommand::doStart() { GnuPGProcessCommand::doStart(); auto detailsDlg = dialog(); if (detailsDlg) { detailsDlg->hide(); } + if (!showsOutputWindow()) { + return; + } + const auto dlg = new QProgressDialog(i18n("Loading certificates... (this can take a while)"), i18n("Show Details"), 0, 0, d->parentWidgetOrView()); dlg->setAttribute(Qt::WA_DeleteOnClose); dlg->setModal(true); connect(dlg, &QProgressDialog::canceled, this, [detailsDlg] () { if (detailsDlg) { detailsDlg->show(); } }); connect(this, &LearnCardKeysCommand::finished, this, [dlg] () { dlg->accept(); }); dlg->show(); }