void TagTest::testFetchTagIdWithItem() { const Collection res3 = Collection(collectionIdFromPath(QStringLiteral("res3"))); Tag tag; { TagCreateJob *createjob = new TagCreateJob(Tag(QStringLiteral("gid1")), this); AKVERIFYEXEC(createjob); tag = createjob->tag(); } Item item1; { item1.setMimeType(QStringLiteral("application/octet-stream")); item1.setTag(tag); ItemCreateJob *append = new ItemCreateJob(item1, res3, this); AKVERIFYEXEC(append); item1 = append->item(); } ItemFetchJob *fetchJob = new ItemFetchJob(item1, this); fetchJob->fetchScope().setFetchTags(true); fetchJob->fetchScope().tagFetchScope().setFetchIdOnly(true); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->items().first().tags().size(), 1); Tag t = fetchJob->items().first().tags().first(); QCOMPARE(t.id(), tag.id()); QVERIFY(t.gid().isEmpty()); TagDeleteJob *deleteJob = new TagDeleteJob(tag, this); AKVERIFYEXEC(deleteJob); }
void TagTest::testFetchItemsByTag() { const Collection res3 = Collection(collectionIdFromPath(QStringLiteral("res3"))); Tag tag; { TagCreateJob *createjob = new TagCreateJob(Tag(QStringLiteral("gid1")), this); AKVERIFYEXEC(createjob); tag = createjob->tag(); } Item item1; { item1.setMimeType(QStringLiteral("application/octet-stream")); ItemCreateJob *append = new ItemCreateJob(item1, res3, this); AKVERIFYEXEC(append); item1 = append->item(); //FIXME This should also be possible with create, but isn't item1.setTag(tag); } ItemModifyJob *modJob = new ItemModifyJob(item1, this); AKVERIFYEXEC(modJob); ItemFetchJob *fetchJob = new ItemFetchJob(tag, this); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->items().size(), 1); Item i = fetchJob->items().first(); QCOMPARE(i, item1); TagDeleteJob *deleteJob = new TagDeleteJob(tag, this); AKVERIFYEXEC(deleteJob); }
void TagTest::testModifyItemWithTagByGID() { const Collection res3 = Collection(collectionIdFromPath(QStringLiteral("res3"))); { Tag tag; tag.setGid("gid2"); TagCreateJob *createjob = new TagCreateJob(tag, this); AKVERIFYEXEC(createjob); } Item item1; { item1.setMimeType(QStringLiteral("application/octet-stream")); ItemCreateJob *append = new ItemCreateJob(item1, res3, this); AKVERIFYEXEC(append); item1 = append->item(); } Tag tag; tag.setGid("gid2"); item1.setTag(tag); ItemModifyJob *modJob = new ItemModifyJob(item1, this); AKVERIFYEXEC(modJob); ItemFetchJob *fetchJob = new ItemFetchJob(item1, this); fetchJob->fetchScope().setFetchTags(true); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->items().first().tags().size(), 1); TagDeleteJob *deleteJob = new TagDeleteJob(fetchJob->items().first().tags().first(), this); AKVERIFYEXEC(deleteJob); }
void CalendarResource::itemRemoved(const Akonadi::Item &item) { if (!canPerformTask()) { return; } if (item.mimeType() == KCalCore::Event::eventMimeType()) { KGAPI2::Job *job = new EventDeleteJob(item.remoteId(), item.parentCollection().remoteId(), account(), this); job->setProperty(ITEM_PROPERTY, QVariant::fromValue(item)); connect(job, &EventCreateJob::finished, this, &CalendarResource::slotGenericJobFinished); } else if (item.mimeType() == KCalCore::Todo::todoMimeType()) { /* Google always automatically removes tasks with all their subtasks. In KOrganizer * by default we only remove the item we are given. For this reason we have to first * fetch all tasks, find all sub-tasks for the task being removed and detach them * from the task. Only then the task can be safely removed. */ ItemFetchJob *fetchJob = new ItemFetchJob(item.parentCollection()); fetchJob->setAutoDelete(true); fetchJob->fetchScope().fetchFullPayload(true); fetchJob->setProperty(ITEM_PROPERTY, qVariantFromValue(item)); connect(fetchJob, &ItemFetchJob::finished, this, &CalendarResource::slotRemoveTaskFetchJobFinished); fetchJob->start(); } else { cancelTask(i18n("Invalid payload type. Expected event or todo, got %1", item.mimeType())); } }
void TransportResourceBasePrivate::send(Item::Id id) { ItemFetchJob *job = new ItemFetchJob(Item(id)); job->fetchScope().fetchFullPayload(); job->setProperty("id", QVariant(id)); connect(job, &KJob::result, this, &TransportResourceBasePrivate::fetchResult); }
void ItemAppendTest::testContent() { const Collection testFolder1(collectionIdFromPath(QStringLiteral("res2/space folder"))); QVERIFY(testFolder1.isValid()); QFETCH(QByteArray, data); Item item; item.setMimeType(QStringLiteral("application/octet-stream")); if (!data.isNull()) { item.setPayload(data); } ItemCreateJob *job = new ItemCreateJob(item, testFolder1, this); AKVERIFYEXEC(job); Item ref = job->item(); ItemFetchJob *fjob = new ItemFetchJob(testFolder1, this); fjob->fetchScope().setCacheOnly(true); fjob->fetchScope().fetchFullPayload(); AKVERIFYEXEC(fjob); QCOMPARE(fjob->items().count(), 1); Item item2 = fjob->items().first(); QCOMPARE(item2.hasPayload(), !data.isNull()); if (item2.hasPayload()) { QCOMPARE(item2.payload<QByteArray>(), data); } ItemDeleteJob *djob = new ItemDeleteJob(ref, this); AKVERIFYEXEC(djob); }
void ItemAppendTest::testMultipartAppend() { const Collection testFolder1(collectionIdFromPath(QStringLiteral("res2/space folder"))); QVERIFY(testFolder1.isValid()); Item item; item.setMimeType(QStringLiteral("application/octet-stream")); item.setPayload<QByteArray>("body data"); item.attribute<TestAttribute>(Item::AddIfMissing)->data = "extra data"; item.setFlag("TestFlag"); ItemCreateJob *job = new ItemCreateJob(item, testFolder1, this); AKVERIFYEXEC(job); Item ref = job->item(); ItemFetchJob *fjob = new ItemFetchJob(ref, this); fjob->fetchScope().fetchFullPayload(); fjob->fetchScope().fetchAttribute<TestAttribute>(); AKVERIFYEXEC(fjob); QCOMPARE(fjob->items().count(), 1); item = fjob->items().first(); QCOMPARE(item.payload<QByteArray>(), QByteArray("body data")); QVERIFY(item.hasAttribute<TestAttribute>()); QCOMPARE(item.attribute<TestAttribute>()->data, QByteArray("extra data")); QVERIFY(item.flags().contains("TestFlag")); ItemDeleteJob *djob = new ItemDeleteJob(ref, this); AKVERIFYEXEC(djob); }
void RetrieveItemsJob::Private::akonadiFetchResult(KJob *job) { if (job->error() != 0) { return; // handled by base class } ItemFetchJob *itemFetch = qobject_cast<ItemFetchJob *>(job); Q_ASSERT(itemFetch != 0); Item::List items = itemFetch->items(); itemFetch->clearItems(); // save memory qCDebug(MIXEDMAILDIR_LOG) << "Akonadi fetch got" << items.count() << "items"; mServerItemsByRemoteId.reserve(items.size()); for (int i = 0; i < items.count(); ++i) { Item &item = items[i]; // items without remoteId have not been written to the resource yet if (!item.remoteId().isEmpty()) { // set the parent collection (with all ancestors) in every item item.setParentCollection(mCollection); mServerItemsByRemoteId.insert(item.remoteId(), item); } } qCDebug(MIXEDMAILDIR_LOG) << "of which" << mServerItemsByRemoteId.count() << "have remoteId"; FileStore::ItemFetchJob *storeFetch = mStore->fetchItems(mCollection); // just basic items, no data connect(storeFetch, SIGNAL(result(KJob*)), q, SLOT(storeListResult(KJob*))); }
void FilterActionJob::doStart() { if ( d->collection.isValid() ) { kDebug() << "Fetching collection" << d->collection.id(); ItemFetchJob *fjob = new ItemFetchJob( d->collection, this ); Q_ASSERT( d->functor ); d->fetchScope = d->functor->fetchScope(); fjob->setFetchScope( d->fetchScope ); connect( fjob, SIGNAL(result(KJob*)), this, SLOT(fetchResult(KJob*)) ); } else {
void ConflictHandler::start() { if ( mConflictType == LocalLocalConflict || mConflictType == LocalRemoteConflict ) { ItemFetchJob *job = new ItemFetchJob( mConflictingItem, mSession ); job->fetchScope().fetchFullPayload(); job->fetchScope().setAncestorRetrieval( ItemFetchScope::Parent ); connect( job, SIGNAL(result(KJob*)), SLOT(slotOtherItemFetched(KJob*)) ); } else { resolve(); } }
void TagTest::testModifyItemWithTagByRID() { { ResourceSelectJob *select = new ResourceSelectJob(QStringLiteral("akonadi_knut_resource_0")); AKVERIFYEXEC(select); } const Collection res3 = Collection(collectionIdFromPath(QStringLiteral("res3"))); Tag tag3; { tag3.setGid("gid3"); tag3.setRemoteId("rid3"); TagCreateJob *createjob = new TagCreateJob(tag3, this); AKVERIFYEXEC(createjob); tag3 = createjob->tag(); } Item item1; { item1.setMimeType(QStringLiteral("application/octet-stream")); ItemCreateJob *append = new ItemCreateJob(item1, res3, this); AKVERIFYEXEC(append); item1 = append->item(); } Tag tag; tag.setRemoteId("rid2"); item1.setTag(tag); ItemModifyJob *modJob = new ItemModifyJob(item1, this); AKVERIFYEXEC(modJob); ItemFetchJob *fetchJob = new ItemFetchJob(item1, this); fetchJob->fetchScope().setFetchTags(true); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->items().first().tags().size(), 1); { TagDeleteJob *deleteJob = new TagDeleteJob(fetchJob->items().first().tags().first(), this); AKVERIFYEXEC(deleteJob); } { TagDeleteJob *deleteJob = new TagDeleteJob(tag3, this); AKVERIFYEXEC(deleteJob); } { ResourceSelectJob *select = new ResourceSelectJob(QStringLiteral("")); AKVERIFYEXEC(select); } }
void FilterActionJob::Private::fetchResult( KJob *job ) { if ( job->error() ) { // KCompositeJob takes care of errors. return; } ItemFetchJob *fjob = dynamic_cast<ItemFetchJob*>( job ); Q_ASSERT( fjob ); Q_ASSERT( items.isEmpty() ); items = fjob->items(); traverseItems(); }
void testCopy() { const Collection target(collectionIdFromPath(QStringLiteral("res3"))); QVERIFY(target.isValid()); ItemCopyJob *copy = new ItemCopyJob(Item(1), target); AKVERIFYEXEC(copy); Item source(1); ItemFetchJob *sourceFetch = new ItemFetchJob(source); AKVERIFYEXEC(sourceFetch); source = sourceFetch->items().first(); ItemFetchJob *fetch = new ItemFetchJob(target); fetch->fetchScope().fetchFullPayload(); fetch->fetchScope().fetchAllAttributes(); fetch->fetchScope().setCacheOnly(true); AKVERIFYEXEC(fetch); QCOMPARE(fetch->items().count(), 1); Item item = fetch->items().first(); QVERIFY(item.hasPayload()); QVERIFY(source.size() > 0); QVERIFY(item.size() > 0); QCOMPARE(item.size(), source.size()); QCOMPARE(item.attributes().count(), 1); QVERIFY(item.remoteId().isEmpty()); QEXPECT_FAIL("", "statistics are not properly updated after copy", Abort); QCOMPARE(target.statistics().count(), 1ll); }
void TransportResourceBasePrivate::fetchResult(KJob *job) { if (job->error()) { const Item::Id id = job->property("id").toLongLong(); emit transportResult(id, (int)TransportResourceBase::TransportFailed, job->errorText()); return; } ItemFetchJob *fetchJob = qobject_cast<ItemFetchJob *>(job); Q_ASSERT(fetchJob); const Item item = fetchJob->items().at(0); q->sendItem(item); }
void CalendarResource::itemAdded(const Akonadi::Item &item, const Akonadi::Collection &collection) { if ((!collection.contentMimeTypes().contains(KCalCore::Event::eventMimeType()) && !collection.contentMimeTypes().contains(KCalCore::Todo::todoMimeType())) || (!canPerformTask<KCalCore::Event::Ptr>(item, KCalCore::Event::eventMimeType()) && !canPerformTask<KCalCore::Todo::Ptr>(item, KCalCore::Todo::todoMimeType()))) { return; } if (collection.parentCollection() == Akonadi::Collection::root()) { cancelTask(i18n("The top-level collection cannot contain any tasks or events")); return; } KGAPI2::Job *job = Q_NULLPTR; if (item.hasPayload<KCalCore::Event::Ptr>()) { KCalCore::Event::Ptr event = item.payload<KCalCore::Event::Ptr>(); EventPtr kevent(new Event(*event)); kevent->setUid(QLatin1String("")); job = new EventCreateJob(kevent, collection.remoteId(), account(), this); } else if (item.hasPayload<KCalCore::Todo::Ptr>()) { KCalCore::Todo::Ptr todo = item.payload<KCalCore::Todo::Ptr>(); TaskPtr ktodo(new Task(*todo)); ktodo->setUid(QLatin1String("")); if (!ktodo->relatedTo(KCalCore::Incidence::RelTypeParent).isEmpty()) { Akonadi::Item parentItem; parentItem.setGid(ktodo->relatedTo(KCalCore::Incidence::RelTypeParent)); ItemFetchJob *fetchJob = new ItemFetchJob(parentItem, this); fetchJob->setProperty(ITEM_PROPERTY, QVariant::fromValue(item)); fetchJob->setProperty(TASK_PROPERTY, QVariant::fromValue(ktodo)); connect(fetchJob, &ItemFetchJob::finished, this, &CalendarResource::slotTaskAddedSearchFinished); return; } else { job = new TaskCreateJob(ktodo, collection.remoteId(), account(), this); } } else { cancelTask(i18n("Invalid payload type")); return; } job->setProperty(ITEM_PROPERTY, QVariant::fromValue(item)); connect(job, &EventCreateJob::finished, this, &CalendarResource::slotCreateJobFinished); }
void ConflictHandler::slotOtherItemFetched( KJob *job ) { if ( job->error() ) { emit error( job->errorText() ); //TODO: extend error message return; } ItemFetchJob *fetchJob = qobject_cast<ItemFetchJob*>( job ); if ( fetchJob->items().isEmpty() ) { emit error( i18n( "Did not find other item for conflict handling" ) ); return; } mConflictingItem = fetchJob->items().first(); QMetaObject::invokeMethod( this, "resolve", Qt::QueuedConnection ); }
void RecursiveMover::replayNextItem() { Q_ASSERT( m_currentCollection.isValid() ); if ( m_pendingItems.isEmpty() ) { replayNextCollection(); // all items processed here return; } else { Q_ASSERT( m_currentAction == None ); m_currentItem = m_pendingItems.takeFirst(); ItemFetchJob *job = new ItemFetchJob( m_currentItem, this ); job->fetchScope().fetchFullPayload(); connect( job, SIGNAL(result(KJob*)), SLOT(itemFetchResult(KJob*)) ); addSubjob( job ); ++m_runningJobs; } }
void AkonadiSlave::stat(const QUrl &url) { qCDebug(AKONADISLAVE_LOG) << url; // Stats for a collection if (Collection::fromUrl(url).isValid()) { Collection collection = Collection::fromUrl(url); if (collection != Collection::root()) { // Check that the collection exists. CollectionFetchJob *job = new CollectionFetchJob(collection, CollectionFetchJob::Base); if (!job->exec()) { error(KIO::ERR_INTERNAL, job->errorString()); return; } if (job->collections().count() != 1) { error(KIO::ERR_DOES_NOT_EXIST, i18n("No such item.")); return; } collection = job->collections().at(0); } statEntry(entryForCollection(collection)); finished(); } // Stats for an item else if (Item::fromUrl(url).isValid()) { ItemFetchJob *job = new ItemFetchJob(Item::fromUrl(url)); if (!job->exec()) { error(KIO::ERR_INTERNAL, job->errorString()); return; } if (job->items().count() != 1) { error(KIO::ERR_DOES_NOT_EXIST, i18n("No such item.")); return; } const Item item = job->items().at(0); statEntry(entryForItem(item)); finished(); } }
void RecursiveMover::itemFetchResult( KJob *job ) { Q_ASSERT( m_currentAction == None ); --m_runningJobs; if ( job->error() ) return; // error handling is in the base class ItemFetchJob *fetchJob = qobject_cast<ItemFetchJob*>( job ); if ( fetchJob->items().size() == 1 ) { m_currentAction = AddItem; m_agentBase->itemAdded( fetchJob->items().first(), m_currentCollection ); } else { // deleted since we started, skip m_currentItem = Item(); replayNextItem(); } }
void ItemAppendTest::testNewMimetype() { const Collection col(collectionIdFromPath(QStringLiteral("res2/space folder"))); QVERIFY(col.isValid()); Item item; item.setMimeType(QStringLiteral("application/new-type")); ItemCreateJob *job = new ItemCreateJob(item, col, this); AKVERIFYEXEC(job); item = job->item(); QVERIFY(item.isValid()); ItemFetchJob *fetch = new ItemFetchJob(item, this); AKVERIFYEXEC(fetch); QCOMPARE(fetch->items().count(), 1); QCOMPARE(fetch->items().first().mimeType(), item.mimeType()); }
void ItemAppendTest::testItemSize() { QFETCH(Akonadi::Item, item); QFETCH(qint64, size); const Collection col(collectionIdFromPath(QStringLiteral("res2/space folder"))); QVERIFY(col.isValid()); ItemCreateJob *create = new ItemCreateJob(item, col, this); AKVERIFYEXEC(create); Item newItem = create->item(); ItemFetchJob *fetch = new ItemFetchJob(newItem, this); AKVERIFYEXEC(fetch); QCOMPARE(fetch->items().count(), 1); QCOMPARE(fetch->items().first().size(), size); }
void testIllegalMove() { Collection col( collectionIdFromPath( "res2" ) ); QVERIFY( col.isValid() ); ItemFetchJob *prefetchjob = new ItemFetchJob( Item( 1 ) ); AKVERIFYEXEC( prefetchjob ); QCOMPARE( prefetchjob->items().count(), 1 ); Item item = prefetchjob->items()[0]; // move into invalid collection ItemMoveJob *store = new ItemMoveJob( item, Collection( INT_MAX ), this ); QVERIFY( !store->exec() ); // move item into folder that doesn't support its mimetype store = new ItemMoveJob( item, col, this ); QEXPECT_FAIL( "", "Check not yet implemented by the server.", Continue ); QVERIFY( !store->exec() ); }
void TagTest::testTagItem() { Akonadi::Monitor monitor; monitor.itemFetchScope().setFetchTags(true); monitor.setAllMonitored(true); const Collection res3 = Collection(collectionIdFromPath(QStringLiteral("res3"))); Tag tag; { TagCreateJob *createjob = new TagCreateJob(Tag(QStringLiteral("gid1")), this); AKVERIFYEXEC(createjob); tag = createjob->tag(); } Item item1; { item1.setMimeType(QStringLiteral("application/octet-stream")); ItemCreateJob *append = new ItemCreateJob(item1, res3, this); AKVERIFYEXEC(append); item1 = append->item(); } item1.setTag(tag); QSignalSpy tagsSpy(&monitor, SIGNAL(itemsTagsChanged(Akonadi::Item::List,QSet<Akonadi::Tag>,QSet<Akonadi::Tag>))); QVERIFY(tagsSpy.isValid()); ItemModifyJob *modJob = new ItemModifyJob(item1, this); AKVERIFYEXEC(modJob); QTRY_VERIFY(tagsSpy.count() >= 1); QTRY_COMPARE(tagsSpy.last().first().value<Akonadi::Item::List>().first().id(), item1.id()); QTRY_COMPARE(tagsSpy.last().at(1).value< QSet<Tag> >().size(), 1); //1 added tag ItemFetchJob *fetchJob = new ItemFetchJob(item1, this); fetchJob->fetchScope().setFetchTags(true); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->items().first().tags().size(), 1); TagDeleteJob *deleteJob = new TagDeleteJob(tag, this); AKVERIFYEXEC(deleteJob); }
void InfoCommand::onItemsFetched(KJob *job) { if (job->error() != 0) { emit error(job->errorString()); emit finished(RuntimeError); return; } ItemFetchJob *fetchJob = qobject_cast<ItemFetchJob *>(job); Q_ASSERT(fetchJob!=0); Item::List items = fetchJob->items(); if (items.count()<1) { emit error(i18nc("@info:shell", "Cannot find '%1' as a collection or item", mEntityArg)); emit finished(RuntimeError); return; } mInfoItem = new Item(items.first()); fetchParentPath(mInfoItem->parentCollection()); }
void testMove() { QFETCH( Item::List, items ); QFETCH( Collection, destination ); Collection source( collectionIdFromPath( "res1/foo" ) ); QVERIFY( source.isValid() ); ResourceSelectJob *select = new ResourceSelectJob( "akonadi_knut_resource_0" ); AKVERIFYEXEC( select ); // for rid based moves ItemFetchJob *prefetchjob = new ItemFetchJob( destination, this ); AKVERIFYEXEC( prefetchjob ); int baseline = prefetchjob->items().size(); ItemMoveJob *move = new ItemMoveJob( items, destination, this ); AKVERIFYEXEC( move ); ItemFetchJob *fetch = new ItemFetchJob( destination, this ); fetch->fetchScope().fetchFullPayload(); AKVERIFYEXEC( fetch ); QCOMPARE( fetch->items().count(), items.count() + baseline ); foreach ( const Item& movedItem, fetch->items() ) { QVERIFY( movedItem.hasPayload() ); QVERIFY( !movedItem.payload<QByteArray>().isEmpty() ); } }
void akonadimailsearch::onItemsFetched(KJob *job) { if (job->error()) { kWarning() << job->errorString(); } else { ItemFetchJob *itemFetchJob = qobject_cast<ItemFetchJob*>(job); foreach (const Item &item, itemFetchJob->items()) { if(item.hasPayload<KABC::Addressee>()) { const QString id = item.url().prettyUrl(); const KABC::Addressee contact = item.payload<KABC::Addressee>(); QTextStream out(stdout); if(contact.preferredEmail().size() > 0 && \ ( contact.preferredEmail().contains(mysearch) || contact.formattedName().contains(mysearch) )){ out << contact.formattedName() << " <" << contact.preferredEmail()<< ">" <<endl; } } } } if (--activeFetchJobsCount == 0) { emit finished(); } }
void MailDirRemoveReadMessages::runTest() { timer.start(); qDebug() << " Removing read messages from every folder."; CollectionFetchJob *clj4 = new CollectionFetchJob(Collection::root(), CollectionFetchJob::Recursive); clj4->fetchScope().setResource(currentInstance.identifier()); clj4->exec(); const Collection::List list4 = clj4->collections(); for (const Collection &collection : list4) { ItemFetchJob *ifj = new ItemFetchJob(collection, this); ifj->exec(); const auto items = ifj->items(); for (const Item &item : items) { // delete read messages if (item.hasFlag("\\SEEN")) { ItemDeleteJob *idj = new ItemDeleteJob(item, this); idj->exec(); } } } outputStats(QStringLiteral("removereaditems")); }
void akonadimailsearch::onCollectionsFetched(KJob* job) { if (job->error()) { kWarning() << job->errorString(); emit finished(); } else { CollectionFetchJob *fetchJob = qobject_cast<CollectionFetchJob*>(job); QList<Collection> contactCollections; foreach (const Collection &collection, fetchJob->collections()) { if (collection.isVirtual()) { continue; } if (collection.contentMimeTypes().contains( KABC::Addressee::mimeType() ) ) { ItemFetchJob *itemFetchJob = new ItemFetchJob(collection); itemFetchJob->fetchScope().fetchFullPayload(); connect(itemFetchJob, SIGNAL(finished(KJob*)), SLOT(onItemsFetched(KJob*))); ++activeFetchJobsCount; } } if (activeFetchJobsCount == 0) { emit finished(); } } }
void InfoCommand::fetchItems() { Item item; // See if user input is a valid integer as an item ID bool ok; int id = mEntityArg.toInt(&ok); if (ok) item = Item(id); // conversion succeeded else { // Otherwise check if we have an Akonadi URL const KUrl url = QUrl::fromUserInput(mEntityArg); if (url.isValid() && url.scheme()==QLatin1String("akonadi")) { item = Item::fromUrl(url); } else { emit error(i18nc("@info:shell", "Invalid item/collection syntax")); emit finished(RuntimeError); return; } } ItemFetchJob *job = new ItemFetchJob(item, this); job->fetchScope().setFetchModificationTime(true); job->fetchScope().fetchAllAttributes(true); // Need this so that parentCollection() will be valid. job->fetchScope().setAncestorRetrieval(ItemFetchScope::Parent); // Not actually going to use the payload here, but if we don't set it // to be fetched then hasPayload() will not return a meaningful result. job->fetchScope().fetchFullPayload(true); connect(job, SIGNAL(result(KJob *)), SLOT(onItemsFetched(KJob *))); }
void RelationTest::testCreateFetch() { const Collection res3 = Collection(collectionIdFromPath(QStringLiteral("res3"))); Item item1; { item1.setMimeType(QStringLiteral("application/octet-stream")); ItemCreateJob *append = new ItemCreateJob(item1, res3, this); AKVERIFYEXEC(append); item1 = append->item(); } Item item2; { item2.setMimeType(QStringLiteral("application/octet-stream")); ItemCreateJob *append = new ItemCreateJob(item2, res3, this); AKVERIFYEXEC(append); item2 = append->item(); } Relation rel(Relation::GENERIC, item1, item2); RelationCreateJob *createjob = new RelationCreateJob(rel, this); AKVERIFYEXEC(createjob); //Test fetch & create { RelationFetchJob *fetchJob = new RelationFetchJob(QVector<QByteArray>(), this); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->relations().size(), 1); QCOMPARE(fetchJob->relations().first().type(), QByteArray(Relation::GENERIC)); } //Test item fetch { ItemFetchJob *fetchJob = new ItemFetchJob(item1); fetchJob->fetchScope().setFetchRelations(true); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->items().first().relations().size(), 1); } { ItemFetchJob *fetchJob = new ItemFetchJob(item2); fetchJob->fetchScope().setFetchRelations(true); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->items().first().relations().size(), 1); } //Test delete { RelationDeleteJob *deleteJob = new RelationDeleteJob(rel, this); AKVERIFYEXEC(deleteJob); RelationFetchJob *fetchJob = new RelationFetchJob(QVector<QByteArray>(), this); AKVERIFYEXEC(fetchJob); QCOMPARE(fetchJob->relations().size(), 0); } }