QString timetrackerstorage::addTask(const Task* task, const Task* parent) { kDebug(5970) << "Entering function"; KCalCore::Todo::Ptr todo; QString uid; if ( !d->mCalendar ) { kDebug(5970) << "mCalendar is not set"; return uid; } todo = KCalCore::Todo::Ptr( new KCalCore::Todo() ); if ( d->mCalendar->addTodo( todo ) ) { task->asTodo( todo ); if (parent) todo->setRelatedTo( parent->uid() ); uid = todo->uid(); } else { // Most likely a lock could not be pulled, although there are other // possiblities (like a really confused resource manager). uid.clear();; } return uid; }
void KCalConversionTest::testTodoConversion() { QFETCH(KCalCore::Todo, kcal); QFETCH(Kolab::Todo, kolab); const KCalCore::Todo::Ptr e = toKCalCore(kolab); QCOMPARE(e->uid(), kcal.uid()); QCOMPARE(e->dtStart(), kcal.dtStart()); QCOMPARE(e->dtDue(), kcal.dtDue()); QCOMPARE(e->relatedTo(KCalCore::Incidence::RelTypeParent), kcal.relatedTo(KCalCore::Incidence::RelTypeParent)); const Kolab::Todo &b = fromKCalCore(kcal); QCOMPARE(b.uid(), kolab.uid()); QCOMPARE(b.start(), kolab.start()); QCOMPARE(b.due(), kolab.due()); QCOMPARE(b.relatedTo(), kolab.relatedTo()); }
KCalCore::Event::Ptr timetrackerstorage::baseEvent(const KCalCore::Todo::Ptr &todo) { kDebug(5970) << "Entering function"; KCalCore::Event::Ptr e( new KCalCore::Event() ); QStringList categories; e->setSummary(todo->summary()); // Can't use setRelatedToUid()--no error, but no RelatedTo written to disk e->setRelatedTo( todo->uid() ); // Have to turn this off to get datetimes in date fields. e->setAllDay(false); e->setDtStart(KDateTime(todo->dtStart())); // So someone can filter this mess out of their calendar display categories.append(i18n("KTimeTracker")); e->setCategories(categories); return e; }
Akonadi::Item::List Serializer::filterDescendantItems(const Akonadi::Item::List &potentialChildren, const Akonadi::Item &ancestorItem) { if (potentialChildren.isEmpty()) return Akonadi::Item::List(); Akonadi::Item::List itemsToProcess = potentialChildren; Q_ASSERT(ancestorItem.isValid() && ancestorItem.hasPayload<KCalCore::Todo::Ptr>()); KCalCore::Todo::Ptr todo = ancestorItem.payload<KCalCore::Todo::Ptr>(); const auto bound = std::partition(itemsToProcess.begin(), itemsToProcess.end(), [ancestorItem, todo](Akonadi::Item currentItem) { return (!currentItem.hasPayload<KCalCore::Todo::Ptr>() || currentItem == ancestorItem || currentItem.payload<KCalCore::Todo::Ptr>()->relatedTo() != todo->uid()); }); Akonadi::Item::List itemsRemoved; std::copy(itemsToProcess.begin(), bound, std::back_inserter(itemsRemoved)); itemsToProcess.erase(itemsToProcess.begin(), bound); auto result = std::accumulate(itemsToProcess.begin(), itemsToProcess.end(), Akonadi::Item::List(), [this, itemsRemoved](Akonadi::Item::List result, Akonadi::Item currentItem) { result << currentItem; return result += filterDescendantItems(itemsRemoved, currentItem); }); return result; }