emailservices/emailclientapi/src/emailcontent.cpp
changeset 0 8466d47a6819
child 8 e1b6206813b4
equal deleted inserted replaced
-1:000000000000 0:8466d47a6819
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: This file implements class CEmailContent.
       
    15 *
       
    16 */
       
    17 
       
    18 #include <apmstd.h>
       
    19 
       
    20 #include "emailcontent.h"
       
    21 #include "CFSMailClient.h"
       
    22 #include "emailclientapi.hrh"
       
    23 #include "emailapiutils.h"
       
    24 
       
    25 
       
    26 
       
    27 // ---------------------------------------------------------------------------
       
    28 // 
       
    29 // ---------------------------------------------------------------------------
       
    30 // 
       
    31 CEmailMessageContent* CEmailMessageContent::NewL( 
       
    32         CPluginData& aPluginData,
       
    33         const TMessageContentId& aMsgContentId,
       
    34         CFSMailMessagePart* aPart)    
       
    35     {
       
    36     
       
    37     CEmailMessageContent* self = new ( ELeave ) CEmailMessageContent( aPluginData, aMsgContentId, aPart );
       
    38     CleanupStack::PushL( self );
       
    39     self->ConstructL();
       
    40     CleanupStack::Pop();
       
    41     return self;
       
    42     }
       
    43 
       
    44 // ---------------------------------------------------------------------------
       
    45 // 
       
    46 // ---------------------------------------------------------------------------
       
    47 // 
       
    48 CFSMailMessagePart& CEmailMessageContent::Part()
       
    49     {
       
    50     return *iPart;
       
    51     }
       
    52 
       
    53 // ---------------------------------------------------------------------------
       
    54 // 
       
    55 // ---------------------------------------------------------------------------
       
    56 // 
       
    57 void CEmailMessageContent::SetPart(CFSMailMessagePart* aPart)
       
    58     {
       
    59     iPart = aPart;
       
    60     }
       
    61 
       
    62 // ---------------------------------------------------------------------------
       
    63 // 
       
    64 // ---------------------------------------------------------------------------
       
    65 // 
       
    66 CPluginData& CEmailMessageContent::PluginData()
       
    67     {
       
    68     return iPluginData;
       
    69     }
       
    70 
       
    71 // ---------------------------------------------------------------------------
       
    72 // 
       
    73 // ---------------------------------------------------------------------------
       
    74 // 
       
    75 void CEmailMessageContent::ConstructL( )    
       
    76     {
       
    77     iPlugin = iPluginData.ClaimInstanceL();
       
    78     }
       
    79 
       
    80 // ---------------------------------------------------------------------------
       
    81 // 
       
    82 // ---------------------------------------------------------------------------
       
    83 // 
       
    84 CEmailMessageContent::~CEmailMessageContent()
       
    85     {
       
    86     iPluginData.ReleaseInstance();
       
    87     delete iPart;
       
    88     delete iBuf;
       
    89     }
       
    90 
       
    91 // ---------------------------------------------------------------------------
       
    92 // 
       
    93 // ---------------------------------------------------------------------------
       
    94 // 
       
    95 CEmailMessageContent::CEmailMessageContent(
       
    96         CPluginData& aPluginData,
       
    97         const TMessageContentId& aMsgContentId,
       
    98         CFSMailMessagePart* aPart):
       
    99         iPluginData( aPluginData ), iPart(aPart), iMsgContentId( aMsgContentId ), iBuf(NULL), iUsed(0)
       
   100     {
       
   101     }
       
   102 
       
   103 // ---------------------------------------------------------------------------
       
   104 // 
       
   105 // ---------------------------------------------------------------------------
       
   106 // 
       
   107 TEmailTypeId CEmailMessageContent::InterfaceId() const
       
   108     {
       
   109     return KEmailIFUidMessageContent;
       
   110     }
       
   111     
       
   112 // ---------------------------------------------------------------------------
       
   113 // 
       
   114 // ---------------------------------------------------------------------------
       
   115 // 
       
   116 void CEmailMessageContent::Release()
       
   117     {
       
   118     delete this;
       
   119     }
       
   120 
       
   121 // ---------------------------------------------------------------------------
       
   122 // 
       
   123 // ---------------------------------------------------------------------------
       
   124 // 
       
   125 TMessageContentId CEmailMessageContent::Id() const
       
   126     {
       
   127     return iMsgContentId;
       
   128     }
       
   129 
       
   130 // ---------------------------------------------------------------------------
       
   131 // 
       
   132 // ---------------------------------------------------------------------------
       
   133 // 
       
   134 TPtrC CEmailMessageContent::ContentType() const
       
   135     {
       
   136     return iPart->GetContentType();
       
   137     }
       
   138 
       
   139 // ---------------------------------------------------------------------------
       
   140 // 
       
   141 // ---------------------------------------------------------------------------
       
   142 // 
       
   143 void CEmailMessageContent::SetContentType( const TDesC& aContentType )
       
   144     {
       
   145     iPart->SetContentType( aContentType );
       
   146     }
       
   147 
       
   148 // ---------------------------------------------------------------------------
       
   149 // 
       
   150 // ---------------------------------------------------------------------------
       
   151 // 
       
   152 TPtrC CEmailMessageContent::ContentId() const
       
   153     {
       
   154     return iPart->ContentID();
       
   155     }
       
   156 
       
   157 // ---------------------------------------------------------------------------
       
   158 // 
       
   159 // ---------------------------------------------------------------------------
       
   160 // 
       
   161 void CEmailMessageContent::SetContentId( const TDesC& aContentId )
       
   162     {
       
   163     TRAP_IGNORE( iPart->SetContentIDL( aContentId ) );
       
   164     }
       
   165 
       
   166 // ---------------------------------------------------------------------------
       
   167 // 
       
   168 // ---------------------------------------------------------------------------
       
   169 // 
       
   170 TPtrC CEmailMessageContent::ContentDescription() const
       
   171     {
       
   172     return iPart->ContentDescription();
       
   173     }
       
   174 
       
   175 // ---------------------------------------------------------------------------
       
   176 // 
       
   177 // ---------------------------------------------------------------------------
       
   178 // 
       
   179 void CEmailMessageContent::SetContentDescription( 
       
   180     const TDesC& aContentDescription )
       
   181     {
       
   182     iPart->SetContentDescription( aContentDescription );
       
   183     }
       
   184 
       
   185 // ---------------------------------------------------------------------------
       
   186 // 
       
   187 // ---------------------------------------------------------------------------
       
   188 // 
       
   189 TPtrC CEmailMessageContent::ContentDisposition() const
       
   190     {
       
   191     return iPart->ContentDisposition();
       
   192     }
       
   193 
       
   194 // ---------------------------------------------------------------------------
       
   195 // 
       
   196 // ---------------------------------------------------------------------------
       
   197 // 
       
   198 void CEmailMessageContent::SetContentDisposition( 
       
   199     const TDesC& aContentDisposition )
       
   200     {
       
   201     iPart->SetContentDisposition( aContentDisposition );
       
   202     }
       
   203 
       
   204 // ---------------------------------------------------------------------------
       
   205 // 
       
   206 // ---------------------------------------------------------------------------
       
   207 // 
       
   208 TPtrC CEmailMessageContent::ContentClass() const
       
   209     {
       
   210     return iPart->GetContentClass();
       
   211     }
       
   212 
       
   213 // ---------------------------------------------------------------------------
       
   214 // 
       
   215 // ---------------------------------------------------------------------------
       
   216 // 
       
   217 void CEmailMessageContent::SetContentClass( const TDesC& aContentClass )
       
   218     {
       
   219     iPart->SetContentClass( aContentClass );
       
   220     }
       
   221 
       
   222 // ---------------------------------------------------------------------------
       
   223 // 
       
   224 // ---------------------------------------------------------------------------
       
   225 // 
       
   226 TInt CEmailMessageContent::AvailableSize() const
       
   227     {
       
   228     return iPart->FetchedContentSize();
       
   229     }
       
   230 
       
   231 // ---------------------------------------------------------------------------
       
   232 // 
       
   233 // ---------------------------------------------------------------------------
       
   234 // 
       
   235 TInt CEmailMessageContent::TotalSize() const
       
   236     {
       
   237     return iPart->ContentSize();
       
   238     }
       
   239 
       
   240 // ---------------------------------------------------------------------------
       
   241 // 
       
   242 // ---------------------------------------------------------------------------
       
   243 // 
       
   244 TPtrC CEmailMessageContent::ContentL() const
       
   245     {
       
   246     TInt size = AvailableSize();
       
   247     TPtr16 ptr( 0, size );
       
   248     if ( size != 0 )
       
   249         {
       
   250         if ( iBuf == NULL )
       
   251             {
       
   252             iBuf = HBufC::NewL( size );
       
   253             }
       
   254         
       
   255         if ( size > ptr.MaxLength() )
       
   256             {
       
   257             iBuf = iBuf->ReAlloc( size );
       
   258             }
       
   259         ptr.Set( iBuf->Des() );
       
   260         iPart->GetContentToBufferL( ptr, iUsed );
       
   261         iUsed += size;
       
   262         }    
       
   263     return ptr;
       
   264     }
       
   265 
       
   266 // ---------------------------------------------------------------------------
       
   267 // 
       
   268 // ---------------------------------------------------------------------------
       
   269 // 
       
   270 void CEmailMessageContent::SetContentL( const TDesC& aContent )
       
   271     {
       
   272     iPart->SetContentSize( aContent.Length() );
       
   273     iPart->SetFetchedContentSize( aContent.Length() );
       
   274     iPlugin->SetContentL(aContent, 
       
   275             FsMsgId(iPluginData, iMsgContentId.iMessageId.iFolderId.iMailboxId),
       
   276             FsMsgId(iPluginData, iMsgContentId.iMessageId.iFolderId),
       
   277             FsMsgId(iPluginData, iMsgContentId.iMessageId),
       
   278             FsMsgId(iPluginData, iMsgContentId));    
       
   279     }
       
   280 
       
   281 // ---------------------------------------------------------------------------
       
   282 // 
       
   283 // ---------------------------------------------------------------------------
       
   284 // 
       
   285 void CEmailMessageContent::FetchL( MEmailFetchObserver&  aObserver )
       
   286     {
       
   287     const TFSMailMsgId fsId = FsMsgId(iPluginData, iMsgContentId);
       
   288     if ( !iFetchObserver )
       
   289         {
       
   290         iFetchObserver = new (ELeave) CContentRequestObserver( *this );            
       
   291         }
       
   292     iFetchObserver->SetObserverL(&aObserver);
       
   293     iRequestId = iPart->FetchMessagePartL(fsId, *iFetchObserver, TUint(0));
       
   294     
       
   295     }
       
   296 
       
   297 // ---------------------------------------------------------------------------
       
   298 // 
       
   299 // ---------------------------------------------------------------------------
       
   300 // 
       
   301 void CEmailMessageContent::CancelFetch()
       
   302     {
       
   303     TRAP_IGNORE( iPlugin->CancelL(iRequestId) );
       
   304     }
       
   305 
       
   306 // ---------------------------------------------------------------------------
       
   307 // 
       
   308 // ---------------------------------------------------------------------------
       
   309 // 
       
   310 void CEmailMessageContent::SaveToFileL( const TDesC& aPath )
       
   311     {
       
   312     iPlugin->CopyMessagePartFileL(
       
   313         FsMsgId( iPluginData, iMsgContentId.iMessageId.iFolderId.iMailboxId ), 
       
   314         FsMsgId( iPluginData, iMsgContentId.iMessageId.iFolderId ), 
       
   315         FsMsgId( iPluginData, iMsgContentId.iMessageId ), 
       
   316         FsMsgId( iPluginData, iMsgContentId ),
       
   317         aPath );
       
   318     }
       
   319 
       
   320 /* Dummy implementations, not ever called */
       
   321 MEmailMultipart* CEmailMessageContent::AsMultipartOrNull() const 
       
   322     {
       
   323     return NULL;
       
   324     }
       
   325 
       
   326 // ---------------------------------------------------------------------------
       
   327 // 
       
   328 // ---------------------------------------------------------------------------
       
   329 // 
       
   330 MEmailTextContent* CEmailMessageContent::AsTextContentOrNull()const
       
   331     {
       
   332     return NULL;
       
   333     }
       
   334 
       
   335 // ---------------------------------------------------------------------------
       
   336 // 
       
   337 // ---------------------------------------------------------------------------
       
   338 // 
       
   339 MEmailAttachment* CEmailMessageContent::AsAttachmentOrNull() const
       
   340     {
       
   341     return NULL;
       
   342     }
       
   343 
       
   344 
       
   345 // ---------------------------------------------------------------------------
       
   346 // 
       
   347 // ---------------------------------------------------------------------------
       
   348 // 
       
   349 CEmailMessageContent::CContentRequestObserver::CContentRequestObserver( 
       
   350     CEmailMessageContent& aParent ) : iObserver( NULL ), iParent( aParent )
       
   351     {    
       
   352     }
       
   353 
       
   354 
       
   355 // ---------------------------------------------------------------------------
       
   356 // 
       
   357 // ---------------------------------------------------------------------------
       
   358 // 
       
   359 void CEmailMessageContent::CContentRequestObserver::RequestResponseL( 
       
   360     TFSProgress aEvent, TInt /* aRequestId */ )
       
   361     {
       
   362     if (aEvent.iProgressStatus == TFSProgress::EFSStatus_RequestComplete)
       
   363         {
       
   364         delete iParent.iPart;
       
   365         iParent.iPart = NULL;
       
   366         CFSMailMessagePart *part = iParent.iPlugin->MessagePartL( 
       
   367             FsMsgId( iParent.iPluginData, iParent.iMsgContentId.iMessageId.iFolderId.iMailboxId ),
       
   368             FsMsgId( iParent.iPluginData, iParent.iMsgContentId.iMessageId.iFolderId ),
       
   369             FsMsgId( iParent.iPluginData, iParent.iMsgContentId.iMessageId ),
       
   370             FsMsgId( iParent.iPluginData, iParent.iMsgContentId ) );
       
   371         iParent.SetPart( part );
       
   372         iObserver->DataFetchedL(aEvent.iError);       
       
   373         }
       
   374     }
       
   375 
       
   376 // ---------------------------------------------------------------------------
       
   377 // 
       
   378 // ---------------------------------------------------------------------------
       
   379 // 
       
   380 void CEmailMessageContent::CContentRequestObserver::SetObserverL( MEmailFetchObserver* aObserver )
       
   381     {
       
   382     iObserver = aObserver;
       
   383     }
       
   384 
       
   385 // End of file.