Branch 'kolab/integration/4.13.0' - 2 commits - resources/imap resources/kolab
Christian Mollekopf
mollekopf at kolabsys.com
Fri Oct 24 15:59:17 CEST 2014
resources/imap/resourcetask.cpp | 77 ++++++++++++++++++++++++---------
resources/imap/resourcetask.h | 1
resources/kolab/kolabchangetagtask.cpp | 2
3 files changed, 60 insertions(+), 20 deletions(-)
New commits:
commit 4c2ad277dec69db91f78af5ee637dff476447969
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Fri Oct 24 10:53:07 2014 +0200
KolabResource: Don't overwrite tag remoteId with old value.
We already stored the tag in TagChangeHelper, so simply call changeProcessed
and don't overwrite the tag again with the original copy.
diff --git a/resources/kolab/kolabchangetagtask.cpp b/resources/kolab/kolabchangetagtask.cpp
index 845d445..942f403 100644
--- a/resources/kolab/kolabchangetagtask.cpp
+++ b/resources/kolab/kolabchangetagtask.cpp
@@ -77,5 +77,5 @@ void KolabChangeTagTask::onCancelTask(const QString &errorText)
void KolabChangeTagTask::onChangeCommitted()
{
- changeCommitted(resourceState()->tag());
+ changeProcessed();
}
commit 2555561d7fdce2976c63a35011f5cc1fa46b811d
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Tue Oct 21 09:29:44 2014 +0200
ImapResource: Block calls in ResourceTask after cancelTask
If the task get's externally (not by the task itself) cancelled
(i.e. by a dropped connection), the task my be running a job and once it
returns i.e. cancel the task again.
This results in ResourceBase methods getting called while no task is active,
ending in an assert.
This patch simply isolates ResourceTask once cancelTask has been called.
diff --git a/resources/imap/resourcetask.cpp b/resources/imap/resourcetask.cpp
index 5df0ab9..cc991d1 100644
--- a/resources/imap/resourcetask.cpp
+++ b/resources/imap/resourcetask.cpp
@@ -37,7 +37,8 @@ ResourceTask::ResourceTask( ActionIfNoSession action, ResourceStateInterface::Pt
m_sessionRequestId( 0 ),
m_session( 0 ),
m_actionIfNoSession( action ),
- m_resource( resource )
+ m_resource( resource ),
+ mCancelled( false )
{
}
@@ -248,106 +249,144 @@ QString ResourceTask::mailBoxForCollection( const Akonadi::Collection &collectio
void ResourceTask::setIdleCollection( const Akonadi::Collection &collection )
{
- m_resource->setIdleCollection( collection );
+ if (!mCancelled) {
+ m_resource->setIdleCollection( collection );
+ }
}
void ResourceTask::applyCollectionChanges( const Akonadi::Collection &collection )
{
- m_resource->applyCollectionChanges( collection );
+ if (!mCancelled) {
+ m_resource->applyCollectionChanges( collection );
+ }
}
void ResourceTask::itemRetrieved( const Akonadi::Item &item )
{
- m_resource->itemRetrieved( item );
- emitPercent(100);
+ if (!mCancelled) {
+ m_resource->itemRetrieved( item );
+ emitPercent(100);
+ }
deleteLater();
}
void ResourceTask::itemsRetrieved( const Akonadi::Item::List &items )
{
- m_resource->itemsRetrieved( items );
+ if (!mCancelled) {
+ m_resource->itemsRetrieved( items );
+ }
}
void ResourceTask::itemsRetrievedIncremental( const Akonadi::Item::List &changed,
const Akonadi::Item::List &removed )
{
- m_resource->itemsRetrievedIncremental( changed, removed );
+ if (!mCancelled) {
+ m_resource->itemsRetrievedIncremental( changed, removed );
+ }
}
void ResourceTask::itemsRetrievalDone()
{
- m_resource->itemsRetrievalDone();
+ if (!mCancelled) {
+ m_resource->itemsRetrievalDone();
+ }
deleteLater();
}
void ResourceTask::setTotalItems(int totalItems)
{
- m_resource->setTotalItems(totalItems);
+ if (!mCancelled) {
+ m_resource->setTotalItems(totalItems);
+ }
}
void ResourceTask::changeCommitted( const Akonadi::Item &item )
{
- m_resource->itemChangeCommitted( item );
+ if (!mCancelled) {
+ m_resource->itemChangeCommitted( item );
+ }
deleteLater();
}
void ResourceTask::changesCommitted(const Akonadi::Item::List& items)
{
- m_resource->itemsChangesCommitted( items );
+ if (!mCancelled) {
+ m_resource->itemsChangesCommitted( items );
+ }
deleteLater();
}
void ResourceTask::searchFinished( const QVector<qint64> &result, bool isRid )
{
- m_resource->searchFinished( result, isRid );
+ if (!mCancelled) {
+ m_resource->searchFinished( result, isRid );
+ }
deleteLater();
}
void ResourceTask::collectionsRetrieved( const Akonadi::Collection::List &collections )
{
- m_resource->collectionsRetrieved( collections );
+ if (!mCancelled) {
+ m_resource->collectionsRetrieved( collections );
+ }
deleteLater();
}
void ResourceTask::collectionAttributesRetrieved(const Akonadi::Collection& col)
{
- m_resource->collectionAttributesRetrieved( col );
+ if (!mCancelled) {
+ m_resource->collectionAttributesRetrieved( col );
+ }
deleteLater();
}
void ResourceTask::changeCommitted( const Akonadi::Collection &collection )
{
- m_resource->collectionChangeCommitted( collection );
+ if (!mCancelled) {
+ m_resource->collectionChangeCommitted( collection );
+ }
deleteLater();
}
void ResourceTask::changeCommitted( const Akonadi::Tag &tag )
{
+ if (!mCancelled) {
m_resource->tagChangeCommitted( tag );
+ }
deleteLater();
}
void ResourceTask::changeProcessed()
{
- m_resource->changeProcessed();
+ if (!mCancelled) {
+ m_resource->changeProcessed();
+ }
deleteLater();
}
void ResourceTask::cancelTask( const QString &errorString )
{
- m_resource->cancelTask( errorString );
+ if (!mCancelled) {
+ mCancelled = true;
+ m_resource->cancelTask( errorString );
+ }
deleteLater();
}
void ResourceTask::deferTask()
{
- m_resource->deferTask();
+ if (!mCancelled) {
+ mCancelled = true;
+ m_resource->deferTask();
+ }
deleteLater();
}
void ResourceTask::restartItemRetrieval(Akonadi::Entity::Id col)
{
- m_resource->restartItemRetrieval(col);
+ if (!mCancelled) {
+ m_resource->restartItemRetrieval(col);
+ }
deleteLater();
}
diff --git a/resources/imap/resourcetask.h b/resources/imap/resourcetask.h
index 4c47358..3ccdd4c 100644
--- a/resources/imap/resourcetask.h
+++ b/resources/imap/resourcetask.h
@@ -163,6 +163,7 @@ private:
KIMAP::Session *m_session;
ActionIfNoSession m_actionIfNoSession;
ResourceStateInterface::Ptr m_resource;
+ bool mCancelled;
};
#endif
More information about the commits
mailing list