diff -r 3a6baaa22be8 -r b66b8f3a7fd8 messagingfw/msgsrvnstore/server/src/MSVLOCAL.CPP --- a/messagingfw/msgsrvnstore/server/src/MSVLOCAL.CPP Tue Jul 06 22:57:17 2010 +0530 +++ b/messagingfw/msgsrvnstore/server/src/MSVLOCAL.CPP Wed Jul 21 02:03:54 2010 +0530 @@ -686,6 +686,125 @@ SetState(EMsvOperationCompleted); iMessage.Complete(KErrNone); } +//********************************** +// CMsvLocalChangeEntriesOperation +//********************************** + + +CMsvLocalChangeEntriesOperation::CMsvLocalChangeEntriesOperation(const RMessage2& aMessage, TMsvOp aId, CMsvEntrySelection* aSelection, CMsvServer& aMsvServer, TInt aMark) +: CMsvLocalOperation(aMessage, aId, aMsvServer), iSelection(aSelection), iMark(aMark) + { + __DECLARE_NAME(_S("CMsvLocalChangeEntriesOperation")); + // set up the progress + iProgress().iType = TMsvLocalOperationProgress::ELocalChanged; + iProgress().iTotalNumberOfEntries = iSelection->Count();; + iProgress().iNumberRemaining = iProgress().iTotalNumberOfEntries; + CActiveScheduler::Add(this); + } + +CMsvLocalChangeEntriesOperation::~CMsvLocalChangeEntriesOperation() +// +// +// + { + Cancel(); + delete iSelection; + delete iDelete; + delete iWorkSelection1; + delete iWorkSelection2; + } + +void CMsvLocalChangeEntriesOperation::DoCancel() +// +// +// + { + __ASSERT_DEBUG(iDelete!=NULL, PanicServer(EMsvChangeEntryBadState)); + iDelete->Cancel(); + iProgress().iError = KErrCancel; + Completed(); + } + +void CMsvLocalChangeEntriesOperation::RunL() +// +// +// + { + if (iStatus.Int()==KErrNone) + { + iProgress().iNumberCompleted++; + } + else + { + iProgress().iNumberFailed++; + iProgress().iError = iStatus.Int(); + } + + Completed(); + } + + +void CMsvLocalChangeEntriesOperation::StartL(TSecureId aOwnerId, TBool aForcedUpdate) +// +// +// + { + TMsvEntry* entry1; + + TInt count = iSelection->Count(); + while (count--) + { + iMsvServer.IndexAdapter().GetEntry(iSelection->At(count),entry1); + iId = entry1->Id(); + iParent = entry1->Parent(); + // check if this is actually a deletion + if (entry1->Deleted() && entry1->PcSyncCount()==0) + { + iDelete = CMsvDelete::NewL(iMsvServer); + iWorkSelection1 = new(ELeave)CMsvEntrySelection; + iWorkSelection2 = new(ELeave)CMsvEntrySelection; + + iDelete->StartL(entry1->Id(), *iWorkSelection1, *iWorkSelection2, iStatus, ETrue); + SetActive(); + return; + } + } + + TInt error = KErrNone; + TMsvEntry* entry; + count = iSelection->Count(); + while (count--) + { + error = iMsvServer.IndexAdapter().GetEntry(iSelection->At(count),entry); + if (error==KErrNone) + { + error = iMsvServer.IndexAdapter().LockEntry(iSelection->At(count)); + error = iMsvServer.ChangeEntry(*entry, aOwnerId, aForcedUpdate); + error = iMsvServer.IndexAdapter().ReleaseEntry(iSelection->At(count)); // error ignored + } + } + + if (error==KErrNone) + iProgress().iNumberCompleted++; + else + { + iProgress().iNumberFailed++; + iProgress().iError = error; + } + Completed(); + } + +void CMsvLocalChangeEntriesOperation::Completed() +// +// +// + { + + if (iProgress().iError==KErrNone) + iMsvServer.NotifyChanged(iDelete==NULL ? EMsvEntriesChanged : EMsvEntriesDeleted, iId, iParent); + SetState(EMsvOperationCompleted); + iMessage.Complete(KErrNone); + } //**********************************