diff -r 000000000000 -r 72b543305e3a mobilemessaging/postcard/postcardsrc/PostcardOperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/postcard/postcardsrc/PostcardOperation.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,276 @@ +/* +* Copyright (c) 2005 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: +* CPostcardOperation +* +*/ + + + +// ========== INCLUDE FILES ================================ + +#include +#include +#include // TDataType + +#include +#include +#include +#include + +#include + +#include + +#include +#include "PostcardOperation.h" + +// ========== EXTERNAL DATA STRUCTURES ===================== + +// ========== EXTERNAL FUNCTION PROTOTYPES ================= + +// ========== CONSTANTS ==================================== + +// ========== MACROS ======================================= + +// ========== LOCAL CONSTANTS AND MACROS =================== + +// ========== MODULE DATA STRUCTURES ======================= + +// ========== LOCAL FUNCTION PROTOTYPES ==================== + +// ========== LOCAL FUNCTIONS ============================== + +// ========== MEMBER FUNCTIONS ============================= + +// --------------------------------------------------------- +// CPostcardOperation::CPostcardOperation +// --------------------------------------------------------- +CPostcardOperation::CPostcardOperation( + MPostcardOperationObserver& aObserver, + CPostcardDocument& aDocument, + CPostcardAppUi& aAppUi, + RFs& aFs ) : + CActive( EPriorityStandard ), + iObserver( aObserver ), + iDocument( aDocument ), + iAppUi( aAppUi ), + iFs( aFs ), + iError( 0 ), + iStore( NULL ), + iHeaders( NULL ), + iImage( 0 ), + iText( 0 ), + iRecipient( 0 ), + iCommit( EFalse ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------- +// CPostcardOperation::CPostcardOperation +// --------------------------------------------------------- +CPostcardOperation::~CPostcardOperation( ) + { + delete iHeaders; + if( iStore ) + { + delete iStore; + } + } + +// --------------------------------------------------------- +// InitL +// --------------------------------------------------------- +void CPostcardOperation::InitL( ) + { + if( iDocument.MessageType( ) == EPostcardSent ) + { + iStore = iDocument.Mtm( ).Entry( ).ReadStoreL( ); + } + else + { + iStore = iDocument.Mtm( ).Entry( ).EditStoreL( ); + } + iManager = &( iStore->AttachmentManagerL( ) ); + } + +// --------------------------------------------------------- +// UnInitL +// --------------------------------------------------------- +void CPostcardOperation::UnInitL( ) + { + if( iCommit ) + { + iStore->CommitL( ); + } + delete iStore; + iStore = NULL; + } + +// --------------------------------------------------------- +// CheckAttas +// --------------------------------------------------------- +TInt CPostcardOperation::CheckAttasL( ) + { + // Goes thru the attas and check how many images, text and recipients there are + TInt count = iManager->AttachmentCount( ); + CMsvAttachment* atta = NULL; + TInt numOfImages(0), numOfTexts(0), numOfRecipients(0), numOfOthers(0); + TInt numOfSmils(0); + for(TInt a = 0; aGetAttachmentInfoL( a ); + CleanupStack::PushL( atta ); + switch( RecogniseFileType( atta->MimeType( ) ) ) + { + case EPostcardFileImage: + numOfImages++; + iImage = atta->Id( ); + break; + case EPostcardFileText: + numOfTexts++; + iText = atta->Id( ); + break; + case EPostcardFileAddress: + numOfRecipients++; + iRecipient = atta->Id( ); + break; + case EPostcardFileSmil: + numOfSmils++; + iSmil = atta->Id( ); + break; + default: + { + if( atta->AttachmentName( ).Find( _L("X-Nokia-PhonebookId_") ) != -1 ) + { + iText = atta->Id( ); + numOfTexts++; + } + else + { + numOfOthers++; + } + break; + } + } + CleanupStack::PopAndDestroy( atta ); + } + if( numOfImages > 1 || numOfTexts > 1 || numOfRecipients > 1 ) + { + // Do something here as there's invalid number of attachments! + SetError( R_POSTCARD_MULTIPLE_FILES ); + CompleteSelf( -1 ); + return R_POSTCARD_MULTIPLE_FILES; + } + if( numOfOthers > 0 || numOfSmils > 1 ) + { + SetError( R_POSTCARD_FORMAT_NOT_SUPPORTED ); + CompleteSelf( -1 ); + return R_POSTCARD_FORMAT_NOT_SUPPORTED; + } + return KErrNone; + } + +// --------------------------------------------------------- +// CompleteSelf +// --------------------------------------------------------- +void CPostcardOperation::CompleteSelf( TInt aError ) + { + iStatus = KRequestPending; + TRequestStatus* pStatus = &iStatus; + SetActive( ); + User::RequestComplete( pStatus, aError ); + } + +// --------------------------------------------------------- +// GetErrors +// --------------------------------------------------------- +TInt CPostcardOperation::GetError( ) + { + return iError; + } + +// --------------------------------------------------------- +// SetError +// --------------------------------------------------------- +void CPostcardOperation::SetError( TInt aError ) + { + iError = aError; + } + +// --------------------------------------------------------- +// ResetErrors +// --------------------------------------------------------- +void CPostcardOperation::ResetError( ) + { + iError = 0; + } + +// --------------------------------------------------------- +// RecogniseFileType +// --------------------------------------------------------- +TPostcardFileType CPostcardOperation::RecogniseFileType( const TDataType& aMimeType ) + { + if ( aMimeType.Des8( ).CompareF( KMsgMimeTextPlain ) == 0 ) + { + return EPostcardFileText; + } + else if ( aMimeType.Des8( ).CompareF( KMsgMimeImageJpeg ) == 0 ) + { + return EPostcardFileImage; + } + else if ( aMimeType.Des8( ).CompareF( KMsgMimeImagePng ) == 0 ) + { + return EPostcardFileImage; + } + else if ( aMimeType.Des8( ).CompareF( KMsgMimeImageGif ) == 0 ) + { + return EPostcardFileImage; + } + else if ( aMimeType.Des8( ).CompareF( KMsgMimeVCard ) == 0 ) + { + return EPostcardFileAddress; + } + else if ( aMimeType.Des8( ).CompareF( KMsgMimeSmil ) == 0 ) + { + return EPostcardFileSmil; + } + else + { + return EPostcardFileUnknown; + } + } + +// --------------------------------------------------------- +// CPostcardOperation::TMsvIdToIndex +// --------------------------------------------------------- +TInt CPostcardOperation::TMsvIdToIndexL( TMsvAttachmentId& aId ) + { + TInt count = iManager->AttachmentCount( ); + CMsvAttachment* atta = NULL; + for(TInt a = 0; aGetAttachmentInfoL( a ); + if( atta->Id( ) == aId ) + { + delete atta; + return a; + } + delete atta; + } + return KErrNotFound; + } + +// EOF