File indexing completed on 2024-05-12 05:11:10

0001 /*
0002     SPDX-FileCopyrightText: 2009 Constantin Berzan <exit3219@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "addressattribute.h"
0008 
0009 #include <QDataStream>
0010 #include <QIODevice>
0011 
0012 #include <Akonadi/AttributeFactory>
0013 
0014 using namespace Akonadi;
0015 
0016 /**
0017   @internal
0018 */
0019 class Akonadi::AddressAttributePrivate
0020 {
0021 public:
0022     bool mDSN = false;
0023     QString mFrom;
0024     QStringList mTo;
0025     QStringList mCc;
0026     QStringList mBcc;
0027 };
0028 
0029 AddressAttribute::AddressAttribute(const QString &from, const QStringList &to, const QStringList &cc, const QStringList &bcc, bool dsn)
0030     : d(new AddressAttributePrivate)
0031 {
0032     d->mFrom = from;
0033     d->mTo = to;
0034     d->mCc = cc;
0035     d->mBcc = bcc;
0036     d->mDSN = dsn;
0037 }
0038 
0039 AddressAttribute::~AddressAttribute() = default;
0040 
0041 AddressAttribute *AddressAttribute::clone() const
0042 {
0043     return new AddressAttribute(d->mFrom, d->mTo, d->mCc, d->mBcc, d->mDSN);
0044 }
0045 
0046 QByteArray AddressAttribute::type() const
0047 {
0048     static const QByteArray sType("AddressAttribute");
0049     return sType;
0050 }
0051 
0052 QByteArray AddressAttribute::serialized() const
0053 {
0054     QByteArray serializedData;
0055     QDataStream serializer(&serializedData, QIODevice::WriteOnly);
0056     serializer.setVersion(QDataStream::Qt_4_5);
0057     serializer << d->mFrom;
0058     serializer << d->mTo;
0059     serializer << d->mCc;
0060     serializer << d->mBcc;
0061     serializer << d->mDSN;
0062     return serializedData;
0063 }
0064 
0065 void AddressAttribute::deserialize(const QByteArray &data)
0066 {
0067     QDataStream deserializer(data);
0068     deserializer.setVersion(QDataStream::Qt_4_5);
0069     deserializer >> d->mFrom;
0070     deserializer >> d->mTo;
0071     deserializer >> d->mCc;
0072     deserializer >> d->mBcc;
0073     if (!deserializer.atEnd()) {
0074         deserializer >> d->mDSN;
0075     }
0076 }
0077 
0078 QString AddressAttribute::from() const
0079 {
0080     return d->mFrom;
0081 }
0082 
0083 void AddressAttribute::setFrom(const QString &from)
0084 {
0085     d->mFrom = from;
0086 }
0087 
0088 QStringList AddressAttribute::to() const
0089 {
0090     return d->mTo;
0091 }
0092 
0093 void AddressAttribute::setTo(const QStringList &to)
0094 {
0095     d->mTo = to;
0096 }
0097 
0098 QStringList AddressAttribute::cc() const
0099 {
0100     return d->mCc;
0101 }
0102 
0103 void AddressAttribute::setCc(const QStringList &cc)
0104 {
0105     d->mCc = cc;
0106 }
0107 
0108 QStringList AddressAttribute::bcc() const
0109 {
0110     return d->mBcc;
0111 }
0112 
0113 void AddressAttribute::setBcc(const QStringList &bcc)
0114 {
0115     d->mBcc = bcc;
0116 }
0117 
0118 bool AddressAttribute::deliveryStatusNotification() const
0119 {
0120     return d->mDSN;
0121 }
0122 
0123 bool AddressAttribute::operator==(const AddressAttribute &other) const
0124 {
0125     return d->mDSN == other.deliveryStatusNotification() && d->mBcc == other.bcc() && d->mTo == other.to() && d->mCc == other.cc() && d->mFrom == other.from();
0126 }
0127 
0128 void AddressAttribute::setDeliveryStatusNotification(bool b)
0129 {
0130     d->mDSN = b;
0131 }
0132 
0133 // Register the attribute when the library is loaded.
0134 namespace
0135 {
0136 bool address_dummy()
0137 {
0138     using namespace Akonadi;
0139     AttributeFactory::registerAttribute<AddressAttribute>();
0140     return true;
0141 }
0142 
0143 const bool address_registered = address_dummy();
0144 }