diff -r 989d2f495d90 -r fc9cf246af83 serviceproviders/sapi_contacts_vpbk/contactservice/src/contactviewobserver.cpp --- a/serviceproviders/sapi_contacts_vpbk/contactservice/src/contactviewobserver.cpp Fri Jul 03 15:51:24 2009 +0100 +++ b/serviceproviders/sapi_contacts_vpbk/contactservice/src/contactviewobserver.cpp Thu Aug 27 07:43:07 2009 +0300 @@ -21,6 +21,7 @@ #include "contactiter.h" #include "contactviewobserver.h" +#include //--------------------------------------------------------------------------- @@ -31,32 +32,86 @@ { if((iFlag == EContactFilteredView) || ((iFlag == EContactDefaultView) && (iDefaultView))) { - CVPbkContactLinkArray* linkArray = CVPbkContactLinkArray::NewL(); - CleanupStack::PushL(linkArray); - TInt viewCount = aView.ContactCountL(); - if(viewCount) - { - for(TInt i=0; i < viewCount; i++) + TInt viewCount = aView.ContactCountL(); + + + if(viewCount) + { + CVPbkContactLinkArray* linkArray = CVPbkContactLinkArray::NewL(); + CleanupStack::PushL(linkArray); + RPointerArray idArray(viewCount); + if(iVal == EGetList) + { + MVPbkContactLink* link = NULL; + for(TInt i=0; i < viewCount; i++) + { + + link = aView.CreateLinkLC(i); + linkArray->AppendL(link); + CleanupStack::Pop(); + } + } + else + { + if(iSortOrder == EDesc) { - linkArray->AppendL(aView.CreateLinkLC(i)); - } - - //Set the params for iterator - iIter->SetParams(linkArray, *iStoreUri, iSortOrder, iTransId, EContacts, iContactService); - - //Notify the user - iCallback->HandleReturnIter(KErrNone, iIter, iTransId); - - CleanupStack::Pop(viewCount); - } + for(TInt i=(viewCount-1); i >= 0; i--) + { + MVPbkContactLink* link = NULL; + link = aView.CreateLinkLC(i); + idArray.AppendL( link->PackLC()); + CleanupStack::Pop(); //PackLC puts every element into cleanup stack + //CleanupStack::PopAndDestroy(); + } + } + else + { + for(TInt j=0; j < viewCount; j++) + { + MVPbkContactLink* link = NULL; + link = aView.CreateLinkLC(j); + idArray.AppendL( link->PackLC()); + CleanupStack::Pop(); //PackLC puts every element into cleanup stack + //CleanupStack::PopAndDestroy(); + } + } + } + + + + if(iVal == EGetList) + { + //Set the params for iterator + iIter->SetParams(linkArray, *iStoreUri, iSortOrder, iTransId, EContacts, iContactService); + //Notify the user + iCallback->HandleReturnIter(KErrNone, iIter, iTransId); + // CleanupStack::Pop(viewCount); //All Contacts are put in clean up stack. Pop em + CleanupStack::Pop(linkArray); + + } + else + { + //iContactService->RequestComplete(iTransId); + //Notify the user + //iCallback->HandleReturnIter(KErrNone, iIter, iTransId); + + iCallback->HandleReturnArray(KErrNone, idArray, iTransId); + CleanupStack::PopAndDestroy(viewCount); + CleanupStack::PopAndDestroy(linkArray); + //idArray.Reset(); + delete iIter; + } + + + } else { //Notify User iCallback->HandleReturnValue(EOpComplete, KErrNotFound, iTransId); - delete iIter; + delete iIter; iIter = NULL; } - CleanupStack::Pop(linkArray); + } } @@ -84,9 +139,9 @@ // NewL() //--------------------------------------------------------------------------- -CContactViewObserver* CContactViewObserver::NewL( MContactCallback* aCallback, enum TViewFlag aFlag, CContactIter* iIter,CContactService* aContactService,const TDesC& aStoreUri, TOrder aSortOrder, TInt aTransId, CActiveSchedulerWait* aSchedulerWait) +CContactViewObserver* CContactViewObserver::NewL( MContactCallback* aCallback, enum TViewFlag aFlag, CContactIter* iIter, CContactService* aContactService,const TDesC& aStoreUri, TOrder aSortOrder, TInt aTransId, CActiveSchedulerWait* aSchedulerWait, TCmdType val) { - CContactViewObserver* self = new( ELeave ) CContactViewObserver( aStoreUri, aFlag, iIter, aContactService, aCallback, aSortOrder, aTransId, aSchedulerWait); + CContactViewObserver* self = new( ELeave ) CContactViewObserver( aStoreUri, aFlag, iIter,aContactService, aCallback, aSortOrder, aTransId, aSchedulerWait, val); return self; } @@ -96,7 +151,7 @@ //--------------------------------------------------------------------------- -CContactViewObserver::CContactViewObserver(const TDesC& aStoreUri, enum TViewFlag aFlag, CContactIter* aIter, CContactService* aContactService, MContactCallback* aCallback, TOrder aSortOrder, TInt aTransId, CActiveSchedulerWait* aSchedulerWait ) +CContactViewObserver::CContactViewObserver(const TDesC& aStoreUri, enum TViewFlag aFlag, CContactIter* aIter, CContactService* aContactService, MContactCallback* aCallback, TOrder aSortOrder, TInt aTransId, CActiveSchedulerWait* aSchedulerWait, TCmdType val ) : iStoreUri (&aStoreUri), iFlag (aFlag), iIter (aIter), @@ -105,7 +160,8 @@ iTransId (aTransId), iDefaultView (EFalse), iSchedulerWait(aSchedulerWait), - iContactService(aContactService) + iContactService(aContactService), + iVal(val) { }