diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-11-22 12:39:41 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2017-11-22 16:45:27 +0100 |
commit | 70a93ce0d76489db8a3d2245db2b9765f73bb51d (patch) | |
tree | e5e3c73da12036d1bf7d8fdb1c0f717b925bddd6 | |
parent | 8263e3357e898aff3db2f77d83b342060dc5bb3d (diff) | |
download | kube-70a93ce0d76489db8a3d2245db2b9765f73bb51d.tar.gz kube-70a93ce0d76489db8a3d2245db2b9765f73bb51d.zip |
Prepping encryption
-rw-r--r-- | components/kube/contents/ui/AddresseeListEditor.qml | 28 | ||||
-rw-r--r-- | components/kube/contents/ui/ComposerView.qml | 16 | ||||
-rw-r--r-- | framework/qml/Icons.qml | 2 | ||||
-rw-r--r-- | framework/src/domain/composercontroller.cpp | 107 | ||||
-rw-r--r-- | framework/src/domain/composercontroller.h | 16 |
5 files changed, 118 insertions, 51 deletions
diff --git a/components/kube/contents/ui/AddresseeListEditor.qml b/components/kube/contents/ui/AddresseeListEditor.qml index adb2f785..91431b1e 100644 --- a/components/kube/contents/ui/AddresseeListEditor.qml +++ b/components/kube/contents/ui/AddresseeListEditor.qml | |||
@@ -52,21 +52,37 @@ FocusScope { | |||
52 | height: Kube.Units.gridUnit + Kube.Units.smallSpacing * 2 //smallSpacing for padding | 52 | height: Kube.Units.gridUnit + Kube.Units.smallSpacing * 2 //smallSpacing for padding |
53 | width: parent.width | 53 | width: parent.width |
54 | color: Kube.Colors.buttonColor | 54 | color: Kube.Colors.buttonColor |
55 | Kube.Label { | 55 | Row { |
56 | anchors { | 56 | anchors { |
57 | top: parent.top | 57 | top: parent.top |
58 | bottom: parent.bottom | ||
58 | left: parent.left | 59 | left: parent.left |
59 | right: button.left | 60 | right: removeButton.left |
60 | margins: Kube.Units.smallSpacing | 61 | margins: Kube.Units.smallSpacing |
61 | } | 62 | } |
62 | text: display | 63 | spacing: Kube.Units.smallSpacing |
63 | elide: Text.ElideRight | 64 | Kube.Label { |
65 | id: label | ||
66 | anchors { | ||
67 | top: parent.top | ||
68 | } | ||
69 | text: model.addresseeName | ||
70 | elide: Text.ElideRight | ||
71 | } | ||
72 | Kube.Icon { | ||
73 | anchors { | ||
74 | top: parent.top | ||
75 | } | ||
76 | height: Kube.Units.gridUnit | ||
77 | width: height | ||
78 | iconName: model.keyFound ? Kube.Icons.secure: Kube.Icons.insecure | ||
79 | } | ||
64 | } | 80 | } |
65 | Kube.IconButton { | 81 | Kube.IconButton { |
66 | id: button | 82 | id: removeButton |
67 | anchors { | 83 | anchors { |
68 | verticalCenter: parent.verticalCenter | ||
69 | right: parent.right | 84 | right: parent.right |
85 | verticalCenter: parent.verticalCenter | ||
70 | margins: Kube.Units.smallSpacing | 86 | margins: Kube.Units.smallSpacing |
71 | } | 87 | } |
72 | height: Kube.Units.gridUnit | 88 | height: Kube.Units.gridUnit |
diff --git a/components/kube/contents/ui/ComposerView.qml b/components/kube/contents/ui/ComposerView.qml index a4796932..29141f28 100644 --- a/components/kube/contents/ui/ComposerView.qml +++ b/components/kube/contents/ui/ComposerView.qml | |||
@@ -42,6 +42,8 @@ Kube.View { | |||
42 | Kube.ComposerController { | 42 | Kube.ComposerController { |
43 | id: composerController | 43 | id: composerController |
44 | htmlBody: html.checked | 44 | htmlBody: html.checked |
45 | sign: signCheckbox.checked | ||
46 | encrypt: encryptCheckbox.checked | ||
45 | onDone: Kube.Fabric.postMessage(Kube.Messages.componentDone, {}) | 47 | onDone: Kube.Fabric.postMessage(Kube.Messages.componentDone, {}) |
46 | } | 48 | } |
47 | ] | 49 | ] |
@@ -443,18 +445,20 @@ Kube.View { | |||
443 | } | 445 | } |
444 | 446 | ||
445 | RowLayout { | 447 | RowLayout { |
446 | //FIXME: hide until it does something | 448 | Kube.CheckBox { |
447 | visible: false | 449 | id: encryptCheckbox |
448 | Kube.CheckBox {} | 450 | checked: composerController.encrypt |
451 | } | ||
449 | Kube.Label { | 452 | Kube.Label { |
450 | text: qsTr("encrypt") | 453 | text: qsTr("encrypt") |
451 | } | 454 | } |
452 | } | 455 | } |
453 | 456 | ||
454 | RowLayout { | 457 | RowLayout { |
455 | //FIXME: hide until it does something | 458 | Kube.CheckBox { |
456 | visible: false | 459 | id: signCheckbox |
457 | Kube.CheckBox {} | 460 | checked: composerController.sign |
461 | } | ||
458 | Kube.Label { | 462 | Kube.Label { |
459 | text: qsTr("sign") | 463 | text: qsTr("sign") |
460 | } | 464 | } |
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 { | |||
58 | property string checkbox: "checkbox" | 58 | property string checkbox: "checkbox" |
59 | property string password_show: "password-show-on" | 59 | property string password_show: "password-show-on" |
60 | property string password_hide: "password-show-off" | 60 | property string password_hide: "password-show-off" |
61 | property string secure: "document-encrypt" | ||
62 | property string insecure: "document-decrypt" | ||
61 | 63 | ||
62 | property string addNew: "list-add" | 64 | property string addNew: "list-add" |
63 | property string remove: "kube-list-remove-inverted" | 65 | 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: | |||
87 | } | 87 | } |
88 | }; | 88 | }; |
89 | 89 | ||
90 | class AddresseeModel : public QStandardItemModel | ||
91 | { | ||
92 | public: | ||
93 | AddresseeModel() | ||
94 | :QStandardItemModel() | ||
95 | { | ||
96 | setItemRoleNames({{ComposerController::AddresseeNameRole, "addresseeName"}, | ||
97 | {ComposerController::KeyFoundRole, "keyFound"}, | ||
98 | {ComposerController::KeyRole, "key"}}); | ||
99 | } | ||
100 | |||
101 | void add(const QString &addressee) | ||
102 | { | ||
103 | auto item = new QStandardItem; | ||
104 | item->setData(addressee, ComposerController::AddresseeNameRole); | ||
105 | item->setData(false, ComposerController::KeyFoundRole); | ||
106 | appendRow(QList<QStandardItem*>() << item); | ||
107 | } | ||
108 | |||
109 | void remove(const QString &addressee) | ||
110 | { | ||
111 | auto root = invisibleRootItem(); | ||
112 | for (int row = 0; row < root->rowCount(); row++) { | ||
113 | if (root->child(row, 0)->data(ComposerController::AddresseeNameRole).toString() == addressee) { | ||
114 | root->removeRow(row); | ||
115 | return; | ||
116 | } | ||
117 | } | ||
118 | } | ||
119 | |||
120 | void setStringList(const QStringList &list) | ||
121 | { | ||
122 | clear(); | ||
123 | for (const auto &s : list) { | ||
124 | add(s); | ||
125 | } | ||
126 | } | ||
127 | |||
128 | QStringList stringList() const | ||
129 | { | ||
130 | QStringList list; | ||
131 | auto root = invisibleRootItem(); | ||
132 | for (int row = 0; row < root->rowCount(); row++) { | ||
133 | list << root->child(row, 0)->data(ComposerController::AddresseeNameRole).toString(); | ||
134 | } | ||
135 | return list; | ||
136 | } | ||
137 | |||
138 | }; | ||
139 | |||
90 | 140 | ||
91 | ComposerController::ComposerController() | 141 | ComposerController::ComposerController() |
92 | : Kube::Controller(), | 142 | : Kube::Controller(), |
@@ -94,9 +144,9 @@ ComposerController::ComposerController() | |||
94 | action_saveAsDraft{new Kube::ControllerAction{this, &ComposerController::saveAsDraft}}, | 144 | action_saveAsDraft{new Kube::ControllerAction{this, &ComposerController::saveAsDraft}}, |
95 | mRecipientCompleter{new RecipientCompleter}, | 145 | mRecipientCompleter{new RecipientCompleter}, |
96 | mIdentitySelector{new IdentitySelector{*this}}, | 146 | mIdentitySelector{new IdentitySelector{*this}}, |
97 | mToModel{new QStringListModel}, | 147 | mToModel{new AddresseeModel}, |
98 | mCcModel{new QStringListModel}, | 148 | mCcModel{new AddresseeModel}, |
99 | mBccModel{new QStringListModel}, | 149 | mBccModel{new AddresseeModel}, |
100 | mAttachmentModel{new QStandardItemModel} | 150 | mAttachmentModel{new QStandardItemModel} |
101 | { | 151 | { |
102 | mAttachmentModel->setItemRoleNames({{NameRole, "name"}, | 152 | mAttachmentModel->setItemRoleNames({{NameRole, "name"}, |
@@ -128,9 +178,9 @@ void ComposerController::clear() | |||
128 | Controller::clear(); | 178 | Controller::clear(); |
129 | //Reapply account and identity from selection | 179 | //Reapply account and identity from selection |
130 | mIdentitySelector->reapplyCurrentIndex(); | 180 | mIdentitySelector->reapplyCurrentIndex(); |
131 | mToModel->setStringList({}); | 181 | mToModel->clear(); |
132 | mCcModel->setStringList({}); | 182 | mCcModel->clear(); |
133 | mBccModel->setStringList({}); | 183 | mBccModel->clear(); |
134 | } | 184 | } |
135 | 185 | ||
136 | QAbstractItemModel *ComposerController::toModel() const | 186 | QAbstractItemModel *ComposerController::toModel() const |
@@ -140,17 +190,13 @@ QAbstractItemModel *ComposerController::toModel() const | |||
140 | 190 | ||
141 | void ComposerController::addTo(const QString &s) | 191 | void ComposerController::addTo(const QString &s) |
142 | { | 192 | { |
143 | auto list = mToModel->stringList(); | 193 | mToModel->add(s); |
144 | list.append(s); | ||
145 | mToModel->setStringList(list); | ||
146 | updateSendAction(); | 194 | updateSendAction(); |
147 | } | 195 | } |
148 | 196 | ||
149 | void ComposerController::removeTo(const QString &s) | 197 | void ComposerController::removeTo(const QString &s) |
150 | { | 198 | { |
151 | auto list = mToModel->stringList(); | 199 | mToModel->remove(s); |
152 | list.removeAll(s); | ||
153 | mToModel->setStringList(list); | ||
154 | updateSendAction(); | 200 | updateSendAction(); |
155 | } | 201 | } |
156 | 202 | ||
@@ -161,17 +207,13 @@ QAbstractItemModel *ComposerController::ccModel() const | |||
161 | 207 | ||
162 | void ComposerController::addCc(const QString &s) | 208 | void ComposerController::addCc(const QString &s) |
163 | { | 209 | { |
164 | auto list = mCcModel->stringList(); | 210 | mCcModel->add(s); |
165 | list.append(s); | ||
166 | mCcModel->setStringList(list); | ||
167 | updateSendAction(); | 211 | updateSendAction(); |
168 | } | 212 | } |
169 | 213 | ||
170 | void ComposerController::removeCc(const QString &s) | 214 | void ComposerController::removeCc(const QString &s) |
171 | { | 215 | { |
172 | auto list = mCcModel->stringList(); | 216 | mCcModel->remove(s); |
173 | list.removeAll(s); | ||
174 | mCcModel->setStringList(list); | ||
175 | updateSendAction(); | 217 | updateSendAction(); |
176 | } | 218 | } |
177 | 219 | ||
@@ -182,17 +224,13 @@ QAbstractItemModel *ComposerController::bccModel() const | |||
182 | 224 | ||
183 | void ComposerController::addBcc(const QString &s) | 225 | void ComposerController::addBcc(const QString &s) |
184 | { | 226 | { |
185 | auto list = mBccModel->stringList(); | 227 | mBccModel->add(s); |
186 | list.append(s); | ||
187 | mBccModel->setStringList(list); | ||
188 | updateSendAction(); | 228 | updateSendAction(); |
189 | } | 229 | } |
190 | 230 | ||
191 | void ComposerController::removeBcc(const QString &s) | 231 | void ComposerController::removeBcc(const QString &s) |
192 | { | 232 | { |
193 | auto list = mBccModel->stringList(); | 233 | mBccModel->remove(s); |
194 | list.removeAll(s); | ||
195 | mBccModel->setStringList(list); | ||
196 | updateSendAction(); | 234 | updateSendAction(); |
197 | } | 235 | } |
198 | 236 | ||
@@ -239,7 +277,6 @@ void ComposerController::removeAttachment(const QUrl &url) | |||
239 | if (root->hasChildren()) { | 277 | if (root->hasChildren()) { |
240 | for (int row = 0; row < root->rowCount(); row++) { | 278 | for (int row = 0; row < root->rowCount(); row++) { |
241 | auto item = root->child(row, 0); | 279 | auto item = root->child(row, 0); |
242 | const auto url = item->data(UrlRole).toUrl(); | ||
243 | if (url == item->data(UrlRole).toUrl()) { | 280 | if (url == item->data(UrlRole).toUrl()) { |
244 | root->removeRow(row); | 281 | root->removeRow(row); |
245 | return; | 282 | return; |
@@ -418,17 +455,15 @@ KMime::Message::Ptr ComposerController::assembleMessage() | |||
418 | 455 | ||
419 | QList<Attachment> attachments; | 456 | QList<Attachment> attachments; |
420 | auto root = mAttachmentModel->invisibleRootItem(); | 457 | auto root = mAttachmentModel->invisibleRootItem(); |
421 | if (root->hasChildren()) { | 458 | for (int row = 0; row < root->rowCount(); row++) { |
422 | for (int row = 0; row < root->rowCount(); row++) { | 459 | auto item = root->child(row, 0); |
423 | auto item = root->child(row, 0); | 460 | attachments << Attachment{ |
424 | attachments << Attachment{ | 461 | item->data(NameRole).toString(), |
425 | item->data(NameRole).toString(), | 462 | item->data(FilenameRole).toString(), |
426 | item->data(FilenameRole).toString(), | 463 | item->data(MimeTypeRole).toByteArray(), |
427 | item->data(MimeTypeRole).toByteArray(), | 464 | item->data(InlineRole).toBool(), |
428 | item->data(InlineRole).toBool(), | 465 | item->data(ContentRole).toByteArray() |
429 | item->data(ContentRole).toByteArray() | 466 | }; |
430 | }; | ||
431 | } | ||
432 | } | 467 | } |
433 | return MailTemplates::createMessage(mExistingMessage, mToModel->stringList(), mCcModel->stringList(), mBccModel->stringList(), getIdentity(), getSubject(), getBody(), getHtmlBody(), attachments); | 468 | return MailTemplates::createMessage(mExistingMessage, mToModel->stringList(), mCcModel->stringList(), mBccModel->stringList(), getIdentity(), getSubject(), getBody(), getHtmlBody(), attachments); |
434 | } | 469 | } |
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 { | |||
44 | class Message; | 44 | class Message; |
45 | } | 45 | } |
46 | 46 | ||
47 | class AddresseeModel; | ||
48 | |||
47 | class ComposerController : public Kube::Controller | 49 | class ComposerController : public Kube::Controller |
48 | { | 50 | { |
49 | Q_OBJECT | 51 | Q_OBJECT |
@@ -52,6 +54,8 @@ class ComposerController : public Kube::Controller | |||
52 | KUBE_CONTROLLER_PROPERTY(QString, Subject, subject) | 54 | KUBE_CONTROLLER_PROPERTY(QString, Subject, subject) |
53 | KUBE_CONTROLLER_PROPERTY(QString, Body, body) | 55 | KUBE_CONTROLLER_PROPERTY(QString, Body, body) |
54 | KUBE_CONTROLLER_PROPERTY(bool, HtmlBody, htmlBody) | 56 | KUBE_CONTROLLER_PROPERTY(bool, HtmlBody, htmlBody) |
57 | KUBE_CONTROLLER_PROPERTY(bool, Encrypt, encrypt) | ||
58 | KUBE_CONTROLLER_PROPERTY(bool, Sign, sign) | ||
55 | 59 | ||
56 | //Set by identitySelector | 60 | //Set by identitySelector |
57 | KUBE_CONTROLLER_PROPERTY(KMime::Types::Mailbox, Identity, identity) | 61 | KUBE_CONTROLLER_PROPERTY(KMime::Types::Mailbox, Identity, identity) |
@@ -74,6 +78,12 @@ class ComposerController : public Kube::Controller | |||
74 | KUBE_CONTROLLER_ACTION(saveAsDraft) | 78 | KUBE_CONTROLLER_ACTION(saveAsDraft) |
75 | 79 | ||
76 | public: | 80 | public: |
81 | enum AddresseeRoles { | ||
82 | KeyFoundRole = Qt::UserRole + 1, | ||
83 | KeyRole, | ||
84 | AddresseeNameRole | ||
85 | }; | ||
86 | |||
77 | explicit ComposerController(); | 87 | explicit ComposerController(); |
78 | 88 | ||
79 | Completer *recipientCompleter() const; | 89 | Completer *recipientCompleter() const; |
@@ -121,8 +131,8 @@ private: | |||
121 | 131 | ||
122 | QScopedPointer<Completer> mRecipientCompleter; | 132 | QScopedPointer<Completer> mRecipientCompleter; |
123 | QScopedPointer<Selector> mIdentitySelector; | 133 | QScopedPointer<Selector> mIdentitySelector; |
124 | QScopedPointer<QStringListModel> mToModel; | 134 | QSharedPointer<AddresseeModel> mToModel; |
125 | QScopedPointer<QStringListModel> mCcModel; | 135 | QSharedPointer<AddresseeModel> mCcModel; |
126 | QScopedPointer<QStringListModel> mBccModel; | 136 | QSharedPointer<AddresseeModel> mBccModel; |
127 | QScopedPointer<QStandardItemModel> mAttachmentModel; | 137 | QScopedPointer<QStandardItemModel> mAttachmentModel; |
128 | }; | 138 | }; |