1 /* 2 * compatibilityattribute.cpp - Akonadi attribute holding Collection compatibility 3 * This file is part of kalarmcal library, which provides access to KAlarm 4 * calendar data. 5 * SPDX-FileCopyrightText: 2011-2019 David Jarvie <djarvie@kde.org> 6 * 7 * SPDX-License-Identifier: LGPL-2.0-or-later 8 */ 9 10 #include "compatibilityattribute.h" 11 12 #include "kalarmcal_debug.h" 13 14 namespace KAlarmCal 15 { 16 17 class Q_DECL_HIDDEN CompatibilityAttribute::Private 18 { 19 public: Private()20 Private() {} operator ==(KAlarmCal::CompatibilityAttribute::Private other) const21 bool operator==(KAlarmCal::CompatibilityAttribute::Private other) const 22 { 23 return mCompatibility == other.mCompatibility 24 && mVersion == other.mVersion; 25 } 26 27 KACalendar::Compat mCompatibility{KACalendar::Incompatible}; // calendar compatibility with current KAlarm format 28 int mVersion{KACalendar::IncompatibleFormat}; // KAlarm calendar format version 29 }; 30 CompatibilityAttribute()31CompatibilityAttribute::CompatibilityAttribute() 32 : d(new Private) 33 { 34 } 35 CompatibilityAttribute(const CompatibilityAttribute & rhs)36CompatibilityAttribute::CompatibilityAttribute(const CompatibilityAttribute &rhs) 37 : Akonadi::Attribute(rhs), 38 d(new Private(*rhs.d)) 39 { 40 } 41 ~CompatibilityAttribute()42CompatibilityAttribute::~CompatibilityAttribute() 43 { 44 delete d; 45 } 46 operator =(const CompatibilityAttribute & other)47CompatibilityAttribute &CompatibilityAttribute::operator=(const CompatibilityAttribute &other) 48 { 49 if (&other != this) { 50 Attribute::operator=(other); 51 *d = *other.d; 52 } 53 return *this; 54 } 55 operator ==(const CompatibilityAttribute & other) const56bool CompatibilityAttribute::operator==(const CompatibilityAttribute &other) const 57 { 58 return *d == *other.d; 59 } 60 clone() const61CompatibilityAttribute *CompatibilityAttribute::clone() const 62 { 63 return new CompatibilityAttribute(*this); 64 } 65 compatibility() const66KACalendar::Compat CompatibilityAttribute::compatibility() const 67 { 68 return d->mCompatibility; 69 } 70 setCompatibility(KACalendar::Compat c)71void CompatibilityAttribute::setCompatibility(KACalendar::Compat c) 72 { 73 d->mCompatibility = c; 74 } 75 version() const76int CompatibilityAttribute::version() const 77 { 78 return d->mVersion; 79 } 80 setVersion(int v)81void CompatibilityAttribute::setVersion(int v) 82 { 83 d->mVersion = v; 84 } 85 type() const86QByteArray CompatibilityAttribute::type() const 87 { 88 return name(); 89 } 90 name()91QByteArray CompatibilityAttribute::name() 92 { 93 static const QByteArray attType("KAlarmCompatibility"); 94 return attType; 95 } 96 serialized() const97QByteArray CompatibilityAttribute::serialized() const 98 { 99 const QByteArray v = QByteArray::number(d->mCompatibility) + ' ' 100 + QByteArray::number(d->mVersion); 101 qCDebug(KALARMCAL_LOG) << v; 102 return v; 103 } 104 deserialize(const QByteArray & data)105void CompatibilityAttribute::deserialize(const QByteArray &data) 106 { 107 qCDebug(KALARMCAL_LOG) << data; 108 109 // Set default values 110 d->mCompatibility = KACalendar::Incompatible; 111 d->mVersion = KACalendar::IncompatibleFormat; 112 113 bool ok; 114 const QList<QByteArray> items = data.simplified().split(' '); 115 const int count = items.count(); 116 int index = 0; 117 if (count > index) { 118 // 0: calendar format compatibility 119 const int c = items[index++].toInt(&ok); 120 const KACalendar::Compat AllCompat(KACalendar::Current | KACalendar::Converted | KACalendar::Convertible | KACalendar::Incompatible | KACalendar::Unknown); 121 if (!ok || (c & static_cast<int>(AllCompat)) != c) { 122 qCritical() << "Invalid compatibility:" << c; 123 return; 124 } 125 d->mCompatibility = static_cast<KACalendar::Compat>(c); 126 } 127 if (count > index) { 128 // 1: KAlarm calendar version number 129 const int c = items[index++].toInt(&ok); 130 if (!ok) { 131 qCritical() << "Invalid version:" << c; 132 return; 133 } 134 d->mVersion = c; 135 } 136 } 137 138 } // namespace KAlarmCal 139 140 // vim: et sw=4: 141