diff -r 4baee4f15982 -r 6385c4c93049 pushmtm/MtmCliSrvSrc/PushMtmGcOperation.cpp --- a/pushmtm/MtmCliSrvSrc/PushMtmGcOperation.cpp Thu Aug 19 09:57:56 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,317 +0,0 @@ -/* -* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Implementation of CPushMtmGcOperation. -* -*/ - - - -// INCLUDE FILES - -#include "PushMtmGcOperation.h" -#include "PushMtmCliSrvPanic.h" -#include "PushMtmUtil.h" -#include "PushMtmLog.h" -#include -#include - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------- -// CPushMtmGcOperation::NewL -// --------------------------------------------------------- -// -CPushMtmGcOperation* CPushMtmGcOperation::NewL( - CMsvSession& aSession, - TMsvId aFolderId, - TRequestStatus& aObserverRequestStatus ) - { - PUSHLOG_ENTERFN("CPushMtmGcOperation::NewL") - - CPushMtmGcOperation* self = new (ELeave) CPushMtmGcOperation - ( aSession, aFolderId, aObserverRequestStatus ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); // self - - PUSHLOG_LEAVEFN("CPushMtmGcOperation::NewL") - return self; - } - -// --------------------------------------------------------- -// CPushMtmGcOperation::~CPushMtmGcOperation -// --------------------------------------------------------- -// -CPushMtmGcOperation::~CPushMtmGcOperation() - { - PUSHLOG_ENTERFN("CPushMtmGcOperation::~CPushMtmGcOperation") - - Cancel(); - delete iEntrySel; - delete iEntryWrapper; - delete iUtil; - - PUSHLOG_LEAVEFN("CPushMtmGcOperation::~CPushMtmGcOperation") - } - -// --------------------------------------------------------- -// CPushMtmGcOperation::DoSyncL -// --------------------------------------------------------- -// -void CPushMtmGcOperation::DoSyncL() - { - PUSHLOG_ENTERFN("CPushMtmGcOperation::DoSyncL") - - InitL(); - - for ( iCurrentIndex = 0; iCurrentIndex < iCount; ++iCurrentIndex ) - { - // iCurrentIndex indicate the current entry in the selection. - GcCurrentL(); - } - - // Release unnecessary resources. - delete iEntrySel; - iEntrySel = NULL; - - PUSHLOG_LEAVEFN("CPushMtmGcOperation::DoSyncL") - } - -// --------------------------------------------------------- -// CPushMtmGcOperation::CPushMtmGcOperation -// --------------------------------------------------------- -// -CPushMtmGcOperation::CPushMtmGcOperation( CMsvSession& aSession, - TMsvId aFolderId, - TRequestStatus& aObserverRequestStatus ) -: CPushMtmOperation( aSession, KMsvNullIndexEntryId, aObserverRequestStatus ), - iState( EInit ), iFolderId( aFolderId ), iCurrentIndex( 0 ) - { - } - -// --------------------------------------------------------- -// CPushMtmGcOperation::ConstructL -// --------------------------------------------------------- -// -void CPushMtmGcOperation::ConstructL() - { - // Do nothing here. - } - -// --------------------------------------------------------- -// CPushMtmGcOperation::InitL -// --------------------------------------------------------- -// -void CPushMtmGcOperation::InitL() - { - PUSHLOG_ENTERFN("CPushMtmGcOperation::InitL") - - if ( !iUtil ) - { - iUtil = CPushMtmUtil::NewL( iMsvSession ); - } - - CMsvEntrySelection* folders = NULL; - if ( iFolderId == KMsvNullIndexEntryId ) - { - folders = iUtil->FindPushFoldersL(); - CleanupStack::PushL( folders ); - } - else - { - folders = new (ELeave) CMsvEntrySelection; - CleanupStack::PushL( folders ); - folders->AppendL( iFolderId ); - } - - // Get SIs from the given folder(s). - delete iEntrySel; - iEntrySel = NULL; - iEntrySel = iUtil->FindMessagesL( *folders, KUidWapPushMsgSI ); - CleanupStack::PopAndDestroy(); // folders - - // Reset count. - iCount = iEntrySel->Count(); - PUSHLOG_WRITE_FORMAT(" iCount: %d",iCount) - // Reset index. - iCurrentIndex = 0; - - // We need a wrapper only if there is entry to delete. - if ( iCount && !iEntryWrapper ) - { - iEntryWrapper = CSIPushMsgEntry::NewL(); - } - - PUSHLOG_LEAVEFN("CPushMtmGcOperation::InitL") - } - -// --------------------------------------------------------- -// CPushMtmGcOperation::GcCurrentL -// --------------------------------------------------------- -// -void CPushMtmGcOperation::GcCurrentL() - { - PUSHLOG_ENTERFN("CPushMtmGcOperation::GcCurrentL") - - PUSHLOG_WRITE_FORMAT(" iCurrentIndex: %d",iCurrentIndex) - TMsvId entryId( iEntrySel->At(iCurrentIndex) ); - -#ifdef _DEBUG - TMsvEntry tEntry; - TMsvId dummyService; - User::LeaveIfError - ( iMsvSession.GetEntry( entryId, dummyService, tEntry ) ); - - __ASSERT_DEBUG( tEntry.iMtm == KUidMtmWapPush && - tEntry.iBioType == KUidWapPushMsgSI.iUid, - CliSrvPanic( EPushMtmCliSrvPanBadType ) ); -#endif // _DEBUG - - iEntryWrapper->RetrieveL( iMsvSession, entryId ); - // Check expiration if expiration time was set. - if ( iEntryWrapper->Expires() != Time::NullTTime() ) - { - TTime today; - today.UniversalTime(); - if ( iEntryWrapper->Expires() < today ) - { - PUSHLOG_WRITE(" Expired") - // The message has expired. Delete it. - CMsvEntry* cParent = - iMsvSession.GetEntryL( iEntryWrapper->Entry().Parent() ); - CleanupStack::PushL( cParent ); - // Delete the message. - cParent->DeleteL( entryId ); - CleanupStack::PopAndDestroy(); // cParent - } - } - - PUSHLOG_LEAVEFN("CPushMtmGcOperation::GcCurrentL") - } - -// --------------------------------------------------------- -// CPushMtmGcOperation::RunL -// --------------------------------------------------------- -// -void CPushMtmGcOperation::RunL() - { - PUSHLOG_ENTERFN("CPushMtmGcOperation::RunL") - - if ( iState == EInit ) - { - InitL(); - if ( !iCount ) - { - // Ready. - SignalObserver( KErrNone ); - } - else - { - iState = EGarbageCollecting; - SetActive(); - InvokeRun(); - } - } - else if ( iState == EGarbageCollecting ) - { - __ASSERT_DEBUG( iCount, - CliSrvPanic( EPushMtmCliSrvPanEmptySelection ) ); - // iCurrentIndex indicate the current entry in the selection. - GcCurrentL(); - if ( ++iCurrentIndex < iCount ) - { - // Delete next. - SetActive(); - InvokeRun(); - } - else - { - // No more to delete. - SignalObserver( KErrNone ); - } - } - else - { - __ASSERT_DEBUG( EFalse, - CliSrvPanic( EPushMtmCliSrvPanCommandNotSupported ) ); - } - - PUSHLOG_LEAVEFN("CPushMtmGcOperation::RunL") - } - -// --------------------------------------------------------- -// CPushMtmGcOperation::DoCancel -// --------------------------------------------------------- -// -void CPushMtmGcOperation::DoCancel() - { - PUSHLOG_ENTERFN("CPushMtmGcOperation::DoCancel") - - CPushMtmOperation::DoCancel(); - - PUSHLOG_LEAVEFN("CPushMtmGcOperation::DoCancel") - } - -// --------------------------------------------------------- -// CPushMtmGcOperation::RunError -// --------------------------------------------------------- -// -TInt CPushMtmGcOperation::RunError( TInt aError ) - { - PUSHLOG_ENTERFN("CPushMtmGcOperation::RunError") - PUSHLOG_WRITE_FORMAT(" aError: %d",aError) - - TBool doContinue( EFalse ); - - PUSHLOG_WRITE_FORMAT(" iState: %d",iState) - if ( iState == EInit ) - { - // We cannot continue. - } - else if ( iState == EGarbageCollecting ) - { - if ( aError == KErrNotFound ) - { - // Try to continue with next. - if ( ++iCurrentIndex < iCount ) - { - // Delete next. - doContinue = ETrue; - SetActive(); - InvokeRun(); - } - } - } - else - { - __ASSERT_DEBUG( EFalse, - CliSrvPanic( EPushMtmCliSrvPanCommandNotSupported ) ); - } - - TInt ret = KErrNone; - if ( doContinue ) - { - ret = KErrNone; - } - else - { - // Report error. - ret = CPushMtmOperation::RunError( aError ); - } - - PUSHLOG_LEAVEFN("CPushMtmGcOperation::RunError") - return ret; - } - -// End of file.