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 }