IMPSengine/engsrv/src/impspropertyobserver.cpp
author Fionntina Carville <fionntinac@symbian.org>
Mon, 15 Nov 2010 11:27:49 +0000
branchRCL_3
changeset 22 df9aab66f73e
parent 0 094583676ce7
permissions -rw-r--r--
Bug 3539. Update localisation mappings.

/*
* Copyright (c) 2004 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: Observer for IMPS property.
*
*
*/


// INCLUDE FILES
#include    <centralrepository.h>
#include    "impspropertyobserver.h"
#include    "impsutils.h"

// ================= MEMBER FUNCTIONS =======================

// ---------------------------------------------------------
// CImpsPropertyObserver::NewL
// ---------------------------------------------------------
//
CImpsPropertyObserver* CImpsPropertyObserver::NewL( MImpsPropertyObserver& aObserver,
                                                    TUid aCategory,
                                                    TUint32 aKey )
    {
    CImpsPropertyObserver* self = new ( ELeave ) CImpsPropertyObserver( aObserver,
                                                                        aCategory, aKey );
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop();
#ifndef _NO_IMPS_LOGGING_
    CImpsClientLogger::Log( _L( "CImpsPropertyObserver Constructor " ) );
#endif
    return self;
    }

// ---------------------------------------------------------
// CImpsPropertyObserver::~CImpsPropertyObserver
// ---------------------------------------------------------
//
CImpsPropertyObserver::~CImpsPropertyObserver()
    {
#ifndef _NO_IMPS_LOGGING_
    CImpsClientLogger::Log( _L( "CImpsPropertyObserver Destructor " ) );
#endif
    Cancel();
    delete iRep;
    }

// ---------------------------------------------------------
// CImpsPropertyObserver::CImpsPropertyObserver
// ---------------------------------------------------------
//
CImpsPropertyObserver::CImpsPropertyObserver( MImpsPropertyObserver& aObserver,
                                              TUid aCategory,
                                              TUint32 aKey )
        : CActive( CActive::EPriorityStandard ),
        iObserver( aObserver ),
        iCategory( aCategory ),
        iKey( aKey )
    {
    CActiveScheduler::Add( this );
    }

// ---------------------------------------------------------
// CImpsPropertyObserver::ConstructL
// ---------------------------------------------------------
//
void CImpsPropertyObserver::ConstructL( )
    {
    iRep = CRepository::NewL( iCategory );
    iStatus = KRequestPending;
    iRep->NotifyRequest( iKey, iStatus );
    SetActive( );
    }

// ---------------------------------------------------------
// CImpsPropertyObserver::RunL
// ---------------------------------------------------------
//
void CImpsPropertyObserver::RunL()
    {
#ifndef _NO_IMPS_LOGGING_
    CImpsClientLogger::Log( _L( "CImpsPropertyObserver RunL" ) );
#endif
    TInt newValue( 0 );
    iRep->Get( iKey, newValue );
    iObserver.HandlePropertyChangeL( newValue );
    iStatus = KRequestPending;
    iRep->NotifyRequest( iKey, iStatus );
    SetActive( );
    }

// ---------------------------------------------------------
// CImpsPropertyObserver::RunError
// ---------------------------------------------------------
//
TInt CImpsPropertyObserver::RunError( TInt /*aError*/ )
    {
#ifndef _NO_IMPS_LOGGING_
    CImpsClientLogger::Log( _L( "CImpsPropertyObserver RunError ***" ) );
#endif
    // iObserver.HandlePropertyChangeL cannot actually leave now, so
    // this is not needed:
    /*
    iStatus = KRequestPending;
    iRep->NotifyRequest( iKey, iStatus );
    SetActive( );
    */
    return KErrNone;
    }

// ---------------------------------------------------------
// CImpsPropertyObserver::DoCancel
// ---------------------------------------------------------
//
void CImpsPropertyObserver::DoCancel()
    {
    /*
    Central Repository Design Document:
    It is possible to cancel a notification by supplying the exact
    same arguments used to set up the notification to the relevant
    NotifyCancel API. In this situation the TRequestStatus will no
    be set to KErrCancel but to KInvalidNotificationId.
    */
    iRep->NotifyCancelAll();
    }

//  End of File