emailservices/emailstore/message_store/server/src/BackupRestoreObserver.cpp
changeset 0 8466d47a6819
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailstore/message_store/server/src/BackupRestoreObserver.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 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:  Backup/restore observer implementation.
+*
+*/
+
+
+
+// ========
+// INCLUDES
+// ========
+
+#include <connect/sbdefs.h>
+#include <e32property.h>
+
+#include "BackupRestoreObserver.h"
+
+// =========
+// CONSTANTS
+// =========
+
+// A backup is in progress if any of these bits are set.
+const TUint KBackupInProgressMask = conn::EBURBackupFull | 
+				 			        conn::EBURBackupPartial;
+
+// A restore is in progress if any of these bits are set.
+const TUint KRestoreInProgressMask = conn::EBURRestoreFull | 
+									 conn::EBURRestorePartial;
+									 
+// ======================
+// METHOD IMPLEMENTATIONS
+// ======================
+
+// ==========================================================================
+// FUNCTION: NewL
+// ==========================================================================
+CBackupRestoreNotifier* CBackupRestoreNotifier::NewL( MBackupRestoreObserver& aObserver )
+	{
+    CBackupRestoreNotifier* self = new( ELeave ) CBackupRestoreNotifier( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+	} // end NewL
+
+// ==========================================================================
+// FUNCTION: Constructor
+// ==========================================================================
+CBackupRestoreNotifier::CBackupRestoreNotifier( MBackupRestoreObserver& aObserver ) :
+	CActive( EPriorityNormal ),
+	iObserver( aObserver ),
+	iInProgress( EFalse )
+	{
+	__LOG_CONSTRUCT( "msg", "CBackupRestoreNotifier" )
+	} // end constructor
+	
+// ==========================================================================
+// FUNCTION: ConstructL
+// ==========================================================================
+void CBackupRestoreNotifier::ConstructL()
+	{
+	__LOG_ENTER( "ConstructL" );
+		
+	User::LeaveIfError( iProperty.Attach( KUidSystemCategory, conn::KUidBackupRestoreKey ) );
+	CActiveScheduler::Add(this);
+	
+	// Initial subscription and process current property value.
+	RunL();	
+	
+	__LOG_EXIT
+	} // end ConstructL
+	
+// ==========================================================================
+// FUNCTION: Destructor
+// ==========================================================================
+CBackupRestoreNotifier::~CBackupRestoreNotifier()
+	{
+	Cancel();
+	iProperty.Close();	
+	__LOG_DESTRUCT	
+	} // end destructor
+	
+// ==========================================================================
+// FUNCTION: DoCancel
+// ==========================================================================
+void CBackupRestoreNotifier::DoCancel()
+	{
+	iProperty.Cancel();		
+	} // end DoCancel
+	
+// ==========================================================================
+// FUNCTION: RunL
+// ==========================================================================
+void CBackupRestoreNotifier::RunL()
+	{
+	__LOG_ENTER( "RunL" );
+	
+	// resubscribe before processing new value to prevent missing updates
+	iProperty.Subscribe( iStatus );
+	SetActive();
+
+	TInt propertyValue = 0;
+	
+	iProperty.Get( propertyValue );
+	
+	ProcessEvent( static_cast<TUint>(propertyValue) );
+	
+	__LOG_EXIT		
+	} // end RunL
+
+// ==========================================================================
+// FUNCTION: ProcessEventL
+// ==========================================================================
+void CBackupRestoreNotifier::ProcessEvent( TUint aEvent )
+    {
+    __LOG_ENTER( "ProcessEventL" )
+    __LOG_WRITE8_FORMAT1_INFO( "event=%i", aEvent )
+    
+	TBool newInProgress;
+	TBool isARestore = EFalse;
+	
+	// If the property exists & one of the backup/restore bits are set...
+	if( (aEvent & KBackupInProgressMask) > 0 )
+		{
+		__LOG_WRITE_INFO( "backup in progress" );
+		newInProgress = ETrue;
+		}
+	else if( (aEvent & KRestoreInProgressMask) > 0 )
+		{
+		__LOG_WRITE_INFO( "restore in progress" );
+		newInProgress = ETrue;
+		isARestore    = ETrue;
+		}
+	else
+		{
+		__LOG_WRITE_INFO( "backup or restore not in progress" );
+		newInProgress = EFalse;
+		}
+		
+	if( newInProgress )
+		{
+		__LOG_WRITE_INFO( "notifying observer" );
+		iObserver.BackupOrRestoreInProgress( isARestore );		
+		}
+	else if( !newInProgress && iInProgress )
+		{
+		__LOG_WRITE_INFO( "notifying observer" );
+		iObserver.BackupOrRestoreCompleted();
+		} // end if
+		
+	iInProgress = newInProgress;
+	
+	__LOG_EXIT
+    } // end ProcessEvent