messagingfw/sendas/server/src/csendasattachment.cpp
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/sendas/server/src/csendasattachment.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,133 @@
+// Copyright (c) 2004-2009 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:
+//
+
+#include "csendasattachment.h"
+
+#include <mtclbase.h>
+
+#include "msendasattachmentobserver.h"
+#include "tsendasserverpanic.h"
+
+CSendAsAttachment* CSendAsAttachment::NewL(MSendAsAttachmentObserver& aObserver, CBaseMtm& aClientMtm)
+	{
+	CSendAsAttachment* self = new(ELeave) CSendAsAttachment(aObserver, aClientMtm);
+	return self;
+	}
+	
+CSendAsAttachment::~CSendAsAttachment()
+	{
+	// do not notify observer during deletion.
+	iObserver = NULL;
+	Cancel();
+	}
+	
+CSendAsAttachment::CSendAsAttachment(MSendAsAttachmentObserver& aObserver, CBaseMtm& aClientMtm) 
+: CActive(CActive::EPriorityStandard), iObserver(&aObserver), iClientMtm(aClientMtm)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CSendAsAttachment::AddExistingFileAttachmentL(RFile& aAttachment)
+	{
+	AddExistingFileAttachmentWithMimeTypeL(aAttachment, KNullDesC8, 0);
+	}
+
+void CSendAsAttachment::AddExistingFileAttachmentWithMimeTypeL(RFile& aAttachment, const TDesC8& aMimeType, TUint aCharset)
+	{
+	__ASSERT_ALWAYS( iState == EIdle, TSendAsServerPanic::Panic(TSendAsServerPanic::ESendAsAttachmentBadState) );
+		
+	iClientMtm.AddAttachmentL(aAttachment, aMimeType, aCharset, iStatus);
+	SetActive();
+
+	iState = EAddingAttachment;
+	}
+
+void CSendAsAttachment::AddFileLinkAttachmentL(const TDesC& aFileName)
+	{
+	AddFileLinkAttachmentWithMimeTypeL(aFileName, KNullDesC8, 0);
+	}
+
+void CSendAsAttachment::AddFileLinkAttachmentWithMimeTypeL(const TDesC& aFileName, const TDesC8& aMimeType, TUint aCharset)
+	{
+	__ASSERT_ALWAYS( iState == EIdle, TSendAsServerPanic::Panic(TSendAsServerPanic::ESendAsAttachmentBadState) );
+	
+	iClientMtm.AddLinkedAttachmentL(aFileName, aMimeType, aCharset, iStatus);
+	SetActive();
+
+	iState = EAddingAttachment;
+	}
+
+void CSendAsAttachment::CreateNewFileAttachmentL(RFile& aAttachment, const TDesC& aFileName)
+	{
+	CreateNewFileAttachmentWithMimeTypeL(aAttachment, aFileName, KNullDesC8, 0);
+	}
+
+void CSendAsAttachment::CreateNewFileAttachmentWithMimeTypeL(RFile& aAttachment, const TDesC& aFileName, const TDesC8& aMimeType, TUint aCharset)
+	{
+	__ASSERT_ALWAYS( iState == EIdle, TSendAsServerPanic::Panic(TSendAsServerPanic::ESendAsAttachmentBadState) );
+
+	iClientMtm.CreateAttachmentL(aFileName, aAttachment, aMimeType, aCharset, iStatus);
+	SetActive();
+
+	iState = ECreatingAttachment;
+	}
+	
+void CSendAsAttachment::CompleteL(TInt aError)
+	{
+	if( iObserver != NULL )
+		{
+		// notify observer that the attachment has completed.
+		// transference of the attachment file to the client on create
+		// attachment completes the RMessage2.
+		iObserver->AttachmentCompleteL(aError, (iState != ECreatingAttachment));
+		}	
+	}
+	
+/*
+ *	Methods from CActive
+ */
+
+void CSendAsAttachment::RunL()
+	{
+	User::LeaveIfError(iStatus.Int());
+	
+	switch( iState )
+		{
+	case ECreatingAttachment:
+		// drop through to next case...
+	case EAddingAttachment:
+		{
+		CompleteL(KErrNone);
+		} break;
+	case EIdle:
+	case EAttachmentComplete:
+	default:
+		User::Invariant();
+		break;
+		}
+	}
+
+void CSendAsAttachment::DoCancel()
+	{
+	iClientMtm.CancelAttachmentOperation();
+	TRAP_IGNORE(CompleteL(KErrCancel));
+	}
+	
+TInt CSendAsAttachment::RunError(TInt aError)
+	{
+	TInt error = KErrNone;
+	TRAP(error,CompleteL(aError));
+	return error;
+	}