diff --git a/src/akonadi/akonadiserializer.h b/src/akonadi/akonadiserializer.h --- a/src/akonadi/akonadiserializer.h +++ b/src/akonadi/akonadiserializer.h @@ -43,6 +43,7 @@ bool representsAkonadiTag(Domain::Tag::Ptr tag, Akonadi::Tag akonadiTag) const Q_DECL_OVERRIDE; QString objectUid(QObjectPtr object) Q_DECL_OVERRIDE; + QString itemUid(const Item &item) Q_DECL_OVERRIDE; Domain::DataSource::Ptr createDataSourceFromCollection(Akonadi::Collection collection, DataSourceNameScheme naming) Q_DECL_OVERRIDE; void updateDataSourceFromCollection(Domain::DataSource::Ptr dataSource, Akonadi::Collection collection, DataSourceNameScheme naming) Q_DECL_OVERRIDE; diff --git a/src/akonadi/akonadiserializer.cpp b/src/akonadi/akonadiserializer.cpp --- a/src/akonadi/akonadiserializer.cpp +++ b/src/akonadi/akonadiserializer.cpp @@ -69,6 +69,16 @@ return object->property("todoUid").toString(); } +QString Serializer::itemUid(const Item &item) +{ + if (isTaskItem(item)) { + const auto todo = item.payload(); + return todo->uid(); + } else { + return QString(); + } +} + Domain::DataSource::Ptr Serializer::createDataSourceFromCollection(Collection collection, DataSourceNameScheme naming) { if (!collection.isValid()) diff --git a/src/akonadi/akonadiserializerinterface.h b/src/akonadi/akonadiserializerinterface.h --- a/src/akonadi/akonadiserializerinterface.h +++ b/src/akonadi/akonadiserializerinterface.h @@ -58,6 +58,7 @@ virtual bool representsAkonadiTag(Domain::Tag::Ptr tag, Akonadi::Tag akonadiTag) const = 0; virtual QString objectUid(QObjectPtr object) = 0; + virtual QString itemUid(const Item &item) = 0; virtual Domain::DataSource::Ptr createDataSourceFromCollection(Akonadi::Collection collection, DataSourceNameScheme naming) = 0; virtual void updateDataSourceFromCollection(Domain::DataSource::Ptr dataSource, Akonadi::Collection collection, DataSourceNameScheme naming) = 0; diff --git a/tests/units/akonadi/akonadiserializertest.cpp b/tests/units/akonadi/akonadiserializertest.cpp --- a/tests/units/akonadi/akonadiserializertest.cpp +++ b/tests/units/akonadi/akonadiserializertest.cpp @@ -132,6 +132,47 @@ QCOMPARE(serializer.objectUid(object), QStringLiteral("my-uid")); } + void shouldKnowTaskItemUid_data() + { + QTest::addColumn("item"); + QTest::addColumn("expectedUid"); + + Akonadi::Item item1; + KCalCore::Todo::Ptr todo1(new KCalCore::Todo); + todo1->setUid(QString()); + item1.setPayload(todo1); + + Akonadi::Item item2; + KCalCore::Todo::Ptr todo2(new KCalCore::Todo); + todo2->setUid(QStringLiteral("1")); + item2.setPayload(todo2); + + Akonadi::Item item3; + KMime::Message::Ptr message(new KMime::Message); + message->subject(true)->fromUnicodeString(QStringLiteral("foo"), "utf-8"); + message->mainBodyPart()->fromUnicodeString(QStringLiteral("bar")); + item3.setMimeType(Akonadi::NoteUtils::noteMimeType()); + item3.setPayload(message); + + QTest::newRow("task without uid") << item1 << QString(); + QTest::newRow("task with uid") << item2 << "1"; + QTest::newRow("note") << item3 << QString(); + } + + void shouldKnowTaskItemUid() + { + // GIVEN + QFETCH(Akonadi::Item, item); + QFETCH(QString, expectedUid); + + // WHEN + Akonadi::Serializer serializer; + QString uid = serializer.itemUid(item); + + // THEN + QCOMPARE(uid, expectedUid); + } + void shouldCreateDataSourceFromCollection_data() { QTest::addColumn("name");