diff -r bf7eb7911fc5 -r 997a02608b3a emailservices/emailclientapi/src/emailcontent.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailservices/emailclientapi/src/emailcontent.cpp Tue Jul 06 14:04:34 2010 +0300 @@ -0,0 +1,412 @@ +/* +* 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 + +#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; + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +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