smsprotocols/smsstack/smsu/src/smsubackup.cpp
changeset 0 3553901f7fa8
child 19 630d2f34d719
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smsprotocols/smsstack/smsu/src/smsubackup.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,123 @@
+// Copyright (c) 1998-2009 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:
+// Implements CBackupAndRestore
+// 
+//
+
+/**
+ @file
+*/
+
+#include <e32std.h>
+#include "SmsuBackup.h"
+#include <babackup.h>
+#include "smsstacklog.h"
+
+
+const TInt KBURPartMask = 0x000000FF;
+
+#include <connect/sbdefs.h>
+
+using namespace conn;
+
+
+EXPORT_C CBackupAndRestore* CBackupAndRestore::NewL(MNBBackupAndRestoreObserver& aBackupAndRestoreObserver)
+ 	{
+ 	LOGSMSU1("CBackupAndRestore::NewL()");
+
+ 	CBackupAndRestore* me = new(ELeave) CBackupAndRestore(aBackupAndRestoreObserver);
+ 	CleanupStack::PushL(me);
+ 	me->ConstructL();
+ 	CleanupStack::Pop(me);
+ 	return me;
+ 	} // CBackupAndRestore::NewL
+
+
+CBackupAndRestore::CBackupAndRestore(MNBBackupAndRestoreObserver& aBackupAndRestoreObserver)
+ 	:CActive(EPriorityStandard)
+ 	{
+ 	iBackupAndRestoreObserver=&aBackupAndRestoreObserver;
+ 	}
+
+
+void CBackupAndRestore::ConstructL()
+ 	{
+ 	LOGSMSU1("CBackupAndRestore::ConstructL()");
+
+ 	iBackupOrRestoreInProgress = EFalse;
+	User::LeaveIfError(iBackupProperty.Attach(KUidSystemCategory,KUidBackupRestoreKey));
+	CActiveScheduler::Add(this);
+ 	iBackupProperty.Subscribe(iStatus);
+ 	SetActive();
+ 	}
+
+
+EXPORT_C CBackupAndRestore::~CBackupAndRestore()
+ 	{
+ 	Cancel();
+ 	iBackupProperty.Close();
+ 	} // CBackupAndRestore::~CBackupAndRestore
+
+
+void CBackupAndRestore::DoCancel()
+ 	{
+ 	LOGSMSU1("CBackupAndRestore::DoCancel()");
+
+ 	iBackupProperty.Cancel();
+ 	} // CBackupAndRestore::DoCancel
+
+
+EXPORT_C TBool CBackupAndRestore::IsBackupOrRestoreInProgress()
+	{
+	LOGSMSU1("CBackupAndRestore::IsBackupOrRestoreInProgress()");
+
+	return iBackupOrRestoreInProgress;
+	} // CBackupAndRestore::IsBackupOrRestoreInProgress
+
+
+/**
+ *  @leave KErrNotSupported if unknown backup flag is found
+ */
+void CBackupAndRestore::RunL()
+ 	{
+ 	LOGSMSU1("CBackupAndRestore::RunL()");
+
+ 	iBackupProperty.Subscribe(iStatus);
+ 	SetActive();
+
+
+ 	TInt backupRestoreFlag;
+ 	iBackupProperty.Get(backupRestoreFlag);
+ 	switch(backupRestoreFlag & KBURPartMask)
+ 		{
+ 		case EBURUnset:
+ 		case EBURNormal:
+ 			if(iBackupOrRestoreInProgress) //only report complete if already reported starting
+ 				{
+ 				iBackupAndRestoreObserver->HandleBackupOrRestoreCompleteL();
+ 				iBackupOrRestoreInProgress=EFalse;
+ 				}
+ 			break;
+ 		case EBURBackupFull:
+ 		case EBURBackupPartial:
+		case EBURRestoreFull:
+		case EBURRestorePartial:
+			iBackupOrRestoreInProgress=ETrue;
+			iBackupAndRestoreObserver->HandleBackupOrRestoreStartingL();
+			break;
+		default:
+			User::Leave(KErrNotSupported); //unexpected value
+		};
+ 	} // CBackupAndRestore::RunL
+