diff -r 000000000000 -r dd21522fd290 webengine/widgetbackuprestore/Src/WidgetBackupRestore.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/widgetbackuprestore/Src/WidgetBackupRestore.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,232 @@ +/* +* Copyright (c) 2007 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: Widget's active data owner in backup/restore. +* +*/ + + +#include +#include +#include "widgetbackuprestore.h" +#include "WidgetActiveCallback.h" + + +// CONSTANTS + + +// ======== MEMBER FUNCTIONS ======== +// --------------------------------------------------------------------------- +// Constructor. +// --------------------------------------------------------------------------- +// +CWidgetBackupRestore* CWidgetBackupRestore::NewL() + { + CWidgetBackupRestore* self = + new ( ELeave ) CWidgetBackupRestore(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CWidgetBackupRestore::~CWidgetBackupRestore() + { + Cancel(); + + iBackupProperty.Close(); + delete iCallBack; + delete iActiveBackupClient; + } + +// --------------------------------------------------------------------------- +// Active object's request handling. +// --------------------------------------------------------------------------- +// +void CWidgetBackupRestore::RunL() + { + if ( iStatus.Int() == KErrNone ) + { + TInt currentValue = KErrNone; + iBackupProperty.Get( currentValue ); + + HandleBackupStateL( currentValue ); + } + else + { + //RunError( iStatus.Int() ); + } + + // Re-subscribe notifications. + SubscribePSKey(); + } + +// --------------------------------------------------------------------------- +// Active object's request error handling. +// --------------------------------------------------------------------------- +// +TInt CWidgetBackupRestore::RunError( TInt /*aError*/ ) + { + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Cancel the request. +// --------------------------------------------------------------------------- +// +void CWidgetBackupRestore::DoCancel() + { + iBackupProperty.Cancel(); + } + +// --------------------------------------------------------------------------- +// C++ constructor. +// --------------------------------------------------------------------------- +// +CWidgetBackupRestore::CWidgetBackupRestore() : + CActive( EPriorityNormal ) + { + // Add to active scheduler. + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// 2nd phase constructor. +// --------------------------------------------------------------------------- +// +void CWidgetBackupRestore::ConstructL() + { +#ifdef _DEBUG + _LIT(KDir, "WidgetBUR"); + _LIT(KFile, "WidgetBUR.log"); + TInt err( 0 ); + + err = iFileLogger.Connect(); + if ( err == KErrNone ) + { + iFileLogger.CreateLog( KDir(), KFile(), EFileLoggingModeOverwrite ); + iCanLog = ETrue; + } +#endif + iLastType = conn::EBURUnset; + + // Attach to backup key. + iBackupProperty.Attach( KUidSystemCategory, conn::KUidBackupRestoreKey ); + + // Handle initial B&R key value, then start listening for further changes. + RunL(); + } + +// --------------------------------------------------------------------------- +// Handles changes in backup state. +// --------------------------------------------------------------------------- +// +void CWidgetBackupRestore::HandleBackupStateL( const TInt aValue ) + { + const TInt type = aValue & conn::KBURPartTypeMask; + + // Test if the device is going into backup or restore mode, and we are + // required to participate. + if ( ( type == conn::EBURBackupFull || type == conn::EBURRestoreFull ) || + ( type == conn::EBURBackupPartial || type == conn::EBURRestorePartial ) ) + { + if ( !iCallBack ) + { + iCallBack = CWidgetActiveCallback::NewL(); + } + + if ( !iActiveBackupClient ) + { + iActiveBackupClient = conn::CActiveBackupClient::NewL( iCallBack ); + + if ( ( type == conn::EBURBackupPartial || + type == conn::EBURRestorePartial ) && + !iActiveBackupClient->DoesPartialBURAffectMeL() ) + { + delete iCallBack; + iCallBack = NULL; + delete iActiveBackupClient; + iActiveBackupClient = NULL; + return; + } + } + + iActiveBackupClient->ConfirmReadyForBURL( KErrNone ); + } + else + { + if ( type == conn::EBURNormal ) + { + if ( iLastType == conn::EBURBackupFull || iLastType == conn::EBURBackupPartial ) + { + iCallBack->CleanupBackupDataL(); + } + + // delete once back to normal. + delete iCallBack; + iCallBack = NULL; + delete iActiveBackupClient; + iActiveBackupClient = NULL; + + // Stop the scheduler, which will allow + // the process to exit. + CActiveScheduler::Stop(); + } + } + + iLastType = type; + } + +// --------------------------------------------------------------------------- +// Subsribes notifications of backup/restore p&s key. +// --------------------------------------------------------------------------- +// +void CWidgetBackupRestore::SubscribePSKey() + { + Cancel(); + + iBackupProperty.Subscribe( iStatus ); + SetActive(); + } + +void MainL() + { + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler(); + CActiveScheduler::Install( scheduler ); + CleanupStack::PushL( scheduler ); + // + CWidgetBackupRestore* widBUR = CWidgetBackupRestore::NewL(); + CleanupStack::PushL( widBUR ); + CActiveScheduler::Start(); + // + CleanupStack::PopAndDestroy( 2, scheduler ); + } + +TInt E32Main() + { + TInt err = KErrNoMemory; + // + CTrapCleanup* cleanupStack = CTrapCleanup::New(); + if ( cleanupStack ) + { + TRAP( err, MainL() ); + } + // + delete cleanupStack; + return err; + }