From 70a93ce0d76489db8a3d2245db2b9765f73bb51d Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 22 Nov 2017 12:39:41 +0100 Subject: Prepping encryption --- framework/qml/Icons.qml | 2 + framework/src/domain/composercontroller.cpp | 107 ++++++++++++++++++---------- framework/src/domain/composercontroller.h | 16 ++++- 3 files changed, 86 insertions(+), 39 deletions(-) (limited to 'framework') diff --git a/framework/qml/Icons.qml b/framework/qml/Icons.qml index 8cb28e86..6ecc069c 100644 --- a/framework/qml/Icons.qml +++ b/framework/qml/Icons.qml @@ -58,6 +58,8 @@ Item { property string checkbox: "checkbox" property string password_show: "password-show-on" property string password_hide: "password-show-off" + property string secure: "document-encrypt" + property string insecure: "document-decrypt" property string addNew: "list-add" property string remove: "kube-list-remove-inverted" diff --git a/framework/src/domain/composercontroller.cpp b/framework/src/domain/composercontroller.cpp index 258c25d5..2a82f0e1 100644 --- a/framework/src/domain/composercontroller.cpp +++ b/framework/src/domain/composercontroller.cpp @@ -87,6 +87,56 @@ public: } }; +class AddresseeModel : public QStandardItemModel +{ +public: + AddresseeModel() + :QStandardItemModel() + { + setItemRoleNames({{ComposerController::AddresseeNameRole, "addresseeName"}, + {ComposerController::KeyFoundRole, "keyFound"}, + {ComposerController::KeyRole, "key"}}); + } + + void add(const QString &addressee) + { + auto item = new QStandardItem; + item->setData(addressee, ComposerController::AddresseeNameRole); + item->setData(false, ComposerController::KeyFoundRole); + appendRow(QList() << item); + } + + void remove(const QString &addressee) + { + auto root = invisibleRootItem(); + for (int row = 0; row < root->rowCount(); row++) { + if (root->child(row, 0)->data(ComposerController::AddresseeNameRole).toString() == addressee) { + root->removeRow(row); + return; + } + } + } + + void setStringList(const QStringList &list) + { + clear(); + for (const auto &s : list) { + add(s); + } + } + + 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(); + } + return list; + } + +}; + ComposerController::ComposerController() : Kube::Controller(), @@ -94,9 +144,9 @@ ComposerController::ComposerController() action_saveAsDraft{new Kube::ControllerAction{this, &ComposerController::saveAsDraft}}, mRecipientCompleter{new RecipientCompleter}, mIdentitySelector{new IdentitySelector{*this}}, - mToModel{new QStringListModel}, - mCcModel{new QStringListModel}, - mBccModel{new QStringListModel}, + mToModel{new AddresseeModel}, + mCcModel{new AddresseeModel}, + mBccModel{new AddresseeModel}, mAttachmentModel{new QStandardItemModel} { mAttachmentModel->setItemRoleNames({{NameRole, "name"}, @@ -128,9 +178,9 @@ void ComposerController::clear() Controller::clear(); //Reapply account and identity from selection mIdentitySelector->reapplyCurrentIndex(); - mToModel->setStringList({}); - mCcModel->setStringList({}); - mBccModel->setStringList({}); + mToModel->clear(); + mCcModel->clear(); + mBccModel->clear(); } QAbstractItemModel *ComposerController::toModel() const @@ -140,17 +190,13 @@ QAbstractItemModel *ComposerController::toModel() const void ComposerController::addTo(const QString &s) { - auto list = mToModel->stringList(); - list.append(s); - mToModel->setStringList(list); + mToModel->add(s); updateSendAction(); } void ComposerController::removeTo(const QString &s) { - auto list = mToModel->stringList(); - list.removeAll(s); - mToModel->setStringList(list); + mToModel->remove(s); updateSendAction(); } @@ -161,17 +207,13 @@ QAbstractItemModel *ComposerController::ccModel() const void ComposerController::addCc(const QString &s) { - auto list = mCcModel->stringList(); - list.append(s); - mCcModel->setStringList(list); + mCcModel->add(s); updateSendAction(); } void ComposerController::removeCc(const QString &s) { - auto list = mCcModel->stringList(); - list.removeAll(s); - mCcModel->setStringList(list); + mCcModel->remove(s); updateSendAction(); } @@ -182,17 +224,13 @@ QAbstractItemModel *ComposerController::bccModel() const void ComposerController::addBcc(const QString &s) { - auto list = mBccModel->stringList(); - list.append(s); - mBccModel->setStringList(list); + mBccModel->add(s); updateSendAction(); } void ComposerController::removeBcc(const QString &s) { - auto list = mBccModel->stringList(); - list.removeAll(s); - mBccModel->setStringList(list); + mBccModel->remove(s); updateSendAction(); } @@ -239,7 +277,6 @@ void ComposerController::removeAttachment(const QUrl &url) if (root->hasChildren()) { for (int row = 0; row < root->rowCount(); row++) { auto item = root->child(row, 0); - const auto url = item->data(UrlRole).toUrl(); if (url == item->data(UrlRole).toUrl()) { root->removeRow(row); return; @@ -418,17 +455,15 @@ KMime::Message::Ptr ComposerController::assembleMessage() QList attachments; auto root = mAttachmentModel->invisibleRootItem(); - if (root->hasChildren()) { - for (int row = 0; row < root->rowCount(); row++) { - auto item = root->child(row, 0); - attachments << Attachment{ - item->data(NameRole).toString(), - item->data(FilenameRole).toString(), - item->data(MimeTypeRole).toByteArray(), - item->data(InlineRole).toBool(), - item->data(ContentRole).toByteArray() - }; - } + for (int row = 0; row < root->rowCount(); row++) { + auto item = root->child(row, 0); + attachments << Attachment{ + item->data(NameRole).toString(), + item->data(FilenameRole).toString(), + item->data(MimeTypeRole).toByteArray(), + item->data(InlineRole).toBool(), + item->data(ContentRole).toByteArray() + }; } return MailTemplates::createMessage(mExistingMessage, mToModel->stringList(), mCcModel->stringList(), mBccModel->stringList(), getIdentity(), getSubject(), getBody(), getHtmlBody(), attachments); } diff --git a/framework/src/domain/composercontroller.h b/framework/src/domain/composercontroller.h index 784591eb..1a355b9a 100644 --- a/framework/src/domain/composercontroller.h +++ b/framework/src/domain/composercontroller.h @@ -44,6 +44,8 @@ namespace KMime { class Message; } +class AddresseeModel; + class ComposerController : public Kube::Controller { Q_OBJECT @@ -52,6 +54,8 @@ class ComposerController : public Kube::Controller KUBE_CONTROLLER_PROPERTY(QString, Subject, subject) KUBE_CONTROLLER_PROPERTY(QString, Body, body) KUBE_CONTROLLER_PROPERTY(bool, HtmlBody, htmlBody) + KUBE_CONTROLLER_PROPERTY(bool, Encrypt, encrypt) + KUBE_CONTROLLER_PROPERTY(bool, Sign, sign) //Set by identitySelector KUBE_CONTROLLER_PROPERTY(KMime::Types::Mailbox, Identity, identity) @@ -74,6 +78,12 @@ class ComposerController : public Kube::Controller KUBE_CONTROLLER_ACTION(saveAsDraft) public: + enum AddresseeRoles { + KeyFoundRole = Qt::UserRole + 1, + KeyRole, + AddresseeNameRole + }; + explicit ComposerController(); Completer *recipientCompleter() const; @@ -121,8 +131,8 @@ private: QScopedPointer mRecipientCompleter; QScopedPointer mIdentitySelector; - QScopedPointer mToModel; - QScopedPointer mCcModel; - QScopedPointer mBccModel; + QSharedPointer mToModel; + QSharedPointer mCcModel; + QSharedPointer mBccModel; QScopedPointer mAttachmentModel; }; -- cgit v1.2.3