File indexing completed on 2024-06-23 05:18:29

0001 /*
0002   SPDX-FileCopyrightText: 2021 Sandro Knauß <sknauss@kde.org>
0003 
0004   SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "draftstatus.h"
0008 
0009 #include <MessageCore/AutocryptUtils>
0010 
0011 using namespace MessageComposer;
0012 
0013 void MessageComposer::removeDraftCryptoHeaders(const KMime::Message::Ptr &msg)
0014 {
0015     DraftEncryptionState(msg).removeState();
0016     DraftSignatureState(msg).removeState();
0017     DraftCryptoMessageFormatState(msg).removeState();
0018 }
0019 
0020 DraftEncryptionState::DraftEncryptionState(const KMime::Message::Ptr &msg)
0021     : mMsg(msg)
0022 {
0023 }
0024 
0025 void DraftEncryptionState::setState(bool encrypt)
0026 {
0027     auto hdr = new KMime::Headers::Generic("X-KMail-EncryptActionEnabled");
0028     hdr->fromUnicodeString(encrypt ? QStringLiteral("true") : QStringLiteral("false"), "utf-8");
0029     mMsg->setHeader(hdr);
0030 }
0031 
0032 void DraftEncryptionState::removeState()
0033 {
0034     mMsg->removeHeader("X-KMail-EncryptActionEnabled");
0035 }
0036 
0037 bool DraftEncryptionState::encryptionState() const
0038 {
0039     if (isDefined()) {
0040         auto hdr = mMsg->headerByType("X-KMail-EncryptActionEnabled");
0041         return hdr->as7BitString(false).contains("true");
0042     }
0043 
0044     return false;
0045 }
0046 
0047 bool DraftEncryptionState::isDefined() const
0048 {
0049     return mMsg->hasHeader("X-KMail-EncryptActionEnabled");
0050 }
0051 
0052 DraftSignatureState::DraftSignatureState(const KMime::Message::Ptr &msg)
0053     : mMsg(msg)
0054 {
0055 }
0056 
0057 void DraftSignatureState::setState(bool sign)
0058 {
0059     auto hdr = new KMime::Headers::Generic("X-KMail-SignatureActionEnabled");
0060     hdr->fromUnicodeString(sign ? QStringLiteral("true") : QStringLiteral("false"), "utf-8");
0061     mMsg->setHeader(hdr);
0062 }
0063 
0064 void DraftSignatureState::removeState()
0065 {
0066     mMsg->removeHeader("X-KMail-SignatureActionEnabled");
0067 }
0068 
0069 bool DraftSignatureState::signState() const
0070 {
0071     if (isDefined()) {
0072         auto hdr = mMsg->headerByType("X-KMail-SignatureActionEnabled");
0073         return hdr->as7BitString(false).contains("true");
0074     }
0075 
0076     return false;
0077 }
0078 
0079 bool DraftSignatureState::isDefined() const
0080 {
0081     return mMsg->hasHeader("X-KMail-SignatureActionEnabled");
0082 }
0083 
0084 DraftCryptoMessageFormatState::DraftCryptoMessageFormatState(const KMime::Message::Ptr &msg)
0085     : mMsg(msg)
0086 {
0087 }
0088 
0089 void DraftCryptoMessageFormatState::setState(Kleo::CryptoMessageFormat cryptoMessageFormat)
0090 {
0091     auto hdr = new KMime::Headers::Generic("X-KMail-CryptoMessageFormat");
0092     hdr->fromUnicodeString(QString::number(cryptoMessageFormat), "utf-8");
0093     mMsg->setHeader(hdr);
0094 }
0095 
0096 void DraftCryptoMessageFormatState::removeState()
0097 {
0098     mMsg->removeHeader("X-KMail-CryptoMessageFormat");
0099 }
0100 
0101 Kleo::CryptoMessageFormat DraftCryptoMessageFormatState::cryptoMessageFormatState() const
0102 {
0103     if (isDefined()) {
0104         auto hdr = mMsg->headerByType("X-KMail-CryptoMessageFormat");
0105         return static_cast<Kleo::CryptoMessageFormat>(hdr->asUnicodeString().toInt());
0106     }
0107 
0108     return Kleo::AutoFormat;
0109 }
0110 
0111 bool DraftCryptoMessageFormatState::isDefined() const
0112 {
0113     return mMsg->hasHeader("X-KMail-CryptoMessageFormat");
0114 }