webengine/widgetbackuprestore/Src/WidgetBackupRestore.cpp
changeset 0 dd21522fd290
child 37 cb62a4f66ebe
--- /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 <abclient.h>
+#include <e32property.h>
+#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;
+    }