emailservices/emailclientapi/src/emailcontent.cpp
author hgs
Thu, 14 Oct 2010 17:33:43 +0300
changeset 76 38bf5461e270
parent 62 a8c646b56683
permissions -rw-r--r--
201041

/*
* Copyright (c) 2010 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 CEmailContent.
*
*/

#include <apmstd.h>

#include "emailcontent.h"
#include "CFSMailClient.h"
#include "emailclientapi.hrh"
#include "emailapiutils.h"

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
CEmailMessageContent* CEmailMessageContent::NewL( 
        CPluginData& aPluginData,
        const TMessageContentId& aMsgContentId,
        CFSMailMessagePart* aPart )    
    {

    CEmailMessageContent* self = new ( ELeave ) 
        CEmailMessageContent( aPluginData, aMsgContentId, aPart );
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
CFSMailMessagePart& CEmailMessageContent::Part()
    {
    return *iPart;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CEmailMessageContent::SetPart( CFSMailMessagePart* aPart )
    {
    iPart = aPart;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
CPluginData& CEmailMessageContent::PluginData()
    {
    return iPluginData;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CEmailMessageContent::ConstructL()
    {
    iPlugin = iPluginData.ClaimInstanceL();
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
CEmailMessageContent::~CEmailMessageContent()
    {
    iPluginData.ReleaseInstance();
    delete iPart;
    delete iBuf;
    delete iFetchObserver;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
CEmailMessageContent::CEmailMessageContent(
        CPluginData& aPluginData,
        const TMessageContentId& aMsgContentId,
        CFSMailMessagePart* aPart):
        iPluginData( aPluginData ), 
        iPart( aPart ), 
        iMsgContentId( aMsgContentId ), 
        iBuf( NULL ), 
        iUsed( 0 )
    {
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
TEmailTypeId CEmailMessageContent::InterfaceId() const
    {
    return KEmailIFUidMessageContent;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CEmailMessageContent::Release()
    {
    delete this;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
TMessageContentId CEmailMessageContent::Id() const
    {
    return iMsgContentId;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
TPtrC CEmailMessageContent::ContentType() const
    {
    if (iPart)
        {
        return iPart->GetContentType();
        } 
    else
        {
        return TPtrC(0,0);
        }
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CEmailMessageContent::SetContentType( const TDesC& aContentType )
    {
    if (iPart)
        iPart->SetContentType( aContentType );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
TPtrC CEmailMessageContent::ContentId() const
    {
    if (iPart)
        {
        return iPart->ContentID();
        }
    else
        {
        return TPtrC(0,0);
        }
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CEmailMessageContent::SetContentId( const TDesC& aContentId )
    {
    if (iPart)
        TRAP_IGNORE( iPart->SetContentIDL( aContentId ) );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
TPtrC CEmailMessageContent::ContentDescription() const
    {
    if (iPart)
        {
        return iPart->ContentDescription();
        }
    else
        {
        return TPtrC(0,0);
        }
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CEmailMessageContent::SetContentDescription( 
    const TDesC& aContentDescription )
    {
    if (iPart)
        iPart->SetContentDescription( aContentDescription );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
TPtrC CEmailMessageContent::ContentDisposition() const
    {
    if (iPart)
        {
        return iPart->ContentDisposition();
        }
    else
        {
        return TPtrC(0,0);
        }
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CEmailMessageContent::SetContentDisposition( 
    const TDesC& aContentDisposition )
    {
    if (iPart)
        iPart->SetContentDisposition( aContentDisposition );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
TPtrC CEmailMessageContent::ContentClass() const
    {
    if (iPart)
        {
        return iPart->GetContentClass();
        }
    else
        {
        return TPtrC(0,0);
        }
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CEmailMessageContent::SetContentClass( const TDesC& aContentClass )
    {
    if (iPart)
        iPart->SetContentClass( aContentClass );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
TInt CEmailMessageContent::AvailableSize() const
    {
    if (iPart)
        {
        return iPart->FetchedContentSize();
        }
    else
        {
        return 0;
        }
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
TInt CEmailMessageContent::TotalSize() const
    {
    if (iPart)
        {
        return iPart->ContentSize();
        }
    else
        {
        return 0;
        }
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
TPtrC CEmailMessageContent::ContentL() const
    {
    TInt size = AvailableSize();
    TPtr16 ptr( 0, size );
    if ( size != 0 )
        {
        if ( !iBuf )
            {
            iBuf = HBufC::NewL( size );
            }
        
        if ( size > ptr.MaxLength() )
            {
            iBuf = iBuf->ReAlloc( size );
            }
        ptr.Set( iBuf->Des() );
        iPart->GetContentToBufferL( ptr, iUsed );
        iUsed += size;
        }
    return ptr;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CEmailMessageContent::SetContentL( const TDesC& aContent )
    {
    User::LeaveIfNull( iPart );
    iPart->SetContentSize( aContent.Length() );
    iPart->SetFetchedContentSize( aContent.Length() );
    iPlugin->SetContentL( aContent, 
            FsMsgId( iPluginData, iMsgContentId.iMessageId.iFolderId.iMailboxId ),
            FsMsgId( iPluginData, iMsgContentId.iMessageId.iFolderId ),
            FsMsgId( iPluginData, iMsgContentId.iMessageId ),
            FsMsgId( iPluginData, iMsgContentId ) );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CEmailMessageContent::FetchL( MEmailFetchObserver&  aObserver )
    {
    User::LeaveIfNull( iPart );
    const TFSMailMsgId fsId = FsMsgId(iPluginData, iMsgContentId);
    if ( !iFetchObserver )
        {
        iFetchObserver = new ( ELeave ) CContentRequestObserver( *this );
        }
    iFetchObserver->SetObserverL( &aObserver );
    iRequestId = iPart->FetchMessagePartL( fsId, *iFetchObserver, TUint( 0 ) );

    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CEmailMessageContent::CancelFetch()
    {
    TRAP_IGNORE( iPlugin->CancelL( iRequestId ) );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CEmailMessageContent::SaveToFileL( const TDesC& aPath )
    {
    iPlugin->CopyMessagePartFileL(
        FsMsgId( iPluginData, iMsgContentId.iMessageId.iFolderId.iMailboxId ),
        FsMsgId( iPluginData, iMsgContentId.iMessageId.iFolderId ),
        FsMsgId( iPluginData, iMsgContentId.iMessageId ),
        FsMsgId( iPluginData, iMsgContentId ),
        aPath );
    }

/* Dummy implementations, not ever called */
MEmailMultipart* CEmailMessageContent::AsMultipartOrNull() const 
    {
    return NULL;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
MEmailTextContent* CEmailMessageContent::AsTextContentOrNull() const
    {
    return NULL;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
MEmailAttachment* CEmailMessageContent::AsAttachmentOrNull() const
    {
    return NULL;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
CEmailMessageContent::CContentRequestObserver::CContentRequestObserver( 
    CEmailMessageContent& aParent ) : iObserver( NULL ), iParent( aParent )
    {
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CEmailMessageContent::CContentRequestObserver::RequestResponseL( 
    TFSProgress aEvent, TInt /* aRequestId */ )
    {
    if ( aEvent.iProgressStatus == TFSProgress::EFSStatus_RequestComplete )
        {
        delete iParent.iPart;
        iParent.iPart = NULL;
        CFSMailMessagePart *part = iParent.iPlugin->MessagePartL( 
            FsMsgId( iParent.iPluginData, iParent.iMsgContentId.iMessageId.iFolderId.iMailboxId ),
            FsMsgId( iParent.iPluginData, iParent.iMsgContentId.iMessageId.iFolderId ),
            FsMsgId( iParent.iPluginData, iParent.iMsgContentId.iMessageId ),
            FsMsgId( iParent.iPluginData, iParent.iMsgContentId ) );
        iParent.SetPart( part );

        if ( iObserver ) 
            iObserver->DataFetchedL( aEvent.iError );
        }
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
void CEmailMessageContent::CContentRequestObserver::SetObserverL( MEmailFetchObserver* aObserver )
    {
    iObserver = aObserver;
    }

// End of file