ximpfw/presence/srcpresencefrontend/srcpresencemanager/presencewatchingimp.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:54:49 +0200
changeset 0 e6b17d312c8b
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2006, 2007 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:  Implementation of MPresenceWatching
 *
*/

#include "presencewatchingimp.h"
#include "presenceinfofilterimp.h"
#include "ximpobjecthelpers.h"
#include "presenceoperationdefs.h"
#include "ximpidentityimp.h"
#include "ximpcontextinternal.h"


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

// ---------------------------------------------------------------------------
// CPresenceWatchingImp::NewL()
// ---------------------------------------------------------------------------
//
CPresenceWatchingImp* CPresenceWatchingImp::NewL(
    MXIMPContextInternal& aContext )
    {
    CPresenceWatchingImp* self =
        new( ELeave ) CPresenceWatchingImp( aContext );

    return self;
    }

// ---------------------------------------------------------------------------
// Implement supported interface access.
// ---------------------------------------------------------------------------
//
XIMPIMP_IF_BASE_GET_INTERFACE_BEGIN( CPresenceWatchingImp, 
                                     MPresenceWatching )
XIMPIMP_IF_BASE_GET_INTERFACE_END()


XIMPIMP_IF_BASE_GET_CONST_INTERFACE_BEGIN( CPresenceWatchingImp, 
                                           MPresenceWatching )
XIMPIMP_IF_BASE_GET_INTERFACE_END()


// ---------------------------------------------------------------------------
// CPresenceWatchingImp::~CPresenceWatchingImp()
// ---------------------------------------------------------------------------
//
CPresenceWatchingImp::~CPresenceWatchingImp()
    {
    //iContext not own
    }


// ---------------------------------------------------------------------------
// CPresenceWatchingImp::CPresenceWatchingImp()
// ---------------------------------------------------------------------------
//
CPresenceWatchingImp::CPresenceWatchingImp(
    MXIMPContextInternal& aContext )
    : iContext( aContext )
    {
    }


// ---------------------------------------------------------------------------
// CPresenceWatchingImp::SubscribePresentityPresenceL()
// ---------------------------------------------------------------------------
//
TXIMPRequestId CPresenceWatchingImp::SubscribePresentityPresenceL( 
        const MXIMPIdentity& aPresentityId,
        const MPresenceInfoFilter& aPif )
    {
    RXIMPObjOwningPtrArray< HBufC8 > packArray;
    CleanupClosePushL( packArray );

    // Pack the identity
    HBufC8* idPack = PackPresentityLC( aPresentityId );
    packArray.Append( idPack );
    CleanupStack::Pop( idPack );

    // pack the filter
    HBufC8* filterPack = PackFilterLC( aPif );
    packArray.Append( filterPack );
    CleanupStack::Pop( filterPack );

    // pack the array to a string
    HBufC8* packedBuf = TXIMPHBuf8Packer::PackArrayL( packArray );
    CleanupStack::PushL( packedBuf );

    // Queue the operation
    TXIMPRequestId reqId =
        iContext.QueueOperationL( NPresenceOps::EPrSubscribePresentityPresence,
                                   *packedBuf );

    CleanupStack::PopAndDestroy( packedBuf );
    CleanupStack::PopAndDestroy(); // packArray

    return reqId;
    }


// ---------------------------------------------------------------------------
// CPresenceWatchingImp::UnsubscribePresentityPresenceL()
// ---------------------------------------------------------------------------
//
TXIMPRequestId CPresenceWatchingImp::UnsubscribePresentityPresenceL( 
    const MXIMPIdentity& aPresentityId )
    {
    // Pack the identity
    HBufC8* idPack = PackPresentityLC( aPresentityId );
    // Queue the operation
    TXIMPRequestId reqId =
        iContext.QueueOperationL( NPresenceOps::EPrUnsubscribePresentityPresence,
                                   *idPack );
    CleanupStack::PopAndDestroy( idPack );
    return reqId;
    }


// ---------------------------------------------------------------------------
// CPresenceWatchingImp::SubscribePresentityGroupMembersPresenceL()
// ---------------------------------------------------------------------------
//
TXIMPRequestId CPresenceWatchingImp::SubscribePresentityGroupMembersPresenceL(
    const MXIMPIdentity& aGroupId,
    const MPresenceInfoFilter& aPif )
    {
    RXIMPObjOwningPtrArray< HBufC8 > packArray;
    CleanupClosePushL( packArray );

    // Pack the identity
    HBufC8* idPack = PackPresentityLC( aGroupId );
    packArray.Append( idPack );
    CleanupStack::Pop( idPack );

    // pack the filter
    HBufC8* filterPack = PackFilterLC( aPif );
    packArray.Append( filterPack );
    CleanupStack::Pop( filterPack );

    // pack the array to a string
    HBufC8* packedBuf = TXIMPHBuf8Packer::PackArrayL( packArray );
    CleanupStack::PushL( packedBuf );

    // Queue the operation
    TXIMPRequestId reqId =
        iContext.QueueOperationL( NPresenceOps::EPrSubscribePresentityGroupMembersPresence,
                                   *packedBuf );

    CleanupStack::PopAndDestroy( packedBuf );
    CleanupStack::PopAndDestroy(); // packArray

    return reqId;
    }


// ---------------------------------------------------------------------------
// CPresenceWatchingImp::UnsubscribePresentityGroupMembersPresenceL()
// ---------------------------------------------------------------------------
//
TXIMPRequestId CPresenceWatchingImp::UnsubscribePresentityGroupMembersPresenceL(
    const MXIMPIdentity& aGroupId )
    {
    // Pack the identity
    HBufC8* idPack = PackPresentityLC( aGroupId );
    // Queue the operation
    TXIMPRequestId reqId =
        iContext.QueueOperationL(
                        NPresenceOps::EPrUnsubscribePresentityGroupMembersPresence,
                        *idPack );
    CleanupStack::PopAndDestroy( idPack );
    return reqId;
    }


// ---------------------------------------------------------------------------
// CPresenceWatchingImp::PackPresentityLC()
// ---------------------------------------------------------------------------
//
HBufC8* CPresenceWatchingImp::PackPresentityLC( 
    const MXIMPIdentity& aIdentity )
    {
    const CXIMPIdentityImp* identityImp =
        TXIMPGetImpClassOrPanic< const CXIMPIdentityImp >::From( aIdentity );
    
    HBufC8* pack = TXIMPObjectPacker< const CXIMPIdentityImp >::PackL( *identityImp );
    CleanupStack::PushL( pack );

    return pack;
    }

// ---------------------------------------------------------------------------
// CPresenceWatchingImp::PackFilterLC()
// ---------------------------------------------------------------------------
//
HBufC8* CPresenceWatchingImp::PackFilterLC( 
    const MPresenceInfoFilter& aFilter )
    {
    const CPresenceInfoFilterImp* filterImp =
        TXIMPGetImpClassOrPanic< const CPresenceInfoFilterImp >::From( aFilter );
    
    HBufC8* pack = TXIMPObjectPacker< const CPresenceInfoFilterImp >::PackL( *filterImp );
    CleanupStack::PushL( pack );

    return pack;
    }


// End of file