diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/sendas/server/src/csendasattachment.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/sendas/server/src/csendasattachment.cpp Wed Nov 03 22:41:46 2010 +0530 @@ -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 + +#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; + }