diff --git a/src/akonadi/akonadiserializerinterface.h b/src/akonadi/akonadiserializerinterface.h --- a/src/akonadi/akonadiserializerinterface.h +++ b/src/akonadi/akonadiserializerinterface.h @@ -86,6 +86,9 @@ virtual Akonadi::Item createItemFromNote(Domain::Note::Ptr note) = 0; + Domain::Artifact::Ptr createArtifactFromItem(const Akonadi::Item &item); + void updateArtifactFromItem(const Domain::Artifact::Ptr &artifact, const Akonadi::Item &item); + virtual bool isProjectItem(Akonadi::Item item) = 0; virtual Domain::Project::Ptr createProjectFromItem(Akonadi::Item item) = 0; virtual void updateProjectFromItem(Domain::Project::Ptr project, Akonadi::Item item) = 0; diff --git a/src/akonadi/akonadiserializerinterface.cpp b/src/akonadi/akonadiserializerinterface.cpp --- a/src/akonadi/akonadiserializerinterface.cpp +++ b/src/akonadi/akonadiserializerinterface.cpp @@ -35,6 +35,28 @@ { } +Domain::Artifact::Ptr SerializerInterface::createArtifactFromItem(const Item &item) +{ + if (isTaskItem(item)) { + auto task = createTaskFromItem(item); + return Domain::Artifact::Ptr(task); + } else if (isNoteItem(item)) { + auto note = createNoteFromItem(item); + return Domain::Artifact::Ptr(note); + } else { + return Domain::Artifact::Ptr(); + } +} + +void SerializerInterface::updateArtifactFromItem(const Domain::Artifact::Ptr &artifact, const Item &item) +{ + if (auto task = artifact.dynamicCast()) { + updateTaskFromItem(task, item); + } else if (auto note = artifact.dynamicCast()) { + updateNoteFromItem(note, item); + } +} + QByteArray SerializerInterface::contextTagType() { return QByteArray("Zanshin-Context"); 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 @@ -613,6 +613,7 @@ // WHEN Akonadi::Serializer serializer; Domain::Task::Ptr task = serializer.createTaskFromItem(item); + auto artifact = serializer.createArtifactFromItem(item).dynamicCast(); // THEN QCOMPARE(task->title(), summary); @@ -626,6 +627,19 @@ QCOMPARE(task->property("itemId").toLongLong(), item.id()); QCOMPARE(task->delegate().name(), delegateName); QCOMPARE(task->delegate().email(), delegateEmail); + + QVERIFY(!artifact.isNull()); + QCOMPARE(artifact->title(), summary); + QCOMPARE(artifact->text(), content); + QCOMPARE(artifact->isDone(), isDone); + QCOMPARE(artifact->doneDate(), doneDate); + QCOMPARE(artifact->startDate(), startDate); + QCOMPARE(artifact->dueDate(), dueDate); + QCOMPARE(artifact->property("todoUid").toString(), todo->uid()); + QCOMPARE(artifact->property("relatedUid").toString(), todo->relatedTo()); + QCOMPARE(artifact->property("itemId").toLongLong(), item.id()); + QCOMPARE(artifact->delegate().name(), delegateName); + QCOMPARE(artifact->delegate().email(), delegateEmail); } void shouldCreateNullTaskFromInvalidItem() @@ -636,9 +650,11 @@ // WHEN Akonadi::Serializer serializer; Domain::Task::Ptr task = serializer.createTaskFromItem(item); + auto artifact = serializer.createArtifactFromItem(item); // THEN QVERIFY(task.isNull()); + QVERIFY(artifact.isNull()); } void shouldCreateNullTaskFromProjectItem() @@ -658,9 +674,11 @@ // WHEN Akonadi::Serializer serializer; Domain::Task::Ptr task = serializer.createTaskFromItem(item); + auto artifact = serializer.createArtifactFromItem(item); // THEN QVERIFY(task.isNull()); + QVERIFY(artifact.isNull()); } void shouldUpdateTaskFromItem_data() @@ -705,6 +723,7 @@ // ... deserialized as a task Akonadi::Serializer serializer; auto task = serializer.createTaskFromItem(originalItem); + auto artifact = serializer.createArtifactFromItem(originalItem); // WHEN @@ -746,6 +765,7 @@ updatedItem.setPayload(updatedTodo); serializer.updateTaskFromItem(task, updatedItem); + serializer.updateArtifactFromItem(artifact, updatedItem); // THEN QCOMPARE(task->title(), updatedSummary); @@ -759,6 +779,19 @@ QCOMPARE(task->property("itemId").toLongLong(), updatedItem.id()); QCOMPARE(task->delegate().name(), updatedDelegateName); QCOMPARE(task->delegate().email(), updatedDelegateEmail); + + task = artifact.dynamicCast(); + QCOMPARE(task->title(), updatedSummary); + QCOMPARE(task->text(), updatedContent); + QCOMPARE(task->isDone(), updatedDone); + QCOMPARE(task->doneDate(), updatedDoneDate); + QCOMPARE(task->startDate(), updatedStartDate); + QCOMPARE(task->dueDate(), updatedDueDate); + QCOMPARE(task->property("todoUid").toString(), updatedTodo->uid()); + QCOMPARE(task->property("relatedUid").toString(), updatedTodo->relatedTo()); + QCOMPARE(task->property("itemId").toLongLong(), updatedItem.id()); + QCOMPARE(task->delegate().name(), updatedDelegateName); + QCOMPARE(task->delegate().email(), updatedDelegateEmail); } void shouldNotUpdateTaskFromInvalidItem() @@ -794,10 +827,12 @@ // ... deserialized as a task Akonadi::Serializer serializer; auto task = serializer.createTaskFromItem(originalItem); + auto artifact = serializer.createArtifactFromItem(originalItem); // WHEN Akonadi::Item invalidItem; serializer.updateTaskFromItem(task, invalidItem); + serializer.updateArtifactFromItem(artifact, invalidItem); // THEN QCOMPARE(task->title(), summary); @@ -807,6 +842,15 @@ QCOMPARE(task->startDate(), startDate); QCOMPARE(task->dueDate(), dueDate); QCOMPARE(task->property("itemId").toLongLong(), originalItem.id()); + + task = artifact.dynamicCast(); + QCOMPARE(task->title(), summary); + QCOMPARE(task->text(), content); + QCOMPARE(task->isDone(), isDone); + QCOMPARE(task->doneDate(), doneDate); + QCOMPARE(task->startDate(), startDate); + QCOMPARE(task->dueDate(), dueDate); + QCOMPARE(task->property("itemId").toLongLong(), originalItem.id()); } void shouldNotUpdateTaskFromProjectItem() @@ -842,6 +886,7 @@ // ... deserialized as a task Akonadi::Serializer serializer; auto task = serializer.createTaskFromItem(originalItem); + auto artifact = serializer.createArtifactFromItem(originalItem); // WHEN // A todo with the project flag @@ -854,6 +899,7 @@ projectItem.setMimeType("application/x-vnd.akonadi.calendar.todo"); projectItem.setPayload(projectTodo); serializer.updateTaskFromItem(task, projectItem); + serializer.updateArtifactFromItem(artifact, projectItem); // THEN QCOMPARE(task->title(), summary); @@ -863,6 +909,15 @@ QCOMPARE(task->startDate(), startDate); QCOMPARE(task->dueDate(), dueDate); QCOMPARE(task->property("itemId").toLongLong(), originalItem.id()); + + task = artifact.dynamicCast(); + QCOMPARE(task->title(), summary); + QCOMPARE(task->text(), content); + QCOMPARE(task->isDone(), isDone); + QCOMPARE(task->doneDate(), doneDate); + QCOMPARE(task->startDate(), startDate); + QCOMPARE(task->dueDate(), dueDate); + QCOMPARE(task->property("itemId").toLongLong(), originalItem.id()); } void shouldCreateItemFromTask_data() @@ -1157,12 +1212,19 @@ // WHEN Akonadi::Serializer serializer; Domain::Note::Ptr note = serializer.createNoteFromItem(item); + auto artifact = serializer.createArtifactFromItem(item).dynamicCast(); // THEN QCOMPARE(note->title(), title); QCOMPARE(note->text(), text); QCOMPARE(note->property("itemId").toLongLong(), item.id()); QCOMPARE(note->property("relatedUid").toString(), relatedUid); + + QVERIFY(!artifact.isNull()); + QCOMPARE(artifact->title(), title); + QCOMPARE(artifact->text(), text); + QCOMPARE(artifact->property("itemId").toLongLong(), item.id()); + QCOMPARE(artifact->property("relatedUid").toString(), relatedUid); } void shouldCreateNullNoteFromInvalidItem() @@ -1173,9 +1235,11 @@ // WHEN Akonadi::Serializer serializer; Domain::Note::Ptr note = serializer.createNoteFromItem(item); + auto artifact = serializer.createArtifactFromItem(item); // THEN QVERIFY(note.isNull()); + QVERIFY(artifact.isNull()); } void shouldUpdateNoteFromItem_data() @@ -1209,6 +1273,7 @@ //... deserialized as a note Akonadi::Serializer serializer; auto note = serializer.createNoteFromItem(item); + auto artifact = serializer.createNoteFromItem(item); // WHEN @@ -1234,12 +1299,19 @@ updatedItem.setPayload(updatedMessage); serializer.updateNoteFromItem(note, updatedItem); + serializer.updateArtifactFromItem(artifact, updatedItem); // THEN QCOMPARE(note->title(), updatedTitle); QCOMPARE(note->text(), updatedText); QCOMPARE(note->property("itemId").toLongLong(), updatedItem.id()); QCOMPARE(note->property("relatedUid").toString(), updatedRelatedUid); + + note = artifact.dynamicCast(); + QCOMPARE(note->title(), updatedTitle); + QCOMPARE(note->text(), updatedText); + QCOMPARE(note->property("itemId").toLongLong(), updatedItem.id()); + QCOMPARE(note->property("relatedUid").toString(), updatedRelatedUid); } void shouldNotUpdateNoteFromInvalidItem() @@ -1263,16 +1335,23 @@ //... deserialized as a note Akonadi::Serializer serializer; auto note = serializer.createNoteFromItem(item); + auto artifact = serializer.createArtifactFromItem(item); // WHEN Akonadi::Item invalidItem; serializer.updateNoteFromItem(note, invalidItem); + serializer.updateArtifactFromItem(artifact, invalidItem); //THEN QCOMPARE(note->title(), title); QCOMPARE(note->text(), text); QCOMPARE(note->property("itemId").toLongLong(), item.id()); + + note = artifact.dynamicCast(); + QCOMPARE(note->title(), title); + QCOMPARE(note->text(), text); + QCOMPARE(note->property("itemId").toLongLong(), item.id()); } void shouldCreateItemFromNote_data()