summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2017-11-22 12:39:41 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2017-11-22 16:45:27 +0100
commit70a93ce0d76489db8a3d2245db2b9765f73bb51d (patch)
treee5e3c73da12036d1bf7d8fdb1c0f717b925bddd6
parent8263e3357e898aff3db2f77d83b342060dc5bb3d (diff)
downloadkube-70a93ce0d76489db8a3d2245db2b9765f73bb51d.tar.gz
kube-70a93ce0d76489db8a3d2245db2b9765f73bb51d.zip
Prepping encryption
-rw-r--r--components/kube/contents/ui/AddresseeListEditor.qml28
-rw-r--r--components/kube/contents/ui/ComposerView.qml16
-rw-r--r--framework/qml/Icons.qml2
-rw-r--r--framework/src/domain/composercontroller.cpp107
-rw-r--r--framework/src/domain/composercontroller.h16
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
90class AddresseeModel : public QStandardItemModel
91{
92public:
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
91ComposerController::ComposerController() 141ComposerController::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
136QAbstractItemModel *ComposerController::toModel() const 186QAbstractItemModel *ComposerController::toModel() const
@@ -140,17 +190,13 @@ QAbstractItemModel *ComposerController::toModel() const
140 190
141void ComposerController::addTo(const QString &s) 191void 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
149void ComposerController::removeTo(const QString &s) 197void 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
162void ComposerController::addCc(const QString &s) 208void 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
170void ComposerController::removeCc(const QString &s) 214void 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
183void ComposerController::addBcc(const QString &s) 225void 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
191void ComposerController::removeBcc(const QString &s) 231void 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 {
44class Message; 44class Message;
45} 45}
46 46
47class AddresseeModel;
48
47class ComposerController : public Kube::Controller 49class 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
76public: 80public:
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};