[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