meetingrequest/mrtasks/mrtaskplugin/src/cesmrforwardasfsmailtask.cpp
branchRCL_3
changeset 12 4ce476e64c59
--- /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 <caluser.h>
+#include <calentry.h>
+#include <bautils.h>
+#include <coemain.h>
+#include <f32file.h>
+#include <coeaui.h>
+//<cmail>
+#include "FreestyleEmailUiConstants.h"
+//</cmail>
+#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 {
+
+//<cmail> remove hardcoded paths
+// Literal for temporary iCal meeting path
+//_LIT( KTemporaryIcsPath, "c:\\temp\\" ); //codescanner::driveletters
+//</cmail>
+
+// Literal for temporary iCal meeting file
+//<cmail> remove hardcoded paths
+//_LIT( KTemporaryIcsFullName, 
+//	  "c:\\temp\\meeting.ics" ); //codescanner::driveletters
+_LIT( KTemporaryIcsName, "temp\\meeting.ics" );
+//</cmail>
+
+#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
+    //<cmail> hardcoded paths removal
+    /*TInt err = fs.MkDirAll( KTemporaryIcsPath );
+    if ( KErrAlreadyExists != err )
+        {
+        User::LeaveIfError( err );
+        }*/
+    //</cmail>
+
+    RFile calendarFile;
+    //<cmail>hard coded paths removal
+    TFileName fileName(KTemporaryIcsName);
+    User::LeaveIfError(ESMRHelper::CreateAndAppendPrivateDirToFileName(fileName));
+    TInt err = calendarFile.Replace(
+                fs,
+                fileName,
+                EFileWrite );
+    //</cmail>
+    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 );//<cmail>
+    }
+
+// ---------------------------------------------------------------------------
+// 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<TEditorLaunchParams> buf( params );
+
+    appui->ActivateViewL(
+            viewId,
+            editorCommand,
+            buf );
+
+    return KErrNone;
+    }
+
+//EOF
+