diff -r a3a1ae9acec6 -r da5135c61bad meetingrequest/mrtasks/mrtaskplugin/src/cesmrforwardasfsmailtask.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrtasks/mrtaskplugin/src/cesmrforwardasfsmailtask.cpp Wed Mar 31 21:08:33 2010 +0300 @@ -0,0 +1,296 @@ +/* +* Copyright (c) 2007-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: Implementation for forwarding mr as email +* +*/ + +#include "emailtrace.h" +#include "cesmrforwardasfsmailtask.h" + +#include +#include +#include +#include +#include +#include +// +#include "FreestyleEmailUiConstants.h" +// +#include "tesmrinputparams.h" + +#include "cesmrcaldbmgr.h" +#include "mesmrmeetingrequestentry.h" +#include "cesmrmailplaitextformatter.h" +#include "cesmrcalimportexporter.h" +#include "cesmrfsemailmanager.h" +#include "cesmrcaluserutil.h" +#include "esmrinternaluid.h" +#include "esmrhelper.h" + +// Unnamed namespace for local definitions +namespace { + +// remove hardcoded paths +// Literal for temporary iCal meeting path +//_LIT( KTemporaryIcsPath, "c:\\temp\\" ); //codescanner::driveletters +// + +// Literal for temporary iCal meeting file +// remove hardcoded paths +//_LIT( KTemporaryIcsFullName, +// "c:\\temp\\meeting.ics" ); //codescanner::driveletters +_LIT( KTemporaryIcsName, "temp\\meeting.ics" ); +// + +#ifdef _DEBUG + +// Literal for panics +_LIT( KESMRForwardAsFSMail, "ESMRForwardAsFSMail" ); + +// Panic codes +enum TESMRForwardAsFSMailPanic + { + EESMRForwardAsFSMailCoeNull, + EESMRForwardAsFSMailAppUiNull, + EESMRForwardCannotBeTriggeredFromMail + }; + +// --------------------------------------------------------------------------- +// Raises system panic. +// --------------------------------------------------------------------------- +// +void Panic( TESMRForwardAsFSMailPanic aPanic ) + { + User::Panic( KESMRForwardAsFSMail, aPanic ); + } + +#endif // _DEBUG + +} + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CESMRForwardAsFSMailTask::CESMRForwardAsFSMailTask +// --------------------------------------------------------------------------- +// +CESMRForwardAsFSMailTask::CESMRForwardAsFSMailTask( + MESMRCalDbMgr& aCalDbMgr, + MESMRMeetingRequestEntry& aEntry, + CMRMailboxUtils& aMRMailboxUtils ) +: CESMRTaskBase( aCalDbMgr, aEntry, aMRMailboxUtils ) + { + FUNC_LOG; + //do nothing + } + +// --------------------------------------------------------------------------- +// CESMRForwardAsFSMailTask::~CESMRForwardAsFSMailTask +// --------------------------------------------------------------------------- +// +CESMRForwardAsFSMailTask::~CESMRForwardAsFSMailTask() + { + FUNC_LOG; + delete iEntryToSend; + delete iCaluserUtil; + delete iEmailMgr; + } + +// --------------------------------------------------------------------------- +// CESMRForwardAsFSMailTask::NewL +// --------------------------------------------------------------------------- +// +CESMRForwardAsFSMailTask* CESMRForwardAsFSMailTask::NewL( + MESMRCalDbMgr& aCalDbMgr, + MESMRMeetingRequestEntry& aEntry, + CMRMailboxUtils& aMRMailboxUtils ) + { + FUNC_LOG; + CESMRForwardAsFSMailTask* self = + new (ELeave) CESMRForwardAsFSMailTask( + aCalDbMgr, + aEntry, + aMRMailboxUtils ); + + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// CESMRForwardAsFSMailTask::ConstructL +// --------------------------------------------------------------------------- +// +void CESMRForwardAsFSMailTask::ConstructL() + { + FUNC_LOG; + BaseConstructL(); + iEmailMgr = CESMRFSEMailManager::NewL( MailboxUtils() ); + } + +// --------------------------------------------------------------------------- +// CESMRForwardAsFSMailTask::ExecuteTaskL +// --------------------------------------------------------------------------- +// +void CESMRForwardAsFSMailTask::ExecuteTaskL() + { + FUNC_LOG; + iEntryToSend = ESMREntry().ValidateEntryL(); + iCaluserUtil = CESMRCalUserUtil::NewL( *iEntryToSend ); + + TESMRInputParams startupparams; + TBool isEmail = ESMREntry().StartupParameters(startupparams); + + // This command cannot be triggered from email + __ASSERT_DEBUG( !isEmail, Panic(EESMRForwardCannotBeTriggeredFromMail) ); + + if(isEmail) + { + // This command cannot be triggered from email + User::Leave( KErrNotSupported ); + } + + // Create mail message: + ConstructMailL(); + + // Save the message to drafts folder: + iEmailMgr->StoreMessageToDraftsFolderL(); + + // Launch FS EMail Editor: + LaunchFSEmailEditorL(); + } + +// --------------------------------------------------------------------------- +// CESMRSendMRFSMailTask::ConstructMailL +// --------------------------------------------------------------------------- +// +void CESMRForwardAsFSMailTask::ConstructMailL() + { + FUNC_LOG; + // create text formatter: + CESMRMailPlainTextFormatter* textFormatter = + CESMRMailPlainTextFormatter::NewLC(MailboxUtils()); + + // Prepare email manager for sending + CCalUser *mailboxUser = iEntryToSend->PhoneOwnerL(); + iEmailMgr->PrepareForSendingL( + ESMRHelper::AddressWithoutMailtoPrefix(mailboxUser->Address() ) ); + + // set the email subject: + HBufC* subject = + textFormatter->Subject16LC( + *iEntryToSend, + ETrue, + EFalse ); + iEmailMgr->SetSubjectL(*subject); + CleanupStack::PopAndDestroy(subject); + subject = NULL; + + iEmailMgr->CreateTextPlainPartL( KNullDesC() ); + + CreateTemporaryMeetingFileL(); + iEmailMgr->StoreMessageToDraftsFolderL(); + + CleanupStack::PopAndDestroy( textFormatter ); + } + +// --------------------------------------------------------------------------- +// CESMRSendMRFSMailTask::CreateTemporaryMeetingFileL +// --------------------------------------------------------------------------- +// +void CESMRForwardAsFSMailTask::CreateTemporaryMeetingFileL() + { + FUNC_LOG; + CCoeEnv* coe = CCoeEnv::Static(); + + __ASSERT_DEBUG( coe, Panic(EESMRForwardAsFSMailCoeNull) ); + + if ( !coe ) + { + User::Leave( KErrNotSupported ); + } + + RFs& fs = coe->FsSession(); + + // Ensure that path exists + // hardcoded paths removal + /*TInt err = fs.MkDirAll( KTemporaryIcsPath ); + if ( KErrAlreadyExists != err ) + { + User::LeaveIfError( err ); + }*/ + // + + RFile calendarFile; + //hard coded paths removal + TFileName fileName(KTemporaryIcsName); + User::LeaveIfError(ESMRHelper::CreateAndAppendPrivateDirToFileName(fileName)); + TInt err = calendarFile.Replace( + fs, + fileName, + EFileWrite ); + // + if ( KErrNone != err ) + User::LeaveIfError( err ); + + CleanupClosePushL( calendarFile ); + + CESMRCalImportExporter* calExporter = CESMRCalImportExporter::NewLC(); + HBufC8* calendarText = calExporter->ExportToICal8LC( *iEntryToSend ); + + calendarFile.Write( *calendarText ); + calendarFile.Flush(); + + // calendarText, calExporter and calendarFile + CleanupStack::PopAndDestroy( 3, & calendarFile); + iEmailMgr->SetAttachmentL( fileName );// + } + +// --------------------------------------------------------------------------- +// CESMRSendMRFSMailTask::LaunchFSEmailEditorL +// --------------------------------------------------------------------------- +// +TInt CESMRForwardAsFSMailTask::LaunchFSEmailEditorL() + { + FUNC_LOG; + CCoeEnv* coe = CCoeEnv::Static(); + __ASSERT_DEBUG( coe, Panic(EESMRForwardAsFSMailCoeNull) ); + + CCoeAppUi* appui = coe->AppUi(); + __ASSERT_DEBUG( appui, Panic(EESMRForwardAsFSMailAppUiNull) ); + + // fill params + TEditorLaunchParams params; + params.iActivatedExternally = ETrue; + params.iMailboxId = iEmailMgr->MailboxId(); + params.iFolderId = iEmailMgr->MessageFolderId(); + params.iMsgId = iEmailMgr->MessageId(); + + TVwsViewId viewId( + KFSEmailUiUid, + MailEditorId ); + TUid editorCommand = TUid::Uid( KEditorCmdOpen ); + TPckgC buf( params ); + + appui->ActivateViewL( + viewId, + editorCommand, + buf ); + + return KErrNone; + } + +//EOF +