emailservices/emailclientapi/src/emailapiutils.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 15 Mar 2010 12:39:10 +0200
branchRCL_3
changeset 11 0396474f30f5
parent 8 e1b6206813b4
child 24 d189ee25cf9d
permissions -rw-r--r--
Revision: 201009 Kit: 201010

                                                                                                       /*
* Copyright (c) 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: This file implements class CEmailApiUtils.
*
*/

#include    <e32std.h>       
#include "cfsmailplugin.h"
#include "emailapidefs.h"
#include "emailclientapiimpldefs.h"
#include "emailapiutils.h"

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

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
CPluginData::CPluginData( TUid aUid ) :
    iData( aUid ),
    iPluginLoadError( KErrNotReady )
    { 
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
CPluginData::~CPluginData()
    {
    // panic if a user of plugin has not called ReleaseInstance after ClaimInstance
    __ASSERT_ALWAYS( iOwned || !iRefCount, Panic( EMailPanicPluginNotReleased ) );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
CFSMailPlugin* CPluginData::ClaimInstance()
    {
    if ( !iData.iPlugin )
        {
        TRAP( iPluginLoadError, iData.iPlugin = CFSMailPlugin::NewL( iData.iUid ) );
        }
    if ( !iPluginLoadError )
        {
        iRefCount++;
        }
    return iData.iPlugin;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
CFSMailPlugin* CPluginData::ClaimInstanceL()
    {
    ClaimInstance();
    User::LeaveIfError( iPluginLoadError );
    return iData.iPlugin;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CPluginData::ReleaseInstance()
    {
    if ( iData.iPlugin )
        {
        iRefCount--;
        if ( !iRefCount )
            {
            delete iData.iPlugin;
            iData.iPlugin = NULL;
            }
        }
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CPluginData::ReleasePushL()
    {
    TCleanupItem item( &CPluginData::CleanupOperation, this );
    CleanupStack::PushL( item );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CPluginData::CleanupOperation( TAny* aAny )
    {
    CPluginData* pdata = reinterpret_cast<CPluginData*>( aAny );
    pdata->ReleaseInstance();
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
TUid CPluginData::Uid() const
    {
    return iData.iUid;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
TInt CPluginData::LoadResult() const
    {
    return iPluginLoadError;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
TFSMailMsgId FsMsgId( const CPluginData& aPluginData, const EmailInterface::TBaseId& aId )
    {
    TFSMailMsgId id( aPluginData.Uid(), aId.iId );
    return id;
    }



// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CleanupReleasePush::PushL( EmailInterface::MEmailInterface& aItem )
    {
    TCleanupItem item( &CleanupReleasePush::Release, &aItem );
    CleanupStack::PushL( item );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CleanupReleasePush::Release( TAny *aPtr )
    {
    reinterpret_cast<EmailInterface::MEmailInterface*>( aPtr )->Release();
    }

// End of file.