[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdepim/akonadi/libakonadi
From: Volker Krause <volker.krause () rwth-aachen ! de>
Date: 2006-09-24 16:04:37
Message-ID: 1159113877.642998.9810.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 587985 by vkrause:
- Add transaction management jobs
- Use a transactions for item deletion, this fixes the additional emitting of an item \
change notification on deletion
M +2 -0 CMakeLists.txt
M +47 -16 itemdeletejob.cpp
M +1 -2 itemdeletejob.h
M +0 -2 tests/monitortest.cpp
A transactionjobs.cpp [License: LGPL (v2+)]
A transactionjobs.h [License: LGPL (v2+)]
--- trunk/KDE/kdepim/akonadi/libakonadi/CMakeLists.txt #587984:587985
@@ -46,6 +46,7 @@
monitor.cpp
profilemanager.cpp
profilemodel.cpp
+ transactionjobs.cpp
)
qt4_add_dbus_interfaces(akonadi_LIB_SRC \
${CMAKE_SOURCE_DIR}/akonadi/server/interfaces/org.kde.Akonadi.NotificationManager.xml)
@@ -90,6 +91,7 @@
messagequery.h
monitor.h
profilemanager.h
+ transactionjobs.h
DESTINATION ${INCLUDE_INSTALL_DIR}/libakonadi
)
--- trunk/KDE/kdepim/akonadi/libakonadi/itemdeletejob.cpp #587984:587985
@@ -20,13 +20,22 @@
#include "itemdeletejob.h"
#include "itemstorejob.h"
#include "expungejob.h"
+#include "transactionjobs.h"
using namespace PIM;
class PIM::ItemDeleteJobPrivate
{
public:
+ enum State {
+ Begin,
+ Store,
+ Expunge,
+ Commit
+ };
+
DataReference ref;
+ State state;
};
PIM::ItemDeleteJob::ItemDeleteJob(const DataReference & ref, QObject * parent) :
@@ -34,6 +43,7 @@
d( new ItemDeleteJobPrivate )
{
d->ref = ref;
+ d->state = ItemDeleteJobPrivate::Begin;
}
PIM::ItemDeleteJob::~ ItemDeleteJob()
@@ -43,31 +53,52 @@
void PIM::ItemDeleteJob::doStart()
{
- ItemStoreJob* job = new ItemStoreJob( d->ref, this );
- job->addFlag( "\\Deleted" );
- connect( job, SIGNAL(done(PIM::Job*)), SLOT(storeDone(PIM::Job*)) );
- job->start();
+ TransactionBeginJob *begin = new TransactionBeginJob( this );
+ connect( begin, SIGNAL(done(PIM::Job*)), SLOT(jobDone(PIM::Job*)) );
+ begin->start();
}
-void PIM::ItemDeleteJob::storeDone(PIM::Job * job)
+void PIM::ItemDeleteJob::jobDone(PIM::Job * job)
{
if ( job->error() ) {
setError( job->error(), job->errorMessage() );
+ job->deleteLater();
emit done( this );
- } else {
- job->deleteLater();
- ExpungeJob *ejob = new ExpungeJob( this );
- connect( ejob, SIGNAL(done(PIM::Job*)), SLOT(expungeDone(PIM::Job*)) );
- ejob->start();
+ return;
}
-}
-void PIM::ItemDeleteJob::expungeDone(PIM::Job * job)
-{
- if ( job->error() )
- setError( job->error(), job->errorMessage() );
+ switch ( d->state ) {
+ case ItemDeleteJobPrivate::Begin:
+ {
+ ItemStoreJob* store = new ItemStoreJob( d->ref, this );
+ store->addFlag( "\\Deleted" );
+ connect( store, SIGNAL(done(PIM::Job*)), SLOT(jobDone(PIM::Job*)) );
+ store->start();
+ d->state = ItemDeleteJobPrivate::Store;
+ break;
+ }
+ case ItemDeleteJobPrivate::Store:
+ {
+ ExpungeJob *expunge = new ExpungeJob( this );
+ connect( expunge, SIGNAL(done(PIM::Job*)), SLOT(jobDone(PIM::Job*)) );
+ expunge->start();
+ d->state = ItemDeleteJobPrivate::Expunge;
+ break;
+ }
+ case ItemDeleteJobPrivate::Expunge:
+ {
+ TransactionCommitJob *commit = new TransactionCommitJob( this );
+ connect( commit, SIGNAL(done(PIM::Job*)), SLOT(jobDone(PIM::Job*)) );
+ commit->start();
+ d->state = ItemDeleteJobPrivate::Commit;
+ break;
+ }
+ case ItemDeleteJobPrivate::Commit:
+ emit done( this );
+ break;
+ }
+
job->deleteLater();
- emit done( this );
}
#include "itemdeletejob.moc"
--- trunk/KDE/kdepim/akonadi/libakonadi/itemdeletejob.h #587984:587985
@@ -51,8 +51,7 @@
virtual void doStart();
private slots:
- void storeDone( PIM::Job* job );
- void expungeDone( PIM::Job* job );
+ void jobDone( PIM::Job* job );
private:
ItemDeleteJobPrivate *d;
--- trunk/KDE/kdepim/akonadi/libakonadi/tests/monitortest.cpp #587984:587985
@@ -114,7 +114,6 @@
QVERIFY( del->exec() );
qApp->processEvents();
- QEXPECT_FAIL( "", "deletion is splitted into two commands...", Continue );
QCOMPARE( cmspy.count(), 1 );
arg = cmspy.takeFirst();
QCOMPARE( arg.at(0).toByteArray(), QByteArray( "res3/monitor" ) );
@@ -128,7 +127,6 @@
QVERIFY( caspy.isEmpty() );
QVERIFY( crspy.isEmpty() );
QVERIFY( iaspy.isEmpty() );
- QEXPECT_FAIL( "", "deletion is splitted into two commands...", Continue );
QVERIFY( imspy.isEmpty() );
imspy.clear();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic