brandingserver/bsserver/cbsbackupobserver.cpp
changeset 0 e6b17d312c8b
child 21 cfd5c2994f10
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/brandingserver/bsserver/cbsbackupobserver.cpp	Thu Dec 17 08:54:49 2009 +0200
@@ -0,0 +1,195 @@
+/*
+* Copyright (c) 2006-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:  Stores element data and writes it to stream
+*
+*/
+
+
+#include <connect/sbdefs.h>
+
+#include "cbsbackupobserver.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CBSBackupObserver::NewL
+// ---------------------------------------------------------------------------
+//
+CBSBackupObserver* CBSBackupObserver::NewL()
+    {
+    CBSBackupObserver* self = NewLC();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CBSBackupObserver::NewLC
+// ---------------------------------------------------------------------------
+//
+CBSBackupObserver* CBSBackupObserver::NewLC()
+    {
+    CBSBackupObserver* self = new (ELeave) CBSBackupObserver();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CBSBackupObserver::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CBSBackupObserver::ConstructL()
+    {
+    CActiveScheduler::Add( this );
+    iProperty.Attach( KUidSystemCategory, conn::KUidBackupRestoreKey );
+    iLatestState = BackupStateL();
+    Subscribe();
+    }
+
+// ---------------------------------------------------------------------------
+// CBSBackupObserver::CBSBackupObserver
+// ---------------------------------------------------------------------------
+//
+CBSBackupObserver::CBSBackupObserver() :
+    CActive( EPriorityStandard )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CBSBackupObserver::~CBSBackupObserver
+// ---------------------------------------------------------------------------
+//
+CBSBackupObserver::~CBSBackupObserver()
+    {
+    Cancel();
+    iObservers.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// CBSBackupObserver::RunL
+// ---------------------------------------------------------------------------
+//
+void CBSBackupObserver::RunL()
+    {
+    MBSBackupObserver::TBackupState newState = BackupStateL();
+    if( newState != iLatestState )
+        {
+        // state changed
+        iLatestState = newState;
+        NotifyObserversL( iLatestState );
+        }
+    Subscribe();
+    }
+
+// ---------------------------------------------------------------------------
+// CBSBackupObserver::DoCancel
+// ---------------------------------------------------------------------------
+//
+void CBSBackupObserver::DoCancel()
+    {
+    iProperty.Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// CBSBackupObserver::RunError
+// ---------------------------------------------------------------------------
+//
+TInt CBSBackupObserver::RunError( TInt /*aError*/ )
+    {
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CBSBackupObserver::RegisterObserver
+// ---------------------------------------------------------------------------
+//
+TInt CBSBackupObserver::RegisterObserver( MBSBackupObserver* aObserver )
+    {
+    TInt err = iObservers.InsertInAddressOrder( aObserver );
+    if( err == KErrAlreadyExists )
+        {
+        // ignore duplicate registration
+        err = KErrNone;
+        }
+
+    // if backup is already active -> notify
+    if( iLatestState == MBSBackupObserver::EBackupActive )
+        {
+        TRAP_IGNORE( aObserver->HandleBackupStateL( iLatestState ) );
+        }
+
+    return err;
+    }
+
+// ---------------------------------------------------------------------------
+// CBSBackupObserver::UnregisterObserver
+// ---------------------------------------------------------------------------
+//
+void CBSBackupObserver::UnregisterObserver( MBSBackupObserver* aObserver )
+    {
+    TInt index = iObservers.FindInAddressOrder( aObserver );
+    if( index != KErrNotFound )
+        {
+        iObservers.Remove( index );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CBSBackupObserver::Subscribe
+// ---------------------------------------------------------------------------
+//
+void CBSBackupObserver::Subscribe()
+    {
+    if( IsActive() )
+        {
+        // already active
+        return;
+        }
+    iStatus = KRequestPending;
+    iProperty.Subscribe( iStatus );
+    SetActive();    
+    }
+
+// ---------------------------------------------------------------------------
+// CBSBackupObserver::NotifyObservers
+// ---------------------------------------------------------------------------
+//
+void CBSBackupObserver::NotifyObserversL( MBSBackupObserver::TBackupState aState )
+    {
+    TInt count = iObservers.Count();
+    for( TInt i = 0; i < count; i++ )
+        {
+        TRAP_IGNORE( iObservers[i]->HandleBackupStateL( aState ) );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CBSBackupObserver::BackupState
+// ---------------------------------------------------------------------------
+//
+MBSBackupObserver::TBackupState CBSBackupObserver::BackupStateL()
+    {
+    TInt value = 0;
+    User::LeaveIfError( iProperty.Get( value ) );
+    if( value == 0 || 
+        value == ( conn::EBURNormal | conn::ENoBackup ) )
+        {
+        // backup or restore is not active at the moment
+        return MBSBackupObserver::EBackupNotActive;
+        }
+    return MBSBackupObserver::EBackupActive;
+    }
+
+// End of file