mobilemessaging/postcard/postcardsrc/PostcardOperation.cpp
changeset 0 72b543305e3a
--- /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 <badesca.h>
+#include <e32std.h>
+#include <apmstd.h>  // TDataType
+
+#include <mmsvattachmentmanager.h>
+#include <mmsvattachmentmanagersync.h>
+#include <cmsvattachment.h>
+#include <cmsvmimeheaders.h>
+
+#include <mmsclient.h>
+
+#include <MsgMimeTypes.h>
+
+#include <Postcard.rsg>
+#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; a<count; a++)
+        {
+        atta = iManager->GetAttachmentInfoL( 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; a<count; a++)
+        {
+        atta = iManager->GetAttachmentInfoL( a );
+        if( atta->Id( ) == aId )
+        	{
+        	delete atta;
+        	return a;
+        	}
+        delete atta;
+        }
+	return KErrNotFound;
+	}
+
+// EOF