summaryrefslogtreecommitdiffstats
path: root/framework/src/domain/composercontroller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/domain/composercontroller.cpp')
-rw-r--r--framework/src/domain/composercontroller.cpp53
1 files changed, 52 insertions, 1 deletions
diff --git a/framework/src/domain/composercontroller.cpp b/framework/src/domain/composercontroller.cpp
index fb3857a5..630f9e10 100644
--- a/framework/src/domain/composercontroller.cpp
+++ b/framework/src/domain/composercontroller.cpp
@@ -38,6 +38,8 @@
38#include "mime/mailtemplates.h" 38#include "mime/mailtemplates.h"
39#include "mime/mailcrypto.h" 39#include "mime/mailcrypto.h"
40 40
41Q_DECLARE_METATYPE(GpgME::Key);
42
41class IdentitySelector : public Selector { 43class IdentitySelector : public Selector {
42public: 44public:
43 IdentitySelector(ComposerController &controller) : Selector(new IdentitiesModel), mController(controller) 45 IdentitySelector(ComposerController &controller) : Selector(new IdentitiesModel), mController(controller)
@@ -105,6 +107,18 @@ public:
105 item->setData(addressee, ComposerController::AddresseeNameRole); 107 item->setData(addressee, ComposerController::AddresseeNameRole);
106 item->setData(false, ComposerController::KeyFoundRole); 108 item->setData(false, ComposerController::KeyFoundRole);
107 appendRow(QList<QStandardItem*>() << item); 109 appendRow(QList<QStandardItem*>() << item);
110 findKey(addressee, item);
111 }
112
113 void findKey(const QString &addressee, QStandardItem *item)
114 {
115 auto keys = MailCrypto::findKeys(QStringList{} << addressee, false, MailCrypto::OPENPGP);
116 if (item) {
117 if (!keys.empty()) {
118 item->setData(true, ComposerController::KeyFoundRole);
119 item->setData(QVariant::fromValue(keys.front()), ComposerController::KeyRole);
120 }
121 }
108 } 122 }
109 123
110 void remove(const QString &addressee) 124 void remove(const QString &addressee)
@@ -118,6 +132,30 @@ public:
118 } 132 }
119 } 133 }
120 134
135 bool foundAllKeys()
136 {
137 std::vector<GpgME::Key> keys;
138 auto root = invisibleRootItem();
139 for (int row = 0; row < root->rowCount(); row++) {
140 auto item = root->child(row, 0);
141 if (!item->data(ComposerController::KeyFoundRole).toBool()) {
142 return false;
143 }
144 }
145 return true;
146 }
147
148 std::vector<GpgME::Key> getKeys()
149 {
150 std::vector<GpgME::Key> keys;
151 auto root = invisibleRootItem();
152 for (int row = 0; row < root->rowCount(); row++) {
153 auto item = root->child(row, 0);
154 keys.push_back(item->data(ComposerController::KeyRole).value<GpgME::Key>());
155 }
156 return keys;
157 }
158
121 void setStringList(const QStringList &list) 159 void setStringList(const QStringList &list)
122 { 160 {
123 clear(); 161 clear();
@@ -479,8 +517,21 @@ KMime::Message::Ptr ComposerController::assembleMessage()
479 if (getSign()) { 517 if (getSign()) {
480 signingKeys = mPersonalKeys; 518 signingKeys = mPersonalKeys;
481 } 519 }
520 std::vector<GpgME::Key> encryptionKeys;
521 if (getEncrypt()) {
522 if (!mToModel->foundAllKeys() || !mCcModel->foundAllKeys() || !mBccModel->foundAllKeys()) {
523 qWarning() << "Can't encrypt with missing keys";
524 return nullptr;
525 }
526 auto toKeys = mToModel->getKeys();
527 encryptionKeys.insert(std::end(encryptionKeys), std::begin(toKeys), std::end(toKeys));
528 auto ccKeys = mCcModel->getKeys();
529 encryptionKeys.insert(std::end(encryptionKeys), std::begin(ccKeys), std::end(ccKeys));
530 auto bccKeys = mBccModel->getKeys();
531 encryptionKeys.insert(std::end(encryptionKeys), std::begin(bccKeys), std::end(bccKeys));
532 }
482 533
483 return MailTemplates::createMessage(mExistingMessage, mToModel->stringList(), mCcModel->stringList(), mBccModel->stringList(), getIdentity(), getSubject(), getBody(), getHtmlBody(), attachments, signingKeys); 534 return MailTemplates::createMessage(mExistingMessage, mToModel->stringList(), mCcModel->stringList(), mBccModel->stringList(), getIdentity(), getSubject(), getBody(), getHtmlBody(), attachments, signingKeys, encryptionKeys);
484} 535}
485 536
486void ComposerController::updateSendAction() 537void ComposerController::updateSendAction()