From f6e8b7ff01c7de0a7b7613bf46b51adf3a8a59a1 Mon Sep 17 00:00:00 2001 From: Minijackson Date: Thu, 1 Mar 2018 11:13:22 +0100 Subject: Add key import --- framework/qml/AttachmentDelegate.qml | 10 + framework/qml/Icons.qml | 1 + framework/qml/MailViewer.qml | 2 + framework/src/domain/mime/attachmentmodel.cpp | 35 ++++ framework/src/domain/mime/attachmentmodel.h | 2 + .../mime/testdata/openpgp-pkey-attachment.mbox | 210 +++++++++++++++++++++ .../22/view-certificate-import-inverted.svg | 14 ++ .../icons/actions/22/view-certificate-import.svg | 14 ++ .../24/view-certificate-import-inverted.svg | 13 ++ .../icons/actions/24/view-certificate-import.svg | 13 ++ icons/copybreeze.sh | 1 + views/conversation/main.qml | 17 +- 12 files changed, 331 insertions(+), 1 deletion(-) create mode 100644 framework/src/domain/mime/testdata/openpgp-pkey-attachment.mbox create mode 100644 icons/breeze/icons/actions/22/view-certificate-import-inverted.svg create mode 100644 icons/breeze/icons/actions/22/view-certificate-import.svg create mode 100644 icons/breeze/icons/actions/24/view-certificate-import-inverted.svg create mode 100644 icons/breeze/icons/actions/24/view-certificate-import.svg diff --git a/framework/qml/AttachmentDelegate.qml b/framework/qml/AttachmentDelegate.qml index 3c308e65..4469cbdd 100644 --- a/framework/qml/AttachmentDelegate.qml +++ b/framework/qml/AttachmentDelegate.qml @@ -23,10 +23,12 @@ Item { id: root property string name + property string type property string icon property alias actionIcon: actionButton.iconName signal clicked; signal execute; + signal publicKeyImport; width: content.width + Kube.Units.smallSpacing * 1.5 height: content.height + Kube.Units.smallSpacing @@ -69,6 +71,14 @@ Item { text: root.name color: Kube.Colors.backgroundColor } + Kube.IconButton { + visible: root.type == "application/pgp-keys" + iconName: Kube.Icons.key_import_inverted + height: Kube.Units.gridUnit + width: height + onClicked: root.publicKeyImport() + padding: 0 + } Kube.IconButton { id: actionButton height: Kube.Units.gridUnit diff --git a/framework/qml/Icons.qml b/framework/qml/Icons.qml index 2afe840e..4dfae3d7 100644 --- a/framework/qml/Icons.qml +++ b/framework/qml/Icons.qml @@ -63,6 +63,7 @@ Item { property string secure: "document-encrypt" property string insecure: "document-decrypt" property string signed: "document-sign" + property string key_import_inverted: "view-certificate-import-inverted" property string addNew: "list-add" property string remove: "kube-list-remove-inverted" diff --git a/framework/qml/MailViewer.qml b/framework/qml/MailViewer.qml index 565adedd..e9ffd108 100644 --- a/framework/qml/MailViewer.qml +++ b/framework/qml/MailViewer.qml @@ -283,6 +283,7 @@ Rectangle { delegate: AttachmentDelegate { name: model.name + type: model.type icon: model.iconName clip: true @@ -290,6 +291,7 @@ Rectangle { actionIcon: Kube.Icons.save_inverted onExecute: messageParser.attachments.saveAttachmentToDisk(messageParser.attachments.index(index, 0)) onClicked: messageParser.attachments.openAttachment(messageParser.attachments.index(index, 0)) + onPublicKeyImport: messageParser.attachments.importPublicKey(messageParser.attachments.index(index, 0)) } } } diff --git a/framework/src/domain/mime/attachmentmodel.cpp b/framework/src/domain/mime/attachmentmodel.cpp index 2eb2cc13..8b12679b 100644 --- a/framework/src/domain/mime/attachmentmodel.cpp +++ b/framework/src/domain/mime/attachmentmodel.cpp @@ -32,6 +32,11 @@ #include #include +#include +#include + +#include + QString sizeHuman(float size) { QStringList list; @@ -210,6 +215,36 @@ bool AttachmentModel::openAttachment(const QModelIndex &index) return false; } +bool AttachmentModel::importPublicKey(const QModelIndex &index) +{ + Q_ASSERT(index.internalPointer()); + const auto part = static_cast(index.internalPointer()); + Q_ASSERT(part); + auto pkey = part->node()->decodedContent(); + + const auto *proto = QGpgME::openpgp(); + std::unique_ptr job(proto->importJob()); + auto result = job->exec(pkey); + + bool success = true; + + QString message; + if(result.numConsidered() == 0) { + message = tr("No keys were found in this attachment"); + success = false; + } else { + message = tr("%n Key(s) imported", "", result.numImported()); + if(result.numUnchanged() != 0) { + message += "\n" + tr("%n Key(s) were already imported", "", result.numUnchanged()); + } + } + + Kube::Fabric::Fabric{}.postMessage("notification", + {{"message", message}}); + + return success; +} + QModelIndex AttachmentModel::parent(const QModelIndex &) const { return QModelIndex(); diff --git a/framework/src/domain/mime/attachmentmodel.h b/framework/src/domain/mime/attachmentmodel.h index 93ba8d02..d599b1f0 100644 --- a/framework/src/domain/mime/attachmentmodel.h +++ b/framework/src/domain/mime/attachmentmodel.h @@ -56,6 +56,8 @@ public: Q_INVOKABLE bool saveAttachmentToDisk(const QModelIndex &parent); Q_INVOKABLE bool openAttachment(const QModelIndex &index); + Q_INVOKABLE bool importPublicKey(const QModelIndex &index); + private: std::unique_ptr d; }; diff --git a/framework/src/domain/mime/testdata/openpgp-pkey-attachment.mbox b/framework/src/domain/mime/testdata/openpgp-pkey-attachment.mbox new file mode 100644 index 00000000..aa8bb3e9 --- /dev/null +++ b/framework/src/domain/mime/testdata/openpgp-pkey-attachment.mbox @@ -0,0 +1,210 @@ +From test@example.com Wed Feb 28 10:49:49 2018 +Message-ID: <1519811389.16313.1.camel@example.local> +Subject: Key import +From: test +To: you@you.com +Content-Type: multipart/mixed; boundary="=-JKkHmrzBpdm/vidMcYH8" +Date: Wed, 28 Feb 2018 10:49:49 +0100 +Mime-Version: 1.0 + + +--=-JKkHmrzBpdm/vidMcYH8 +Content-Type: text/plain +Content-Transfer-Encoding: 8bit + +A very random message. + +--=-JKkHmrzBpdm/vidMcYH8 +Content-Type: application/pgp-keys; name="319683D39A1B4DE13DC251FDFEA888C9F5D64F62.asc" +Content-Disposition: attachment; filename="319683D39A1B4DE13DC251FDFEA888C9F5D64F62.asc" +Content-Transfer-Encoding: base64 + +LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgptUUVOQkZJTTg3MEJDQUN6RlEy +dXhXdlIvTDhtaVFldjBaaU5CVFRWSUdpcmVpWXhyTjZQdk1MTGJWd05hUUROClFyZDQ3aldoS1N1 +dkFjRE1BZ3AwSnNUYmptUjdNZDdKZk02bmg5czJwMUd1UHVkTzJmTk43TWlVTTZGWjV4RXUKaFN4 +Y243WjBidHVPMnFLNnJsaURBWmRwZ2wvK1RVWTlxRG1iTHJBSUdLNDZ5eEtzQ0JzQUdKeVRQMzZ1 +eUdlOQp1UjhHRGJ3U3gxNklXVnBnR1RwRDhoUHNVSU1OT2N3cm9sckJmeXRVd2EzZXdRS2hVL01q +WXFFQmRyR3RWRVFGCk9JeUZWK0dRRWRVSTZmTnVialQ4eUcwbFkwSkZkdlhMejZEelhtVXUzc1d1 +bjByTTJYMEtyclg1VzVrRzVhczIKUjNPUkNDc0JyOGM0a0UvWTBuMDVmRTArVHRtUnFzbm10aUVw +QUJFQkFBRzBKRzFwYm1scVlXTnJjMjl1SUR4dAphVzVwYW1GamEzTnZia0J5YVhObGRYQXVibVYw +UG9rQlFRUVRBUUlBS3dJYkl3VUpDV1lCZ0FZTENRZ0hBd0lHCkZRZ0NDUW9MQkJZQ0F3RUNIZ0VD +RjRBRkFsSVF3Nk1DR1FFQUNna1EvcWlJeWZYV1QySnord2Y5SDNWTGorVGIKQU9YWFdPTEd3RWds +QTdyZHVaakd6bGE5YUovRW00eTltUVZjVUxIVkZZWGtKRDZ0cmRtNzQ2bzd4dFpsU3JzSQpVNS8y +cy9mS0lwRjVha3M5bk04a0pkV3JsNnRIcUxPcFphNHFWOFYxRkFkZzhPR1YxQ21abStMMGFzV1RV +cUxLCmtVMm5BT3dwUnNBRHNySFUvcjVSWjErRXJERnFGU0xHbkFFOWZoY004OE43bkJBUGQrTWtl +T1lvOTN0NWMzVmEKN2gxSmNuck4wV2luRldwY3l0aEdZL0sxVFFIQ25GZGJrRmlBaVJZRUFLcm9k +Z3p3MURmZ0V3MXZuRXRNeG0xcQowMGJkaldETDhITXJacEI3cUcvYVMzQkJseXNJQnVheEVqWjNq +VWtHV3plSEF2c3I3NGdvTEprclRHeWpmUEd0CjhUa2xlMktqVjN0TEs0aGVCQkFSQ0FBR0JRSlZ0 +cC9tQUFvSkVLdFBlK20rclI0ODZ6WUEvaXoxbGdOZC9IcUcKbVN2YUdKaGtpWjJhYjN0WWFwakFk +KzlGdFpqYnh0Z29BUDBkanlodlF6Rm5DaHZyelRFZ25NemNoUWV0aUFTWApaRThpZlVDZG1nZEx0 +SWtFSEFRUUFRZ0FCZ1VDV0tvZld3QUtDUkNheU1mNThUVXNIbzZvSC8wZlZENktDRmxDClhueC9a +czA2eG5IOGF1dllzbitpRGl2MENsV1VEcmtPby94cnczODVaUE1pa25EZW5xUjczUmt6QXU5a0F2 +Z2MKYTNIcmhPNzh6OENLdWpvMmpXT20zTDVoYjQ5MDZlR1pyK2MzcDZkUEdMK01OSUhTNHltVW5Y +M0gyd1phWVN5dgo0YWdiYTVnUFE1ZDdmblhJeitKYnUyTHMwd3d6bXNqSmd5WitxNE96d3Zzdkw3 +UDdGRWNxbzVNNWY4QlV0TFJnCmVxTVFDNU1GUGJ1MVpCa2FsSkRQRFBtZ0RUT25rdlJzVmxtam1S +NGZwUFN1ZGNkcG1uTGMrQ2orcWFjRVVuSDEKcHFMcFZDbzROV1hpb1NiMUVxbDltUmFMdGVxd3Z5 +endVYnNzNUV4OGptWmg3bmU0dFJPd0lKWjRMaGJIaEtqNwpEMDEvM1Y4UENXVXRkUVk5VC9RT1RY +NUl3MmhSU1pXYmN5M2tqejVEOFl1WnUyeVdsUHIyYi8yaTJrdjlrRjdGCndCcUNZL01xckZqTmxa +Y3psWUZMY3JKU0oreWZRU3dMaVc5NGRwYzNwRHY2UVJ0VDhFbHFnMnluMHlKenFrNDgKQURhczBM +Y3l5U0dEUThROXU0aVJEeTd4aTVGUEdnRDFmdWVEYmVVb09EUTVrczMrdXFnRTNiaVA2SlNHbHpt +ZwpwS3JqTkdxTzB6eitpakhIb1IxRnhYTG5mZ0FBaUpwcmlTM3N0emY0blA1ekkrak5OOHJmZFJS +OWMrcUlXaDFiCnJsZS9hZzYvWlNINTNYdTAvR3g5aXliQjJGR1QxMmN2ekJsRjNCbXJhRVdJRUtt +bktESzVGeTdJM21ISUZPOTAKcjhiaXBiN21iZ0MyWFVTOEJldW9vTS9XZDRCNkdUVVJQUVFJRlhu +ZWRRL3dNVTBrMFlyekdIMFRyU0xSdkVlegpMdUQwTnFVZmRVeS9kSFNkc3BtZndrOUtrYlhITHkv +V1NHL29SU2NlZjZjcEFWLzJmM0RlUUF2VWxqSm9ZMTIyCi8xS05MUS96aGJtUlk4Ynd2SksxYjh0 +KzdmY1IwZitDdlFrQ1NNeDM3NXIxUlhJclRVMkd1KzlYM3JIUVRkcXYKb25oQ0t1SWNmY3U1SWp2 +QUZ5NG83TWdDaWt5ck95UVlNNG0zaW1rZHNza3grMjNFcVQvWXpoVzNlK1Z0ZFl2Lwp6VjRna3ZT +K2F1UWoxN3I5Szdudng5TmhsYVVpZkk2V0lBd3dVU2t2VVcwRm0yQUFyOVAyYnJoU1lMdG51Q2ph +CmpLOUxyTDFCanlXM3M4V3dXRWdrdktaRmdWRjhoNVFMeUpVSE83NjlQMVRSaTV4M0JnTjE0c2Nr +Ym9iWk5QOVgKdE5Wcit0WUVvVXB1MVhJS2dDVEpTSmhDUldTZkxsa1crQTljTFN4NS9Zbk5YSlhY +a0tmNWdUSURlTFpsV0wyQwp0WEVtWjc2UkF4Z25pQTAySVJGOHNweUdEUWphdHFCZWE3TG5mNVJl +TVFwQTdhVnVhUFFQZXpMTUZvSWtrb0tuCmdkRzNhRXUwM0NLMW0zM0dtclc5bVp1YXVCRTVmaXpH +OXRVb0ZYRHVMMTJ6V2YvMVAxdVA2SEh3ZlpzbncrYVoKWm5PZEYvVlhob1o0RjFqWG5vdnlxYUIr +VlF3a09ZTDdNK2pRNjJwNk5uSjVxRlhUV0VTanQzUkV3WjJKaGhVTApreDN0L2lJSFIzMURBQWtU +VXN6NVJWeDB4dHY4QUxLNWNKYWcxaTc2UWpOYTc1WjNXd0xybnQxd0hKcjBNZEh5CjdkbU96NjVR +cThQcHRDUnRhVzVwYW1GamEzTnZiaUE4YldsdWFXcGhZMnR6YjI1QWFHOTBiV0ZwYkM1bWNqNkoK +QVQ0RUV3RUNBQ2dGQWxJTTlFRUNHeU1GQ1FsbUFZQUdDd2tJQndNQ0JoVUlBZ2tLQ3dRV0FnTUJB +aDRCQWhlQQpBQW9KRVA2b2lNbjExazlpMVVFSC9pc3pBWUlPVjN0RE1oR2pVRUFZWk1Qck9pdHQ2 +NktFVlI5U1l1dEZUcG9lCm5salJ2Snl4Q25DRERlOEtWa1NheTBXUWRhUHhIVTFvWG56b0o0Ujg0 +R0tQSXhBb1NlR1MyM20rZ0ZEOVhKWkEKcDRCWSt4Rmg3NHNRYmM0cGxLUXFCLzJIOFJ1NFZtUmNw +UTNlQ0lJckJ2R1NKVGs1eVBEeUh6WHBwd3FvNHJocwpsWkphUjhZTlgwSDZ1bmRFUG5wSDA1eVU0 +aG94MktHN21sMGp0dDUwUXlHN1hFbjFEdU9nVkE3WDJGaHJqUFJGCnJWTXFlSWUzbWxxYjNHNVJD +Q2hLdmtnMmI3QUdJclFWMlVuMDRZOUgwYVBOZERLcFYxVHAvNHAxTG15bFBGMFAKRWJkeXFhai9l +ZUd2cjBwZDFWWjkxR2hhTW9tK3RjQnpsQ0Z1VjNINjcwMklYZ1FRRVFnQUJnVUNWYmFmNWdBSwpD +UkNyVDN2cHZxMGVQSWFPQVA5dmhBRHcrMWtuVTRzakZZeW1ZN2IvUWNjT1Fab3pCblNiY1hEMGFK +eHJJZ0QrCk83VVVlNkxTNnp3Rm5ZV0tVRXdvSTJtK0FRV0M2c081TmExdVhyTDBhOEtKQkJ3RUVB +RUlBQVlGQWxpcUgyTUEKQ2drUW1zakgrZkUxTEI3SEpCLy9aR2haNnlOY0x2eW11dTk2QW53UHlI +V1QvUmlYYVE3SC9jZWxlOWVPODZmWQpPaDJjd0xDNzZmaGRyNFJvNDQrRGlJZmRWa1paTU4xYjVi +amhHcVpmRjQzK21TMXRKVWZwSnV6OTZjMDlySXM0Ckt2dVI2cnJFVFJRbmMzcXdEVUw5UUNoU2hy +b2FsV2tSMVdSWEZmSG9IeVFQMjlGMlFpYVpRMU52YUVmQjZ0MlYKdmx6TFRPQldCcmNHZ2JOdy9L +b1lwYTN4MHcwTFZPcTl2bWtLby9YY01QNVBxcnJjWFhGRlpyczU3NkpVU1lBOApqQ2FkZTdMWkZw +ckErMDZycER2T1liM1hkMzFHYnp6YjBYcHB4UitGNTZmditMSkU0WjhWNjFGSTZGMHhEZFFrCjZ2 +UkFVSUVnUnVvN1l1aXJqbHFIOWxJekpDWEFyT2VBK1FpMTZCTlo2M2pZQzcyeDNNVGZMNGhaeCtT +L0o4ZUQKWEdmYUZCRDl4enJBQ3hjY1hlOUIxYTJ5T3hxYUtmL3hpSG1vVHE0ZkJyM1B6U1owVm82 +UERTSGlicDBzRER1cAp1NjlxaTVLdHcxcjc3dlhEWlhlQ2VCYTRhNE1BbUVyeFdmdkNKMzBBYlkw +bUU1dXV4RW1QZVgwWGJYdjdqbGFHCi9nUFl2ZTJKZHkrQVpwOTRZclZjbjgwOVI2YjJoYWo0OXA3 +MDRuMmFBTk5pTExmR0ZQbEN0REFhUkltVzZsUWgKeFJHUm5ZcjhmNldRRCtWWlh1U09jUk0wNnV0 +SUxEUVpYZUcybzFVV2N0YlgxRVFjNmoyU2lyMk9IbGZHMm1iYQo5VzNpYWJuY3lEUFJTMWNGb25a +dVI0K1BRREU1dStaS0t2TTV0Rk42Y2tQa21zdFJ5clQ1Z3J3SEJSTVJFUTg3CjRxdi9BQjFmenNZ +R0FCT0RBVjZ6MmYzSGo1YzFxVzZydVp3NVAvRk5ObGw3RmRoYVlxSXF1UzZEa05POEtSSE0KdEc0 +b3VOQkE3U0dNVnp0Ly9HRGg0dlp1SWdXamkwY3NmWi9tRmhVSGQ5cWV3RDZLSnFNTHpJNTZkUi83 +TnZDMwo5MWdvb1c4VjErQkRWWXRqWld3VjFBL2QxeVFBUWd5V2tYdUEwREthOUYwNEpnRHVxQ0NQ +clVVYWhUVjRKUXlkCkNWZWYzd21icDB5ZmwyZkRNaFNKQjBqdTg0eC9jOUZwWWtEVGhzMDlyb1dM +SXdiYnB1bUhVNTNXU1B0NHFkVTUKVktSdmF4M0RPRysxOGlVOUdaVmNVSzZQdVRPckErYnE0WXUx +WGt6NXRvZzFBajZHTUtpY05qdk9MamxEbW9zcQpHZ0NlcmdJVTlTTkI3bnM3MGZ0QnFxQnEwQkYz +d0dwYlNsTVgzcnJiQUxnMzhSdVpERkZpL1lMTjNBS2lRNW1pCkRrdnp5N0xqUTIweFVFNFBCZGZ5 +Zjl5WTdVLzRmU2FCRjVubUk4U2pkY1hzMGwxeC96M21IWHV0amJYN1YzcFgKZG1uTUdRNkdqNzhF +NEowNVJ5VmZXT29oKzJCclJnUWZ1RjN6SnREUWlMaUNONmhRczJBV2VEaUZrWmhzaHIxQwphaTl3 +NEVwUXRQcllpSkRlZFQvSHFRaTVUQW14OGl3VGcvM2dGbmhyYmpMSkYvM0wrZEFOK05OSmNqRXBP +dTZnCnNmVFZZM3JSajdwUEh4cTROR2xiRXpnaUpibEFzeFVaMncvTzZYVG8ybXB5Vk00NFlsUTlH +SlZnd1lqVUlhWkMKNERXWktnaDE0TlhRYlpBeEhsb1J5eXRQeVU1NTRkZlJtcXVjMnl3Znk3UWxi +V2x1YVdwaFkydHpiMjRnUEcxcApibWxxWVdOcmMyOXVRRzE1YjNCbGNtRXVZMjl0UG9rQkh3UXdB +UWdBQ1FVQ1ZhNFJDZ0lkQUFBS0NSRCtxSWpKCjlkWlBZa2ZuQi85NWV1L1JnYVdST2kzZWZueXcz +N1MrN1BPMCt1eXBKZ2oxZzBpcHVWTjI2UHpleFlEcHVuT2EKcWlMT0dRNy91eS9IRWNkZWw2b2cr +TDJJd3hMRW9RNVZmMzdCZ2gxVVJlckJDc2xDSis5TVNOQkFpbGRvL3liRApONUhQSHlwSWw3ajVL +MHo0bjJwY3REeXJETUJxRHFyTUhOQWZ4eWVqWEtOancvVjBBc2NTN2c0SUQxWUhNRVlHCmM0MVBW +bFZXNzJTM1FEWkxMN0hWMVRXWHZNMkFTcElEckppVDVKTllUaFJiTXVSZlhuZTM2SUtSb0EwVFVT +NzEKSE5GUlVwU01yQTg0Y3E0RzR6d1Z0eUhmRGF0MVVwZ0RaUDBIOVMyY0ZoM3R1S2pvT2RTZlMz +dDl4SUdkb2ZFUQpaaFk3clNBNXI3NzBQaFRYakZIekQ3dHllaUhmUnlNTmlRRkJCQk1CQWdBckFo +c2pCUWtKWmdHQUJnc0pDQWNECkFnWVZDQUlKQ2dzRUZnSURBUUllQVFJWGdBVUNVZ3owUmdJWkFR +QUtDUkQrcUlqSjlkWlBZbno4Qi85dU0vcGgKYm9oNVNOSHJGRzdZd04vSzRlZnlpNlM5VnNLTWgr +Zm1sSEVRWWFHaXFra2xYSWYvQ1dqTWNvSlV1bE1IQXhLegpJYXJ0SlpiUW1yeVhjSndwY3NGWDdN +VTRYNWlnRmMxanFrbUxFRFNxVFVISGJ4U2xNUGI1aHdNajBzY0txUzA4CjVSUDArdnJqb3hnK2Nk +VjFXUm42cE0yZFpCbUJ1dms3UlVWaUEvV3psNWRkUmlwZmc3RHZoOHRHeC80eTNzVEIKb1VKYXBJ +VmlBYmpvQTF6RTUvdDlSVVBza1NqdHZvNUZSZEwwK0cxcEhjTzdVWHVYQkg5ajRKK1FqQ0JObFRE +VwpYNTFKV1MwY1dPdVU0TW1xb1o5Q2FGUGVIN2c0QTcxczQ3Q0VueXZCVFRmUWwwSFVRL3BzeHF3 +Zm9MNzl2Q3YrCnFTSitEemRPZHFmbTRKdTlpUUUrQkJNQkFnQW9CUUpTRFBPOUFoc2pCUWtKWmdH +QUJnc0pDQWNEQWdZVkNBSUoKQ2dzRUZnSURBUUllQVFJWGdBQUtDUkQrcUlqSjlkWlBZaURKQi85 +UkY3NmlMVWZyN3psZkYrL2REcG1rNWI2cgplZkZCRDZtUjNXSGx3QWtzbFdjNWt4NVh5ZmpZVHpu +ZzEzUk1LeW5tMndRQkdPL04wVThMMUsvZ3p0Y0tBTkdxCmdWZU5aWXM0V004eVF3a3B3WkxOK2Ra +N2tTc2VtRDdtNitBbitQWldxMmdiSTVRMHNpOERWbDVZWTVLMm5VSXgKeHRYUyt3RnhVVzA1RkF2 +Z0RtdVJodTFUM2txQ0JkNjBYUDRJbmVqbnV0YjdrUGh6bGlGenZ1VTUxQlJQcmFRZwo3ZXViN1pK +TW41aWFMdERvNnk3MVVnOXFCYk92TlZ2MHQ1MjF0QWZtQW9ERGZGbnRzeWdxR0gzbFFkN2gvbTFM +CnlWVmdER0ZMdmxPZXhtSnVxaU5xN0ZVZUhPVC9IWXJtVmZqMEZ1MEtielNKQ0dGRGhEeEFnb0xH +T1d3WmlRRSsKQkJNQkFnQW9BaHNqQlFrSlpnR0FCZ3NKQ0FjREFnWVZDQUlKQ2dzRUZnSURBUUll +QVFJWGdBVUNVaEREb3dBSwpDUkQrcUlqSjlkWlBZaFY4Qi80aEErNkJLNkV6K3dISmU3clJ4c2Ez +WGNlWVdMR2l5bXZud2Q0amRwcjZUZVBQCk5FOXRKZUJjY0lnWVd4RE9HVk53SzF4cDZiWVozNXlm +WklhaEZGbVhmczUreGZqeE5UamF1Z0FKZU9IS0dkNDIKK1U4WGcydTZITlNDZVdVaXpuUFhua092 +TkgzMmdtdDZOc3JBKzRVZDFLblc5ZS9Nd2tYOEo0ejM2MnVYWWVhQQo5YkdDck5VVDROK0R1cXpn +VUk3UGMvUFRrRDlBenB1eEN0NnlKZ2sxT2c3S0U1Ukh1Vjh1VnNOREVka2x0dWc1CnZOZUxSM1Js +RC9PT09aSHhtSnc3a1ZzMEtUbDBzSzFLWVQ0Mnl2bklUTTZ3d3lqZndUaEJKdFZDcldoK0J3WVcK +a2p6cGUzcGZqRzJTUjBoZWRZWmhXVnZRV3VSSUYxYUxSV0NUd3E5QWlRUWNCQkFCQ0FBR0JRSllx +aDltQUFvSgpFSnJJeC9ueE5Td2VSN1FmLzA3OWhNZmJ5ODZPWUIvSHUrV3JYVVhKcjRhU3VzTFZu +aVhNQTRsczdyandyUld0CklVQkRSUk1WOXFRRW41VUNZTWxnNkpHU3kybnhRK3RGZm5KKy9UUWpX +WG1zS1Q3ZS9SMlF5SU5aZmJhSFdPVVcKZ1JNUWt2NFZYQzFBWTY2R0Z3RklUb3U0dkJuOXNFN21v +bjZiRkYwOTRxN3IyZFEzSGdGUDk4WnlUV0g2NnRpTwp0bk4yblE1MlE2bnNyT1ZtZWtjZE5Oemxy +cmFxTmNHOURTNVRpaW5nSFE0bFF1d0FZcUFKMTJuSmx4bSt6L0MxCk5yNm4yL2lVYWd6Z0F6Kzh1 +cXNzalgxeEdBODY5L0RibE9HR0hkSHhsbStjVmlSbElXZWJOUkNjN1RFTytwcTcKUW5pN0Vic3g1 +MktjdmJFbTBBMVQ1a3h4bTB5ZDRQa0poWDFxb2UweVQ1djNSSzNNVWZyNFhFK1JSV1JkWFl3NQpF +eFJUQmJnTy9UcDBuWW00cGFqRW1DbThFM3dmNkJTR201L2NrYkc3aVFFelUySFFzWlBxYXlZalpK +eDA1M2IwCmVyRUpKWlFUMlV4REFPN1pUNUJKN2VZemN4ZWRDbTZSOTF5YTJqQ3lldVNtcmJlT1pq +NGdrNDU3NjFCTUZjZS8KMytuSVB6T1dydUxHZEI2NklFNERGa3hYdlVMVVE2Mk9qOU5FZWRVNDRq +ZmlSTlNEeU9iaTQ0d1hpb2daYkpOKwpLV1BJRzZhdU54dm9PRXFwc1AvMzBON1BsZnc5ZGM4OERK +aVNzajJTVW5sdXJQQ1B5bFNWT3E2Qk9oVkxTUmhwCk45OWdnd3VKb25GT2JpeHZ4M0NiOSsyYUhZ +aVFWdU1sTmJ1Z3Bkb1dVUXJmL2R0dHBDYlBSaXpFZ3loWmc2WEIKdFdXZ0V3WFJFWGxkaWJRWUJO +RjFWVDdiUWdSenFlR2RWVGpjT2VmTUFnZVlObHBmMnErZ3ZVWjZlS3c1S2pHNgozM1JSL3NucTBl +eEQ1ZjNJeTVKVnlkZWNBWXAwRHVaazR3dkVYWlc5SGlpaFhIR2lNNUkrQUIzd1FMNitCckQ5CmFk +NDlmSUcxbTZVSG1JcmlxaUVEWmlhc2o1aUM3ZnZRVENIUXRINVgyVlpLZUt2T0V2WThzMFhUSEZ5 +YjV5Z3QKM0hQOHJKVE5HWHlVV3JLQm9yM1VuMWVGcERPb2hVR1pBeWVSV3lnVC81STUwQ2NCRkVT +SjI5bk1SOHNzc0wrUAppY0F0QW5URGMyazVaUnp0cmtuV3hXdkJNQkVwdXNVR1N2dE5CdzYwV3A0 +OUx3TjA3MjRNV3M1c29BQjdNOWlIClZEbk9yRy9WMjV5M2tJa1FBYWhCbVRoMkM2MHluTHVGd3B1 +bExIRXBSbDFzbW1yVUlrTXhVZGZYZFJCYzJMREYKV2FVT0hHM1NXWjN5OXVEUjJseDRXQXFsbnZa +YUErSUFFZnVLaWdRSytiekxGRTJzWWdERFBqK29RL2N6SWJRcgpqUiswSTFRNVUwNjgwUlR3bE80 +NGZnR2pZZjNHS1Q1SXBIUXNWTlIyKzVpOGM4YW4yTFpSeDRDRUJOSlhyREtoCi9zN2ZCR1NhNUFH +UzVzTWF3K1VLeWFPbGt2Mi9BR0tEUkhib0crQmpKOUczUGpsbmRKcHNWeUJ1TUpIZDh3aEUKMG1H +emZLY0wybUpFNjg1RlFsQm50SlhIRGxXdTNNOGlaTWM2c0dkT3FPVjNrYkYvd1pIaWpHanc4Sytt +WGZ2bwpwQXNkZElCLzFYUnlmeEl6enNNdTlTbVAxZTZMazhPMlhIUlY3TFMwSW0xcGJtbHFZV05y +YzI5dUlEeHRhVzVwCmFtRmphM052YmtCMmJXRnBiQzV0WlQ2SkFUNEVFd0VDQUNnRkFsTU45SXND +R3lNRkNRbG1BWUFHQ3drSUJ3TUMKQmhVSUFna0tDd1FXQWdNQkFoNEJBaGVBQUFvSkVQNm9pTW4x +MWs5aTN4QUlBTER1WnJtbkEvU0xTampWdnY3ZgpqZTIza3M3aU9tcnRTTmwrbXJURTF2NGRpRzVl +a2I0aTdoeXRXNHJCK3ovSkFtaWxuNFQreGFNdDNJakl6bi9jCklOeEQ0cHNsOWlSdjIySUJWNlN4 +MWpHaWttK054RjZjQWJDWDNxOFhBK091N0Q0MDlOQjliTUhTRjgxOUZscXEKSWlhck9tNmVhYUM5 +THViOWdlMEtwREJsQmJpRkVGOFNvMkJubzlCU2c1WDdXcVh2NXVxU1hFcEM2UFd3KzNBTgpvbTkr +TWM5OVcveEl6c3ZMYk1GQ3BiaHpvbE83THF5OXhCT2tpU3htSUx3NDQ5aytudmJIZlA0cllWUEQy +Y01QCjFjeCtQV3pxbHBEUXRRZncxMk91eEVTNUZhMGxqVk9tYkY1VkZEangranBrOUphakxaK1d4 +aGZ1aVRMS2VSanQKNnI2SVhnUVFFUWdBQmdVQ1ZiYWY1Z0FLQ1JDclQzdnB2cTBlUEtSK0FQd0xw +VEtnTFJvc3A5a3dERjVrWTRoUApLUG1ENFVQSG41aFJJNzF0YzhzaDFRRDlHajl4dTcvYXdaN3A3 +Y0dwMXErSVpCTUM0Y0ZXTzlVT2wydS9MUnFZCnJKYUpCQndFRUFFSUFBWUZBbGlxSDJFQUNna1Ft +c2pIK2ZFMUxCNUhoQi84RC9WUnZsQWxxdFQzVGFPTHJuZVoKS09pbWVEZHJ3cTVBTzBPWWRveUly +SjZ4ZlBzYmZ1MWlpVk1nemZxNjZaUG8vNkJmRU8rUWdiZWpaRUxYc0NuYgpjSlZLZU9vUkdWMVlz +bE02R0F2SXlwNk9KRWFlaWlEREJIRzh5L2ZTVytpeFVJaSsrZ1NsWHFLVFZkZEVTeUdPCjMyM0tM +UHRUQlB1NG5DMlhMWUM0YVV5bUVUNWRVblllalYySFdsYUw2RkNIRndyRmk0akJPSHZIWmllc1dt +R0UKTUhEd0hKVWRsZUpLcE0zQ0Z5b21iRWRwN2I4MXBqRXNZODg2VDFmSkprTEJLLzh1RlZObDlU +aFJWSkU1VzFlQgpFVUcyOUtIUHNsRHJCRWhxZ0U1Z3ZXeVFOS2pBdEYycmI4dW9YbERUc29mdERj +RlFZSU1UQUVuN0YwOGZTQk1aCm4yc0Rwc0FkVVRWRHM3QVdvQlNET2lzZEpKTC9ybG54N2MvQ1dl +L2NGRHZCMXhUSEtYRzhJS0UzUk5XUnU1eWsKc2hOTVdVWXpBN2pMaG9iRGEzSzlOclVEY2UrYlRP +a1VRTTc2cHF0aVZuTnpUUDBrenRoWll0UXhvWVc4US90VApqRmJDbFo3bC9vYmw5ZkluMGpTdXNK +ZGVyc0VNVjBhemdqOE42QjFCQWw0Zk4rTHM1UUtvWVBlVFhxaUFOYjF5CjJjWE9DRjBSNFBKRDFH +SWZVdjZRN2JWUVp1bTRJUDhKK0Q4VTcyOXhyWlZmMFNqbEx3M3UvODBQanZ2UmU2ZHUKTUxveWMx +VzNjbEJCZTE5Y0loMFVIOCtRSjg1WUxUOERzYzM2UTVYdnYvVTdha2o3TTU2c2dPWFJuRjRrRG5o +WQpHZ01GV0F2Y0xCaFVQZmFqSEJmMlROeGt6ZmUwVkt1d2plR2RRK3FHT2VhSHpiQVZEdGRwMnd5 +NnNPM0loVDBtCnZMckRsaWZwNmZIdHpsRVJsU0hpaE0rNm1oVUhXenYya0xObUJlK0FGV0F3cmxo +c3dLUkg4UHRCQjVYNGRZM3YKWXpuOGY5ZEZtRlc5Q0svQ2M4YWladjg4d2krK1c1Yi9uZTczYWxW +eVpyWWlCUEFMOFFyeUdzZi82UEdaaWdBSgpiZFhhMGhqSCtlVmsrVlkvLzlPcHhGOTR3czFIbzUx +ODNEbCtQcTFEY0VxY0lzM3Z2VHlSbXZINTRWcHJXdzF2Ck5sd2YxRDVDSmx0WHIzZXcvaGJPeEFZ +Y2pHTzhUZnk3OVJ5N0dpcDgrQWMyaVl0Qk03SEI2ZHo2WFp3UEVtUnoKUTNsN1JnOW5lME5RUWUx +QU5WTThnY081aW9jSmVoZ1padkhDWGNNY0tHeXhHb3dzYmJ3eUZxc2VpR0hUbGRmMAp4OWlTUGNm +c1pxc25oTmowVUdVQnFyMjVEYi9OMUNoYzlnM05pSWtQRlBocVd6aE1yRE5NcURjWDZreWFXSW1r +Ci85cDdEdXpPTEJFWlRZSGtLUVJReXRVL0hmclViUHNibkROVDk1QXBqd3NNVkJhZS95c3ZpUUUy +ZCs0dDZZeFAKKzBLNGxPYktBMGl3cUxqc2hHVmV3U1NBTHNPd1RDUk5kM2J3U2VRWWNnZDI0L1V4 +d2FVZElUV0RnRzkvTEl6Vwp3czVtaGF6Y1RIMmJOOXZ1N3BkOWhDd2szamZkYlBBNHFnZGQ3Y0JG +TnpmOExJcmR4VVJOZmU0cE05T1ZLTy9jCm4yeXYwL3JUMHNwZU85T2VzNlhpRjdNeGNtbU13N0t3 +bjNkQlJabFVhaHRmbGhPL1RsYysvMEUyT1RSazNsMVcKL3JrQkRRUlNEUE85QVFnQXNQMEZxUDRI +YmtjeWNRYUx2ekkwV1UzMXdQRFZTRWpRZzZoSUlYQndpbmRpd1kvNgpPTG1hVUNYRjQvT3BncURO +ZzV5aEFEV29MZ1dGd2FkZjFFdHE1WjB0KzZ1b25FbjNJWTlKYzgwZ1NMYko2eG50CnkvYTFGL3hM +MkFMQXhsLzkrZVczZUhvQVNJUlc2c05XbXlBWkMzQ1JBU0VZdkVhNnlibURSY1dYVWcyYmljOXgK +czIwQ3dxMWd6bWtWTCtVNmNvR2dhTWhDRjBOMVY3ajJCbXNhNHJINHpJa21Feml0enFFWkZLV1N4 +UzJENU5KVApWaGRiUHpCdHNZZWQ1dGZFR09sOTlSM21WZ04vUFYyd0hnRk1DQjQ5cW92QXZIS1Yy +NVU0VW1qQTR0c040SVpYCmpQb3B0RGZMSUNQZndQbFNGcEEyeFJWRTRRdk9vb04vWmRvd3JRQVJB +UUFCaVFFbEJCZ0JBZ0FQQlFKU0RQTzkKQWhzTUJRa0paZ0dBQUFvSkVQNm9pTW4xMWs5aXgyZ0gv +MzV0V1o1a3BneXRuZEs5M2s5ZllaUVJQamRabkxwMwpaTHFKV3VGd05CcXUwUWxxaEh5MkRBMExL +NEFtUmdHc1JOUHdBWGhKTDJ1ZnFMaUl6eHB1S3k1eWZucWluL0F1CjlsWjU5ZmpWZTVKTmh2NmJX +bFBSalVMeExnQWxyQnZuVU9pSHZ4dHU5cXBXcS9FQWhTWnFMMml2ZU5mNzZMQmEKV1M2MFVheTJx +Vm1tcGxWQ1VCMHh5R25NR0dHYjUzQlpzaGJmOW1manNwZW52MitUb2FtK3MxYXljaVhVdFU3ZQp5 +ZjU3aEMrWThOM3ZIall4QTRONnVrV01nM0RVb0xSNnh6Z0YyTmlnaE1qbWwrQURrUVlJU1QxeUY2 +TGhueFBkCnQvTU4vSWp6VnVzUUtVaEhvQUNZWGR2OHRiMUd2bDN4U1VyNjE5dWZiRWN5czhFMERI +WU1NbE09Cj0wTmZxCi0tLS0tRU5EIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0K + + +--=-JKkHmrzBpdm/vidMcYH8-- + diff --git a/icons/breeze/icons/actions/22/view-certificate-import-inverted.svg b/icons/breeze/icons/actions/22/view-certificate-import-inverted.svg new file mode 100644 index 00000000..ff539ffc --- /dev/null +++ b/icons/breeze/icons/actions/22/view-certificate-import-inverted.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/icons/breeze/icons/actions/22/view-certificate-import.svg b/icons/breeze/icons/actions/22/view-certificate-import.svg new file mode 100644 index 00000000..ec5250cc --- /dev/null +++ b/icons/breeze/icons/actions/22/view-certificate-import.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/icons/breeze/icons/actions/24/view-certificate-import-inverted.svg b/icons/breeze/icons/actions/24/view-certificate-import-inverted.svg new file mode 100644 index 00000000..e0691d6d --- /dev/null +++ b/icons/breeze/icons/actions/24/view-certificate-import-inverted.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/icons/breeze/icons/actions/24/view-certificate-import.svg b/icons/breeze/icons/actions/24/view-certificate-import.svg new file mode 100644 index 00000000..f82c65b3 --- /dev/null +++ b/icons/breeze/icons/actions/24/view-certificate-import.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/icons/copybreeze.sh b/icons/copybreeze.sh index b7c85229..5697b4b6 100755 --- a/icons/copybreeze.sh +++ b/icons/copybreeze.sh @@ -13,6 +13,7 @@ wantedIcons = [ "document-decrypt.svg", "document-edit.svg", "document-encrypt.svg", + "view-certificate-import.svg", "document-save.svg", "document-sign.svg", "edit-delete.svg", diff --git a/views/conversation/main.qml b/views/conversation/main.qml index 4832d500..70a45c04 100644 --- a/views/conversation/main.qml +++ b/views/conversation/main.qml @@ -141,7 +141,22 @@ ApplicationWindow { data: "no real data", } ], - } + }, + { + resource: "resource1", + date: "2017-07-20T17:47:29", + subject: "WithPKeyAttachment", + body: "Hi Mélanie,\n\nI'm sorry to start this on such late notice, but we'd like to get Foo and boo to woo next week, because the following weeks are unfortunately not possible for us.\n", + to: ["to@example.org"], + unread: true, + attachments: [ + { + name: "myKey.asc", + mimeType: "application/pgp-keys", + data: "no real data", + } + ], + }, ] }], } -- cgit v1.2.3