kde-playground/kdepimlibs/akonadi/entitydeletedattribute.cpp
2015-04-14 21:49:29 +00:00

130 lines
3.5 KiB
C++

/*
Copyright (c) 2011 Christian Mollekopf <chrigi_1@fastmail.fm>
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
*/
#include "entitydeletedattribute.h"
#include "imapparser_p.h"
#include <QtCore/QByteArray>
#include <QtCore/QString>
using namespace Akonadi;
class EntityDeletedAttribute::EntityDeletedAttributePrivate
{
public:
EntityDeletedAttributePrivate() {};
Collection restoreCollection;
QString restoreResource;
};
EntityDeletedAttribute::EntityDeletedAttribute()
: d_ptr(new EntityDeletedAttributePrivate())
{
}
EntityDeletedAttribute::~EntityDeletedAttribute()
{
delete d_ptr;
}
void EntityDeletedAttribute::setRestoreCollection(const Akonadi::Collection &collection)
{
Q_D(EntityDeletedAttribute);
if (!collection.isValid()) {
kWarning() << "invalid collection" << collection;
}
Q_ASSERT(collection.isValid());
d->restoreCollection = collection;
if (collection.resource().isEmpty()) {
kWarning() << "no resource set";
}
d->restoreResource = collection.resource();
}
Collection EntityDeletedAttribute::restoreCollection() const
{
Q_D(const EntityDeletedAttribute);
return d->restoreCollection;
}
QString EntityDeletedAttribute::restoreResource() const
{
Q_D(const EntityDeletedAttribute);
return d->restoreResource;
}
QByteArray Akonadi::EntityDeletedAttribute::type() const
{
return "DELETED";
}
EntityDeletedAttribute *EntityDeletedAttribute::clone() const
{
const Q_D(EntityDeletedAttribute);
EntityDeletedAttribute *attr = new EntityDeletedAttribute();
attr->d_ptr->restoreCollection = d->restoreCollection;
attr->d_ptr->restoreResource = d->restoreResource;
return attr;
}
QByteArray EntityDeletedAttribute::serialized() const
{
const Q_D(EntityDeletedAttribute);
QList<QByteArray> l;
l << ImapParser::quote(d->restoreResource.toUtf8());
QList<QByteArray> components;
components << QByteArray::number(d->restoreCollection.id());
l << '(' + ImapParser::join(components, " ") + ')';
return '(' + ImapParser::join(l, " ") + ')';
}
void EntityDeletedAttribute::deserialize(const QByteArray &data)
{
Q_D(EntityDeletedAttribute);
QList<QByteArray> l;
ImapParser::parseParenthesizedList(data, l);
if (l.size() != 2) {
kWarning() << "invalid size";
return;
}
d->restoreResource = QString::fromUtf8(l[0]);
if (!l[1].isEmpty()) {
QList<QByteArray> componentData;
ImapParser::parseParenthesizedList(l[1], componentData);
if (componentData.size() != 1) {
return;
}
QList<int> components;
bool ok;
for (int i = 0; i < 1; ++i) {
components << componentData.at(i).toInt(&ok);
if (!ok) {
return;
}
}
d->restoreCollection = Collection(components.at(0));
}
}