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

0001 /******************************************************************************
0002  *
0003  *  SPDX-FileCopyrightText: 2010 Leo Franchi <lfranchi@kde.org>
0004  *  SPDX-FileCopyrightText: 2010 KDAB
0005  *
0006  *  SPDX-License-Identifier: LGPL-2.0-or-later
0007  *
0008  *****************************************************************************/
0009 
0010 #include "mdnstateattribute.h"
0011 
0012 #include <Akonadi/AttributeFactory>
0013 
0014 #include <QByteArray>
0015 
0016 using namespace Akonadi;
0017 
0018 /**
0019  *  @internal
0020  */
0021 class Q_DECL_HIDDEN MDNStateAttribute::MDNStateAttributePrivate
0022 {
0023 public:
0024     MDNSentState dataToState(const QByteArray &data)
0025     {
0026         MDNSentState state = MDNStateUnknown;
0027 
0028         switch (data.at(0)) {
0029         case 'N':
0030             state = MDNNone;
0031             break;
0032         case 'I':
0033             state = MDNIgnore;
0034             break;
0035         case 'R':
0036             state = MDNDisplayed;
0037             break;
0038         case 'D':
0039             state = MDNDeleted;
0040             break;
0041         case 'F':
0042             state = MDNDispatched;
0043             break;
0044         case 'P':
0045             state = MDNProcessed;
0046             break;
0047         case 'X':
0048             state = MDNDenied;
0049             break;
0050         case 'E':
0051             state = MDNFailed;
0052             break;
0053         case 'U':
0054         default:
0055             state = MDNStateUnknown;
0056             break;
0057         }
0058 
0059         return state;
0060     }
0061 
0062     QByteArray stateToData(MDNSentState state)
0063     {
0064         QByteArray data = "U"; // Unknown
0065 
0066         switch (state) {
0067         case MDNNone:
0068             data = "N";
0069             break;
0070         case MDNIgnore:
0071             data = "I";
0072             break;
0073         case MDNDisplayed:
0074             data = "R";
0075             break;
0076         case MDNDeleted:
0077             data = "D";
0078             break;
0079         case MDNDispatched:
0080             data = "F";
0081             break;
0082         case MDNProcessed:
0083             data = "P";
0084             break;
0085         case MDNDenied:
0086             data = "X";
0087             break;
0088         case MDNFailed:
0089             data = "E";
0090             break;
0091         case MDNStateUnknown:
0092             data = "U";
0093             break;
0094         }
0095 
0096         return data;
0097     }
0098 
0099     QByteArray mSentState;
0100 };
0101 
0102 MDNStateAttribute::MDNStateAttribute(MDNSentState state)
0103     : d(new MDNStateAttributePrivate)
0104 {
0105     d->mSentState = d->stateToData(state);
0106 }
0107 
0108 MDNStateAttribute::MDNStateAttribute(const QByteArray &stateData)
0109     : d(new MDNStateAttributePrivate)
0110 {
0111     d->mSentState = stateData;
0112 }
0113 
0114 MDNStateAttribute::~MDNStateAttribute() = default;
0115 
0116 MDNStateAttribute *MDNStateAttribute::clone() const
0117 {
0118     return new MDNStateAttribute(d->mSentState);
0119 }
0120 
0121 QByteArray MDNStateAttribute::type() const
0122 {
0123     static const QByteArray sType("MDNStateAttribute");
0124     return sType;
0125 }
0126 
0127 QByteArray MDNStateAttribute::serialized() const
0128 {
0129     return d->mSentState;
0130 }
0131 
0132 void MDNStateAttribute::deserialize(const QByteArray &data)
0133 {
0134     d->mSentState = data;
0135 }
0136 
0137 void MDNStateAttribute::setMDNState(MDNSentState state)
0138 {
0139     d->mSentState = d->stateToData(state);
0140 }
0141 
0142 MDNStateAttribute::MDNSentState MDNStateAttribute::mdnState() const
0143 {
0144     return d->dataToState(d->mSentState);
0145 }
0146 
0147 bool MDNStateAttribute::operator==(const MDNStateAttribute &other) const
0148 {
0149     return mdnState() == other.mdnState();
0150 }
0151 
0152 // Register the attribute when the library is loaded.
0153 namespace
0154 {
0155 bool dummyMDNStateAttribute()
0156 {
0157     using namespace Akonadi;
0158     Akonadi::AttributeFactory::registerAttribute<MDNStateAttribute>();
0159     return true;
0160 }
0161 
0162 const bool registeredMDNStateAttribute = dummyMDNStateAttribute();
0163 }