20 #include "transactionsequence.h"
21 #include "transactionjobs.h"
25 #include <QtCore/QSet>
26 #include <QtCore/QVariant>
28 using namespace Akonadi;
30 class Akonadi::TransactionSequencePrivate :
public JobPrivate
51 TransactionState mState;
52 QSet<KJob*> mIgnoredErrorJobs;
55 void commitResult( KJob *job )
60 q->setError( job->error() );
61 q->setErrorText( job->errorText() );
66 void rollbackResult( KJob *job )
76 :
Job( new TransactionSequencePrivate( this ), parent )
89 if ( d->mState == TransactionSequencePrivate::Idle && !property(
"transactionsDisabled" ).toBool() ) {
90 d->mState = TransactionSequencePrivate::Running;
93 d->mState = TransactionSequencePrivate::Running;
98 void TransactionSequence::slotResult(KJob * job)
102 if ( !job->error() || d->mIgnoredErrorJobs.contains( job ) ) {
107 Job::slotResult( job );
111 if ( !hasSubjobs() && d->mState == TransactionSequencePrivate::WaitingForSubjobs ) {
112 if ( property(
"transactionsDisabled" ).toBool() ) {
116 d->mState = TransactionSequencePrivate::Committing;
118 connect( job, SIGNAL(result(KJob*)), SLOT(commitResult(KJob*)) );
121 setError( job->error() );
122 setErrorText( job->errorText() );
126 foreach ( KJob* job, subjobs() ) {
127 disconnect( job, SIGNAL(result(KJob*)),
this, SLOT(slotResult(KJob*)) );
128 job->kill( EmitResult );
132 if ( d->mState == TransactionSequencePrivate::Running || d->mState == TransactionSequencePrivate::WaitingForSubjobs ) {
133 if ( property(
"transactionsDisabled" ).toBool() ) {
137 d->mState = TransactionSequencePrivate::RollingBack;
139 connect( job, SIGNAL(result(KJob*)), SLOT(rollbackResult(KJob*)) );
148 if ( d->mState == TransactionSequencePrivate::Running ) {
149 d->mState = TransactionSequencePrivate::WaitingForSubjobs;
153 if ( d->mState == TransactionSequencePrivate::Idle )
158 if ( subjobs().isEmpty() ) {
159 if ( property(
"transactionsDisabled" ).toBool() ) {
164 d->mState = TransactionSequencePrivate::Committing;
166 connect( job, SIGNAL(result(KJob*)), SLOT(commitResult(KJob*)) );
168 d->mState = TransactionSequencePrivate::RollingBack;
170 connect( job, SIGNAL(result(KJob*)), SLOT(rollbackResult(KJob*)) );
180 Q_ASSERT( subjobs().contains( job ) );
182 d->mIgnoredErrorJobs.insert( job );
189 if ( d->mAutoCommit ) {
190 if ( d->mState == TransactionSequencePrivate::Idle )
200 d->mAutoCommit = enable;
209 if ( d->mState == TransactionSequencePrivate::Idle ) {
216 d->mState = TransactionSequencePrivate::RollingBack;
218 connect( job, SIGNAL(result(KJob*)), SLOT(rollbackResult(KJob*)) );
222 #include "moc_transactionsequence.cpp"