From b68115aec3d0fd5bfa423cb265306e47b9defa73 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sat, 25 Nov 2017 01:04:49 +0100 Subject: Only look for keys when crypto is enabled --- .../kube/contents/ui/AddresseeListEditor.qml | 1 + framework/src/domain/composercontroller.cpp | 52 +++++++++++++++++----- framework/src/domain/composercontroller.h | 1 + 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/components/kube/contents/ui/AddresseeListEditor.qml b/components/kube/contents/ui/AddresseeListEditor.qml index df09449f..c6149d13 100644 --- a/components/kube/contents/ui/AddresseeListEditor.qml +++ b/components/kube/contents/ui/AddresseeListEditor.qml @@ -75,6 +75,7 @@ FocusScope { } height: Kube.Units.gridUnit width: height + visible: model.keyFound || model.keyMissing iconName: model.keyFound ? Kube.Icons.secure: Kube.Icons.insecure } } diff --git a/framework/src/domain/composercontroller.cpp b/framework/src/domain/composercontroller.cpp index c20c2b0f..59c18cb6 100644 --- a/framework/src/domain/composercontroller.cpp +++ b/framework/src/domain/composercontroller.cpp @@ -90,6 +90,14 @@ public: } }; +static void traverse(const QStandardItemModel *model, const std::function &f) +{ + auto root = model->invisibleRootItem(); + for (int row = 0; row < root->rowCount(); row++) { + f(root->child(row, 0)); + } +} + class AddresseeModel : public QStandardItemModel { public: @@ -98,6 +106,7 @@ public: { setItemRoleNames({{ComposerController::AddresseeNameRole, "addresseeName"}, {ComposerController::KeyFoundRole, "keyFound"}, + {ComposerController::KeyMissingRole, "keyMissing"}, {ComposerController::KeyRole, "key"}}); } @@ -106,18 +115,24 @@ public: auto item = new QStandardItem; item->setData(addressee, ComposerController::AddresseeNameRole); item->setData(false, ComposerController::KeyFoundRole); + item->setData(mCryptoEnabled, ComposerController::KeyMissingRole); appendRow(QList() << item); - findKey(addressee, item); + if (mCryptoEnabled) { + findKey(addressee, item); + } } void findKey(const QString &addressee, QStandardItem *item) { - SinkLog() << "Searching key for: " << addressee; - auto keys = MailCrypto::findKeys(QStringList{} << addressee, false, false, MailCrypto::OPENPGP); + KMime::Types::Mailbox mb; + mb.fromUnicodeString(addressee); + + SinkLog() << "Searching key for: " << mb.address(); + auto keys = MailCrypto::findKeys(QStringList{} << mb.address(), false, false, MailCrypto::OPENPGP); if (keys.empty()) { //Search for key on remote server if it's missing and import //TODO: this is blocking and thus blocks the UI - keys = MailCrypto::findKeys(QStringList{} << addressee, false, true, MailCrypto::OPENPGP); + keys = MailCrypto::findKeys(QStringList{} << mb.address(), false, true, MailCrypto::OPENPGP); MailCrypto::importKeys(keys); } if (item) { @@ -161,11 +176,9 @@ public: std::vector getKeys() { std::vector keys; - auto root = invisibleRootItem(); - for (int row = 0; row < root->rowCount(); row++) { - auto item = root->child(row, 0); + traverse(this, [&] (QStandardItem *item) { keys.push_back(item->data(ComposerController::KeyRole).value()); - } + }); return keys; } @@ -180,13 +193,24 @@ public: QStringList stringList() const { QStringList list; - auto root = invisibleRootItem(); - for (int row = 0; row < root->rowCount(); row++) { - list << root->child(row, 0)->data(ComposerController::AddresseeNameRole).toString(); - } + traverse(this, [&] (QStandardItem *item) { + list << item->data(ComposerController::AddresseeNameRole).toString(); + }); return list; } + void setCryptoEnabled(bool enabled) + { + mCryptoEnabled = enabled; + traverse(this, [&] (QStandardItem *item) { + item->setData(mCryptoEnabled, ComposerController::KeyMissingRole); + if (mCryptoEnabled) { + findKey(item->data(ComposerController::AddresseeNameRole).toString(), item); + } + }); + } + + bool mCryptoEnabled = false; }; @@ -224,6 +248,10 @@ ComposerController::ComposerController() QObject::connect(this, &ComposerController::accountIdChanged, &ComposerController::updateSaveAsDraftAction); QObject::connect(this, &ComposerController::identityChanged, &ComposerController::findPersonalKey); updateSendAction(); + + QObject::connect(this, &ComposerController::encryptChanged, [&] () { mToModel->setCryptoEnabled(getEncrypt()); }); + QObject::connect(this, &ComposerController::encryptChanged, [&] () { mCcModel->setCryptoEnabled(getEncrypt()); }); + QObject::connect(this, &ComposerController::encryptChanged, [&] () { mBccModel->setCryptoEnabled(getEncrypt()); }); } void ComposerController::findPersonalKey() diff --git a/framework/src/domain/composercontroller.h b/framework/src/domain/composercontroller.h index 3a0d4878..00386c5c 100644 --- a/framework/src/domain/composercontroller.h +++ b/framework/src/domain/composercontroller.h @@ -81,6 +81,7 @@ class ComposerController : public Kube::Controller public: enum AddresseeRoles { KeyFoundRole = Qt::UserRole + 1, + KeyMissingRole, KeyRole, AddresseeNameRole }; -- cgit v1.2.3