diff -r 13d7c31c74e0 -r b183ec05bd8c omaprovisioning/provisioning/ProvisioningCx/Src/CWPCxDeleter.cpp --- a/omaprovisioning/provisioning/ProvisioningCx/Src/CWPCxDeleter.cpp Thu Aug 19 10:44:50 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,291 +0,0 @@ -/* -* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "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: Helper class for saving Provisioning settings. Provides a progress note. -* -*/ - - -// INCLUDE FILES -#include "CWPCxDeleter.h" -#include -#include -#include -#include -#include -#include -#include - -// CONSTANTS -const TInt KMaxWaitTime = 2000000; -const TInt KRetryCount = 5; - -// CLASS DECLARATION - -// ================= MEMBER FUNCTIONS ======================= - -// C++ default constructor. -CWPCxDeleter::CWPCxDeleter( CWPEngine& aEngine, TUint32 aContext ) -: CActive( EPriorityStandard ), iEngine( aEngine ), - iContext( aContext ), - iCurrentItem( 0 ), iResult( KErrNone ) - { - } - -// ---------------------------------------------------------------------------- -// CWPCxDeleter::ExecuteLD -// ---------------------------------------------------------------------------- -// -void CWPCxDeleter::PrepareLC() - { - // Assume ownership of this. - CleanupStack::PushL( this ); - - iApDbNotifier = CActiveApDb::NewL( EDatabaseTypeIAP ); - iApDbNotifier->AddObserverL( this ); - - User::LeaveIfError( iSession.Connect() ); - User::LeaveIfError( iBookmarkDb.Open( iSession, KBrowserBookmarks ) ); - iFavouritesNotifier = new(ELeave) CActiveFavouritesDbNotifier( iBookmarkDb, *this ); - - iFavouritesNotifier->Start(); - - iRetryTimer = CPeriodic::NewL( EPriorityStandard ); - - // Set up the dialog and callback mechanism. - iDialog = new(ELeave)CAknProgressDialog( - reinterpret_cast(&iDialog), EFalse ); - iDialog->SetCallback( this ); - iDialog->ExecuteLD(R_WAITNOTE_DELETE); - CEikProgressInfo* progressInfo = iDialog->GetProgressInfoL(); - progressInfo->SetAndDraw(iCurrentItem); - progressInfo->SetFinalValue(iEngine.ContextDataCountL(iContext)); - } - -// ---------------------------------------------------------------------------- -// CWPCxDeleter::ExecuteLD -// ---------------------------------------------------------------------------- -// -TInt CWPCxDeleter::ExecuteLD( TInt& aNumDeleted ) - { - PrepareLC(); - - // Add us to active scheduler and make sure RunL() gets called. - CActiveScheduler::Add( this ); - CompleteRequest(); - iWait.Start(); - - // Progress note has been finished/cancelled. Cache the result - // and delete this. - TInt result( iResult ); - aNumDeleted = iCurrentItem; - CleanupStack::PopAndDestroy(); // this - - return result; - } - -// Destructor -CWPCxDeleter::~CWPCxDeleter() - { - Cancel(); - - delete iApDbNotifier; - - if( iFavouritesNotifier ) - { - iFavouritesNotifier->Cancel(); - delete iFavouritesNotifier; - } - - iBookmarkDb.Close(); - iSession.Close(); - - delete iRetryTimer; - } - -// ---------------------------------------------------------------------------- -// CWPCxDeleter::DoCancel -// ---------------------------------------------------------------------------- -// -void CWPCxDeleter::DoCancel() - { - } - -// ---------------------------------------------------------------------------- -// CWPCxDeleter::RunL -// ---------------------------------------------------------------------------- -// -void CWPCxDeleter::RunL() - { - // Choose whether to save or set as default - TBool more( EFalse ); - TRAPD( err, more = iEngine.DeleteContextDataL( iContext ) ); - - // If CommsDB or BookmarkDB are locked, schedule a retry - if( err == EWPCommsDBLocked ) - { - iWaitCommsDb = ETrue; - DelayedCompleteRequestL(); - return; - } - else if( err == EWPBookmarksLocked ) - { - iWaitFavourites = ETrue; - DelayedCompleteRequestL(); - return; - } - else if( err != KErrNone ) - { - // For all other errors, pass them through. - User::LeaveIfError( err ); - } - // Succesful save, so reset retry count - iRetryCount = 0; - - // Normal progress - if( !more ) - { - iDialog->ProcessFinishedL(); - } - else - { - CEikProgressInfo* progressInfo = iDialog->GetProgressInfoL(); - iCurrentItem++; - progressInfo->SetAndDraw(iCurrentItem); - CompleteRequest(); - } - } - -// --------------------------------------------------------- -// CWPCxDeleter::RunError -// --------------------------------------------------------- -// -TInt CWPCxDeleter::RunError( TInt aError ) - { - // There was a leave in RunL(). Store the error and - // stop the dialog. - iResult = aError; - iWait.AsyncStop(); - delete iDialog; - iDialog = NULL; - - return KErrNone; - } - -// --------------------------------------------------------- -// CWPCxDeleter::DialogDismissedL -// --------------------------------------------------------- -// -void CWPCxDeleter::DialogDismissedL( TInt aButtonId ) - { - if( aButtonId < 0 ) - { - iResult = KErrCancel; - } - - iWait.AsyncStop(); - } - -// ---------------------------------------------------------------------------- -// CWPCxDeleter::CompleteRequest -// ---------------------------------------------------------------------------- -// -void CWPCxDeleter::CompleteRequest() - { - // Schedule an immediate complete. Make sure that there - // is no timer alive first - Cancel(); - iRetryTimer->Cancel(); - - SetActive(); - TRequestStatus* sp = &iStatus; - User::RequestComplete( sp, KErrNone ); - } - -// ---------------------------------------------------------------------------- -// CWPCxDeleter::DelayedCompleteRequestL -// ---------------------------------------------------------------------------- -// -void CWPCxDeleter::DelayedCompleteRequestL() - { - if( iRetryCount < KRetryCount ) - { - // Schedule a delayed complete. - iRetryTimer->Cancel(); - iRetryTimer->Start( KMaxWaitTime, KMaxTInt32, TCallBack( Timeout, this ) ); - iRetryCount++; - } - else - { - User::Leave( KErrTimedOut ); - } - } - -// ---------------------------------------------------------------------------- -// CWPCxDeleter::Retry -// ---------------------------------------------------------------------------- -// -void CWPCxDeleter::Retry() - { - // Immediate retry. Mark that we're not waiting - // for an event and complete request. - - iWaitCommsDb = EFalse; - iWaitFavourites = EFalse; - CompleteRequest(); - } - -// ---------------------------------------------------------------------------- -// CWPCxDeleter::Timeout -// ---------------------------------------------------------------------------- -// -TInt CWPCxDeleter::Timeout(TAny* aSelf) - { - // There was a time-out. Retry saving even though we - // didn't get a notify from database. - CWPCxDeleter* self = STATIC_CAST(CWPCxDeleter*, aSelf); - self->Retry(); - - return KErrNone; - } - -// ---------------------------------------------------------------------------- -// CWPCxDeleter::HandleApDbEventL -// ---------------------------------------------------------------------------- -// -void CWPCxDeleter::HandleApDbEventL( TEvent aEvent ) - { - // We received an event from CommsDB. Retry if we're - // waiting for it. - if( iWaitCommsDb && aEvent == EDbAvailable ) - { - Retry(); - } - } - -// ---------------------------------------------------------------------------- -// CWPCxDeleter::HandleFavouritesDbEventL -// ---------------------------------------------------------------------------- -// -void CWPCxDeleter::HandleFavouritesDbEventL( RDbNotifier::TEvent /*aEvent*/ ) - { - // We received an event from BookmarkDB. Retry if we're - // waiting for it. - if( iWaitFavourites ) - { - Retry(); - } - } - -// End of File -