--- a/creator/src/creator_message.cpp Thu Aug 19 09:55:38 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2225 +0,0 @@
-/*
-* Copyright (c) 2008 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 "creator_message.h"
-#include "creator_traces.h"
-#include "creator_contactsetcache.h"
-#include <apgcli.h>
-#include <MuiuMsvUiServiceUtilities.h>
-
-#if(!defined __SERIES60_30__ && !defined __SERIES60_31__)
-#include <MVPbkFieldType.h>
-#include <MVPbkContactOperationBase.h>
-#include <MVPbkStoreContactFieldCollection.h>
-#include <MVPbkContactFieldTextData.h>
-#include <CVPbkContactManager.h>
-#include <MVPbkStoreContact.h>
-
-#include <CVPbkContactStoreUriArray.h>
-#include <TVPbkContactStoreUriPtr.h>
-#include <VPbkContactStoreUris.h>
-#include <MVPbkContactStoreList.h>
-#include <MVPbkContactStore.h>
-#include <MVPbkContactStoreProperties.h>
-#include <VPbkEng.rsg>
-#include <cmsvrecipientlist.h>
-#endif
-#include <mmf/common/mmfcontrollerpluginresolver.h> // for CleanupResetAndDestroyPushL
-
-
-//static const TInt KMessagesFieldLength = 1024;
-
-//_LIT(KCreatorMessagesPrefixName, "CR_");
-//_LIT(KCreatorMessagesPrefixFolderName, "CR_FLDR_");
-
-
-const TUid KUidBIOBusinessCardMsg = {0x10005531};
-_LIT(KEmpty, "");
-
-//----------------------------------------------------------------------------
-
-CMessagesParameters::CMessagesParameters()
- {
- LOGSTRING("Creator: CMessagesParameters::CMessagesParameters");
-
- iSenderAddress = HBufC::New(128);
- iRecipientAddress = HBufC::New(128);
- iMessageSubject = HBufC::New(128);
- iMessageBodyText = HBufC::New(10240);
- TRAP_IGNORE(iAttachments = new(ELeave) CArrayFixFlat<TInt>(64));
- iCreateAsUnread = ETrue;
- }
-
-CMessagesParameters::~CMessagesParameters()
- {
- LOGSTRING("Creator: CMessagesParameters::~CMessagesParameters");
-
-
- delete iMessageBodyText;
- delete iMessageSubject;
- delete iRecipientAddress;
- delete iSenderAddress;
- delete iAttachments;
- iAttachmentPaths.ResetAndDestroy();
- iAttachmentPaths.Close();
- iRecipientAddressArray.ResetAndDestroy();
- iRecipientAddressArray.Close();
- iRecipientLinkIds.Close();
- iSenderLinkIds.Close();
- }
-
-//----------------------------------------------------------------------------
-
-CCreatorMessages* CCreatorMessages::NewL(CCreatorEngine* aEngine)
- {
- CCreatorMessages* self = CCreatorMessages::NewLC(aEngine);
- CleanupStack::Pop(self);
- return self;
- }
-
-CCreatorMessages* CCreatorMessages::NewLC(CCreatorEngine* aEngine)
- {
- CCreatorMessages* self = new (ELeave) CCreatorMessages;
- CleanupStack::PushL(self);
- self->ConstructL(aEngine);
- return self;
- }
-
-CCreatorMessages::CCreatorMessages()
-:
-iSession(0)
- {
- }
-
-void CCreatorMessages::ConstructL(CCreatorEngine* aEngine)
- {
- LOGSTRING("Creator: CCreatorMessages::ConstructL");
- iEngine = aEngine;
-
- TRAP_IGNORE(iAttachments = new(ELeave) CArrayFixFlat<TInt>(64));
- iWaiter = CAsyncWaiter::NewL();
- }
-
-CCreatorMessages::~CCreatorMessages()
- {
- LOGSTRING("Creator: CCreatorMessages::~CCreatorMessages");
-
- if ( iEngine && iEntryIds.Count() )
- {
- TRAP_IGNORE( iEngine->WriteEntryIdsToStoreL( iEntryIds, KUidDictionaryUidMessages ) );
- }
- iEntryIds.Reset();
- iEntryIds.Close();
-
- delete iParameters;
- delete iWaiter;
- delete iTmpPhoneNumber;
- delete iTmpEmail;
- delete iAttachments;
-#if(!defined __SERIES60_30__ && !defined __SERIES60_31__)
- delete iExistingContacts;
- if( iContactManager )
- iContactManager->ContactStoresL().CloseAll(*this);
- delete iContactManager;
- delete iTempContact;
-#endif
- iRecipientArray.ResetAndDestroy();
- iRecipientArray.Close();
- iSenderArray.ResetAndDestroy();
- iSenderArray.Close();
- delete iSession;
- }
-
-//----------------------------------------------------------------------------
-
-TBool CCreatorMessages::AskDataFromUserL(TInt aCommand, TInt& aNumberOfEntries)
- {
- LOGSTRING("Creator: CCreatorMessages::AskDataFromUserL");
-
- if ( aCommand == ECmdDeleteMessages )
- {
- return iEngine->YesNoQueryDialogL( _L("Delete all messages?") );
- }
- else if ( aCommand == ECmdDeleteCreatorMessages )
- {
- return iEngine->YesNoQueryDialogL( _L("Delete all messages created with Creator?") );
- }
-
- if (iEngine->EntriesQueryDialogL(aNumberOfEntries, _L("How many entries to create?")))
- {
-
- // message type query
- CAknListQueryDialog* dlg1 = new(ELeave) CAknListQueryDialog( (TInt*) &iMessageType );
- if (dlg1->ExecuteLD(R_MESSAGE_TYPE_QUERY))
- {
- TInt folderTypeQueryResource(R_FOLDER_TYPE_QUERY);
-
- /*
- if (iMessageType == EEmail)
- folderTypeQueryResource = R_FOLDER_TYPE_WITH_MAILBOX_QUERY;
- */
-
- // folder query
- CAknListQueryDialog* dlg2 = new(ELeave) CAknListQueryDialog( (TInt*) &iFolderType );
- if (dlg2->ExecuteLD(folderTypeQueryResource))
- {
- /*
- if (iFolderType == EMailbox)
- {
- // array to hold mailbox names
- CDesCArray* names = new (ELeave) CDesCArrayFlat(16);
- CleanupStack::PushL(names);
-
- CMsvSession* session = CMsvSession::OpenSyncL(*this);
- CleanupStack::PushL(session);
-
- // generate list of mailboxes
- CMsvEntrySelection* entrySelection = MsvUiServiceUtilities::GetListOfAccountsWithMTML(*session, KUidMsgTypeSMTP, ETrue);
- CleanupStack::PushL(entrySelection);
-
- TBool doReturn(EFalse);
-
- if (entrySelection->Count() == 0)
- {
- CAknInformationNote* note = new(ELeave) CAknInformationNote;
- note->ExecuteLD(_L("No mailboxes found"));
-
- doReturn = ETrue;
- }
- else
- {
- // get mailbox names
- for (TInt i=0; i<entrySelection->Count(); i++)
- {
- CMsvEntry* centry = session->GetEntryL(entrySelection->At(i));
- CleanupStack::PushL(centry);
-
- TMsvEntry tentry = centry->Entry();
- names->AppendL(tentry.iDetails);
- CleanupStack::PopAndDestroy(); //centry
- }
-
- // show query
- TInt index(0);
- CAknListQueryDialog* dlg = new(ELeave) CAknListQueryDialog(&index);
- dlg->PrepareLC(R_MAILBOX_SELECTION_QUERY);
- dlg->SetItemTextArray(names);
- dlg->SetOwnershipType(ELbmDoesNotOwnItemArray);
-
- if(dlg->RunLD())
- {
- iUserSelectedMailbox = entrySelection->At(index);
-
- doReturn = EFalse;
- }
- else
- {
- doReturn = ETrue;
- }
-
- }
-
- CleanupStack::PopAndDestroy(3); // names, session, entrySelection
-
- if (doReturn)
- return EFalse;
- }
- */
-
- // query create as unread
- CAknListQueryDialog* dlg3 = new(ELeave) CAknListQueryDialog( (TInt*) &iCreateAsUnread );
- if (dlg3->ExecuteLD(R_UNREAD_QUERY))
- {
-
- // query number of characters in msg body
- switch (iMessageType)
- {
- case ESMS:
- case EMMS:
- case EEmail:
- {
- iDefinedMessageLength = 100;
- if (iEngine->EntriesQueryDialogL(iDefinedMessageLength, _L("Amount of characters in message body?"), ETrue))
- {
- ;
- }
- else
- return EFalse;
-
- break;
- }
- case EAMS:
- {
- iDefinedMessageLength = 0;
- break;
- }
- default: break;
- }
-
- // query attachments
- iAttachments->Reset();
-
- switch (iMessageType)
- {
- case EMMS:
- case EEmail:
- {
- CAknListQueryDialog* dlg4 = new(ELeave) CAknListQueryDialog( iAttachments );
- if (dlg4->ExecuteLD(R_ATTACHMENT_MULTI_SELECTION_QUERY))
- {
- // "none" is selected
- if (iAttachments->At(0) == 0)
- iAttachments->Reset();
- else // otherwise fix indexes
- {
- for (TInt i=0; i<iAttachments->Count(); i++)
- iAttachments->At(i)--; // decrease value by one
-
- }
- }
- else
- return EFalse;
-
- break;
- }
- case EAMS:
- {
- iAttachments->AppendL( TInt(0) );
-
- CAknListQueryDialog* dlg5 = new(ELeave) CAknListQueryDialog( &iAttachments->At(0) );
- if (dlg5->ExecuteLD(R_AMS_ATTACHMENT_SINGLE_SELECTION_QUERY))
- {
- ;
- }
- else
- return EFalse;
-
- break;
- }
-
- case EIrMessage:
- case EBTMessage:
- {
- iAttachments->AppendL( TInt(0) );
-
- CAknListQueryDialog* dlg5 = new(ELeave) CAknListQueryDialog( &iAttachments->At(0) );
- if (dlg5->ExecuteLD(R_ATTACHMENT_SINGLE_SELECTION_QUERY))
- {
- ;
- }
- else
- return EFalse;
-
- break;
- }
- default: break;
- }
-
- return ETrue; // all queries accepted
-
- }
- else
- return EFalse;
- }
- else
- return EFalse;
- }
- else
- return EFalse;
- }
- else
- return EFalse;
- }
-
-//----------------------------------------------------------------------------
-
-TInt CCreatorMessages::CreateRandomMessageEntryL(TInt aCommand)
- {
- LOGSTRING2("Creator: CCreatorMessages::CreateRandomMessageEntryL - Command: %d", aCommand);
-
- TInt err = KErrNone;
-
- iDefinedMessageLength = iEngine->RandomNumber(100, 300);
-
-
- switch (aCommand)
- {
- case ECmdCreateRandomEntrySMSInbox: { iMessageType=ESMS; iFolderType=EInbox; err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntrySMSDrafts: { iMessageType=ESMS; iFolderType=EDrafts; err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntrySMSOutbox: { iMessageType=ESMS; iFolderType=EOutbox; err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntrySMSSent: { iMessageType=ESMS; iFolderType=ESent; err=CreateMessageEntryL(NULL); break;}
-
- case ECmdCreateRandomEntryMMSInbox: { iMessageType=EMMS; iFolderType=EInbox; err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryMMSDrafts: { iMessageType=EMMS; iFolderType=EDrafts; err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryMMSOutbox: { iMessageType=EMMS; iFolderType=EOutbox; err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryMMSSent: { iMessageType=EMMS; iFolderType=ESent; err=CreateMessageEntryL(NULL); break;}
-
- case ECmdCreateRandomEntryEmailInbox: { iMessageType=EEmail; iFolderType=EInbox; err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryEmailDrafts: { iMessageType=EEmail; iFolderType=EDrafts; err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryEmailOutbox: { iMessageType=EEmail; iFolderType=EOutbox; err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryEmailSent: { iMessageType=EEmail; iFolderType=ESent; err=CreateMessageEntryL(NULL); break;}
-
- case ECmdCreateRandomEntryBIOInbox: { iMessageType=ESmartMessage; iFolderType=EInbox; err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryBIODrafts: { iMessageType=ESmartMessage; iFolderType=EDrafts; err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryBIOOutbox: { iMessageType=ESmartMessage; iFolderType=EOutbox; err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryBIOSent: { iMessageType=ESmartMessage; iFolderType=ESent; err=CreateMessageEntryL(NULL); break;}
-
- case ECmdCreateRandomEntryIRInbox: { iMessageType=EIrMessage; iFolderType=EInbox; iAttachments->Reset(); iAttachments->AppendL( iEngine->RandomNumber(CCreatorEngine::EJPEG_25kB, CCreatorEngine::LAST_FILE_ID-1) ); err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryIRDrafts: { iMessageType=EIrMessage; iFolderType=EDrafts; iAttachments->Reset(); iAttachments->AppendL( iEngine->RandomNumber(CCreatorEngine::EJPEG_25kB, CCreatorEngine::LAST_FILE_ID-1) ); err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryIROutbox: { iMessageType=EIrMessage; iFolderType=EOutbox; iAttachments->Reset(); iAttachments->AppendL( iEngine->RandomNumber(CCreatorEngine::EJPEG_25kB, CCreatorEngine::LAST_FILE_ID-1) ); err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryIRSent: { iMessageType=EIrMessage; iFolderType=ESent; iAttachments->Reset(); iAttachments->AppendL( iEngine->RandomNumber(CCreatorEngine::EJPEG_25kB, CCreatorEngine::LAST_FILE_ID-1) ); err=CreateMessageEntryL(NULL); break;}
-
- case ECmdCreateRandomEntryBTInbox: { iMessageType=EBTMessage; iFolderType=EInbox; iAttachments->Reset(); iAttachments->AppendL( iEngine->RandomNumber(CCreatorEngine::EJPEG_25kB, CCreatorEngine::LAST_FILE_ID-1) ); err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryBTDrafts: { iMessageType=EBTMessage; iFolderType=EDrafts; iAttachments->Reset(); iAttachments->AppendL( iEngine->RandomNumber(CCreatorEngine::EJPEG_25kB, CCreatorEngine::LAST_FILE_ID-1) ); err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryBTOutbox: { iMessageType=EBTMessage; iFolderType=EOutbox; iAttachments->Reset(); iAttachments->AppendL( iEngine->RandomNumber(CCreatorEngine::EJPEG_25kB, CCreatorEngine::LAST_FILE_ID-1) ); err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryBTSent: { iMessageType=EBTMessage; iFolderType=ESent; iAttachments->Reset(); iAttachments->AppendL( iEngine->RandomNumber(CCreatorEngine::EJPEG_25kB, CCreatorEngine::LAST_FILE_ID-1) ); err=CreateMessageEntryL(NULL); break;}
-
- case ECmdCreateRandomEntryAMSInbox: { iMessageType=EAMS; iFolderType=EInbox; iAttachments->Reset(); iAttachments->AppendL( CCreatorEngine::EMP3_250kB); err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryAMSDrafts: { iMessageType=EAMS; iFolderType=EDrafts; iAttachments->Reset(); iAttachments->AppendL( CCreatorEngine::EMP3_250kB); err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryAMSOutbox: { iMessageType=EAMS; iFolderType=EOutbox; iAttachments->Reset(); iAttachments->AppendL( CCreatorEngine::EMP3_250kB); err=CreateMessageEntryL(NULL); break;}
- case ECmdCreateRandomEntryAMSSent: { iMessageType=EAMS; iFolderType=ESent; iAttachments->Reset(); iAttachments->AppendL( CCreatorEngine::EMP3_250kB); err=CreateMessageEntryL(NULL); break;}
-
- default: { User::Panic(_L("MessageCommand"), 901); break;}
- }
-
- return err;
- }
-
-//----------------------------------------------------------------------------
-
-TInt CCreatorMessages::CreateMessageEntryL(CMessagesParameters *aParameters, TBool /*aTakeUserGivenParameters*/)
- {
- LOGSTRING("Creator: CCreatorMessages::CreateMessageEntryL");
-
- delete iParameters;
- iParameters = 0;
-
- CMessagesParameters* parameters = aParameters;
-
- // random data needed if no predefined data available
- if (!parameters)
- {
- iParameters = new(ELeave) CMessagesParameters;
- parameters = iParameters;
- // check if values from ui needed
- //if (aTakeUserGivenParameters)
- // {
- parameters->iMessageType = iMessageType;
- parameters->iFolderType = iFolderType;
- parameters->iDefinedMessageLength = iDefinedMessageLength;
- parameters->iCreateAsUnread = iCreateAsUnread;
-
- for (TInt i=0; i<iAttachments->Count(); i++)
- parameters->iAttachments->AppendL(iAttachments->At(i));
- // }
- //else
- // {
- // message length
- // parameters->iDefinedMessageLength = iEngine->RandomNumber(100, 300);
- // }
-
- if (parameters->iMessageType == EEmail)
- {
- parameters->iSenderAddress->Des().Copy( iEngine->RandomString(CCreatorEngine::EFirstName) );
- parameters->iSenderAddress->Des().Append( _L("@") );
- parameters->iSenderAddress->Des().Append( iEngine->RandomString(CCreatorEngine::ECompany) );
- parameters->iSenderAddress->Des().Append( _L(".com") );
-
- parameters->iRecipientAddress->Des().Copy( iEngine->RandomString(CCreatorEngine::EFirstName) );
- parameters->iRecipientAddress->Des().Append( _L("@") );
- parameters->iRecipientAddress->Des().Append( iEngine->RandomString(CCreatorEngine::ECompany) );
- parameters->iRecipientAddress->Des().Append( _L(".net") );
- }
- else if (parameters->iMessageType == EIrMessage || parameters->iMessageType == EBTMessage)
- {
- parameters->iSenderAddress->Des().Copy( iEngine->RandomString(CCreatorEngine::EFirstName) );
- parameters->iRecipientAddress->Des().Copy( iEngine->RandomString(CCreatorEngine::EFirstName) );
- }
- else
- {
- parameters->iSenderAddress->Des().Copy( iEngine->RandomString(CCreatorEngine::EPhoneNumber) );
- parameters->iRecipientAddress->Des().Copy( iEngine->RandomString(CCreatorEngine::EPhoneNumber) );
- }
-
- // subject
- parameters->iMessageSubject->Des() = iEngine->RandomString(CCreatorEngine::EMessageSubject);
-
- // message body
- parameters->iMessageBodyText->Des().Copy(_L(""));
- TPtrC randText = iEngine->RandomString(CCreatorEngine::EMessageText);
- for (TInt i=0; i<parameters->iDefinedMessageLength / randText.Length() +1; i++)
- {
- parameters->iMessageBodyText->Des().Append( randText );
- parameters->iMessageBodyText->Des().Append( _L(" ") );
- }
- parameters->iMessageBodyText->Des() = parameters->iMessageBodyText->Des().Left(parameters->iDefinedMessageLength);
-
- // BIO message type (from bitsids.h) // TO-DO: add support for all BIO message types...
- parameters->iBIOMessageType = KUidBIOBusinessCardMsg;
- }
-
-
-#if(!defined __SERIES60_30__ && !defined __SERIES60_31__)
-
- // Get number of existing senders and recipients:
- for( TInt i = 0; i < parameters->iRecipientLinkIds.Count(); ++i )
- {
-
- TLinkIdParam recipientId = parameters->iRecipientLinkIds[i];
- // Is maximum number limited:
- if(recipientId.iLinkAmount == KUndef ||
- recipientId.iLinkAmount >= ContactLinkCache::Instance()->ContactSet(recipientId.iLinkId).NumberOfExistingContacts() )
- {
- parameters->iNumberOfExistingRecipients += ContactLinkCache::Instance()->ContactSet(recipientId.iLinkId).NumberOfExistingContacts();
- }
- else
- {
- parameters->iNumberOfExistingRecipients += recipientId.iLinkAmount;
- }
- }
- for( TInt i = 0; i < parameters->iSenderLinkIds.Count(); ++i )
- {
- TLinkIdParam senderId = parameters->iSenderLinkIds[i];
- // Is maximum number limited:
- if( senderId.iLinkAmount == KUndef ||
- senderId.iLinkAmount >= ContactLinkCache::Instance()->ContactSet(senderId.iLinkId).NumberOfExistingContacts())
- {
- parameters->iNumberOfExistingSenders += ContactLinkCache::Instance()->ContactSet(senderId.iLinkId).NumberOfExistingContacts();
- }
- else
- {
- parameters->iNumberOfExistingSenders += senderId.iLinkAmount;
- }
- }
-
-#endif
-
- TInt err = KErrNone;
-
- switch (parameters->iMessageType)
- {
- case ESMS: { err = CreateSMSEntryL(*parameters); break; }
- case EMMS: { err = CreateMMSEntryL(*parameters); break; }
- case EAMS: { err = CreateAMSEntryL(*parameters); break; }
- case EEmail: { err = CreateEmailEntryL(*parameters); break; }
- case ESmartMessage: { err = CreateSmartMessageEntryL(*parameters); break; }
- case EIrMessage: { err = CreateObexEntryL( TUid::Uid(KUidMsgTypeIrTInt32), *parameters ); break; }
- case EBTMessage: { err = CreateObexEntryL( TUid::Uid(KUidMsgTypeBtTInt32), *parameters ); break; }
- default: { User::Panic(_L("MsgType"), 851); break;}
-
- }
-
- iSenderArray.ResetAndDestroy();
- iRecipientArray.ResetAndDestroy();
- return err;
- }
-
-//----------------------------------------------------------------------------
-
-TInt CCreatorMessages::CreateSMSEntryL(const CMessagesParameters& parameters)
- {
- LOGSTRING("Creator: CCreatorMessages::CreateSMSEntryL");
-
- TInt err = KErrNone;
-
- // init
- if( iSession == 0 )
- {
- iSession = CMsvSession::OpenSyncL(*this);
- }
-
- CClientMtmRegistry* registry = CClientMtmRegistry::NewL(*iSession);
- CleanupStack::PushL(registry);
-
- // get the client mtm and return if it isn't supported in the system
- CSmsClientMtm* clientMtm = NULL;
- TRAP(err, clientMtm = static_cast<CSmsClientMtm*>(registry->NewMtmL(KUidMsgTypeSMS)));
- if (err || !clientMtm)
- {
- CAknErrorNote* note = new(ELeave) CAknErrorNote;
- note->ExecuteLD(_L("SMS: Message type module not found"));
- CleanupStack::PopAndDestroy(2);
- User::Leave(KErrNotFound);
- }
- CleanupStack::PushL(clientMtm);
-
- // create a new object to access an existing entry
- CMsvEntry* msvEntry = CMsvEntry::NewL(*iSession, KMsvGlobalInBoxIndexEntryId, TMsvSelectionOrdering());
- CleanupStack::PushL(msvEntry);
-
- // get default service
- TMsvId defaultServiceId = 0;
- TRAP(err, defaultServiceId = clientMtm->DefaultServiceL());
- if (err)
- {
- CAknErrorNote* note = new(ELeave) CAknErrorNote;
- note->ExecuteLD(_L("SMS: Define a SMS centre first"));
- CleanupStack::PopAndDestroy(2);
- User::Leave(KErrNotFound);
- }
-
- // set folder type
- switch (parameters.iFolderType)
- {
- case EInbox: { msvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId); break; }
- case EDrafts: { msvEntry->SetEntryL(KMsvDraftEntryId); break; }
- case EOutbox: { msvEntry->SetEntryL(KMsvGlobalOutBoxIndexEntryId); break; }
- case ESent: { msvEntry->SetEntryL(KMsvSentEntryId); break; }
- default: { User::Panic(_L("Folder Type"), 871); break; }
- }
-
- // mtm takes ownership of entry context
- CleanupStack::Pop(msvEntry);
- clientMtm->SetCurrentEntryL(msvEntry);
-
- // create a new message
- clientMtm->CreateMessageL(defaultServiceId);
-
- // set the from field to sms header
- if (parameters.iFolderType == EInbox)
- {
- CSmsHeader& smsHeader = clientMtm->SmsHeader();
-
- if( parameters.iSenderAddress )
- {
- smsHeader.SetFromAddressL( parameters.iSenderAddress->Des() );
- }
- else
- {
- smsHeader.SetFromAddressL(KEmpty);
- }
- }
-
- // set body
- clientMtm->Body().Reset();
- clientMtm->Body().InsertL(0, parameters.iMessageBodyText->Des());
-
- // get the entry of the message
- TMsvEntry messageEntry = clientMtm->Entry().Entry();
-
- // set the details field
- if (parameters.iFolderType == EInbox)
- {
- SetSenderToEntryDetails(messageEntry, parameters, EFalse);
- }
- else
- {
- SetRecipientToEntryDetails(messageEntry, parameters, EFalse);
- // Add all recipients to clientMtm
- // iRecipientArray is up-to-date so don't call AddRecipientsL here
- for( TInt i = 0; i < iRecipientArray.Count(); i++ )
- {
- clientMtm->AddAddresseeL( iRecipientArray[i]->Des() );
- }
- }
-
- // set the sending state for outbox message
- // to avoid SMSMtmUI:15 panic in messages application
- if (parameters.iFolderType == EOutbox )
- {
- messageEntry.SetSendingState( KMsvSendStateWaiting );
- }
-
- // set the description field same as the first part of the message body
- messageEntry.iDescription.Set( parameters.iMessageBodyText->Des().Left(KSmsDescriptionLength) );
-
- // save the changes done above
- clientMtm->Entry().ChangeL(messageEntry);
-
- // save the message
- clientMtm->SaveMessageL();
-
- // final fine tuning
- messageEntry.SetAttachment(EFalse);
- messageEntry.iDate.HomeTime();
- messageEntry.SetVisible(ETrue);
- messageEntry.SetInPreparation(EFalse);
-
- if (parameters.iCreateAsUnread)
- {
- messageEntry.SetUnread(ETrue);
- messageEntry.SetNew(ETrue);
- }
- else
- {
- messageEntry.SetUnread(EFalse);
- messageEntry.SetNew(EFalse);
- }
-
- messageEntry.SetComplete(ETrue);
- messageEntry.iServiceId = defaultServiceId;
- messageEntry.iRelatedId = 0;
- clientMtm->Entry().ChangeL(messageEntry);
-
- // id has been generated, store it for being able to delete
- // only entries created with Creator
- iEntryIds.Append( messageEntry.Id() );
-
- CleanupStack::PopAndDestroy(2); //registry, clientMtm
-
- return err;
-
- }
-
-//----------------------------------------------------------------------------
-
-TInt CCreatorMessages::CreateMMSEntryL(const CMessagesParameters& parameters)
- {
- LOGSTRING("Creator: CCreatorMessages::CreateMMSEntryL");
-
- TInt err = KErrNone;
-
-
- // init
- if( iSession == 0 )
- {
- iSession = CMsvSession::OpenSyncL(*this);
- }
-
- CClientMtmRegistry* registry = CClientMtmRegistry::NewL(*iSession);
- CleanupStack::PushL(registry);
-
- // get the client mtm and return if it isn't supported in the system
- CMmsClientMtm* clientMtm = NULL;
- TRAP(err, clientMtm = static_cast<CMmsClientMtm*>(registry->NewMtmL(KUidMsgTypeMultimedia)));
- if (err || !clientMtm)
- {
- CAknErrorNote* note = new(ELeave) CAknErrorNote;
- note->ExecuteLD(_L("MMS: Message type module not found"));
- CleanupStack::PopAndDestroy(2);
- User::Leave(KErrNotFound);
- }
- CleanupStack::PushL(clientMtm);
-
- // create a new object to access an existing entry
- CMsvEntry* msvEntry = CMsvEntry::NewL(*iSession, KMsvGlobalInBoxIndexEntryId, TMsvSelectionOrdering());
- CleanupStack::PushL(msvEntry);
-
- // get default service
- TMsvId defaultServiceId = 0;
- TRAP(err, defaultServiceId = clientMtm->DefaultServiceL());
- if (err)
- {
- CAknErrorNote* note = new(ELeave) CAknErrorNote;
- note->ExecuteLD(_L("MMS: Define MMS settings first"));
- CleanupStack::PopAndDestroy(4);
- User::Leave(KErrNotFound);
- }
-
- // set folder type
- switch (parameters.iFolderType)
- {
- case EInbox: { msvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId); break; }
- case EDrafts: { msvEntry->SetEntryL(KMsvDraftEntryId); break; }
- case EOutbox: { msvEntry->SetEntryL(KMsvGlobalOutBoxIndexEntryId); break; }
- case ESent: { msvEntry->SetEntryL(KMsvSentEntryId); break; }
- default: { User::Panic(_L("Folder Type"), 871); break; }
- }
-
- // mtm takes ownership of entry context
- CleanupStack::Pop(msvEntry);
- clientMtm->SetCurrentEntryL(msvEntry);
-
- // create a new message
- clientMtm->CreateMessageL(defaultServiceId);
-
- // set subject
- clientMtm->SetSubjectL( parameters.iMessageSubject->Des() );
-
- // set some mms defaults
- clientMtm->SetMessageClass(EMmsClassPersonal);
- clientMtm->SetExpiryInterval(86400);
- clientMtm->SetDeliveryTimeInterval(3600);
- clientMtm->SetMessagePriority(EMmsPriorityLow);
- clientMtm->SetSenderVisibility(EMmsMaximumSenderVisibility);
- clientMtm->SetDeliveryReport(EMmsDeliveryReportYes);
- clientMtm->SetReadReply(EMmsReadReplyYes);
-
- // set the sender / addressee field
- if (parameters.iFolderType == EInbox)
- {
- AddMtmSenderL(*clientMtm, parameters, EFalse);
- }
-
- // Add all recipients to clientMtm
- AddRecipientsL( *clientMtm, parameters, EFalse );
-
- // get an access to the message store
- CMsvStore* store = msvEntry->EditStoreL();
- CleanupStack::PushL(store);
-
-
- // set body as an attachment
- CMsvMimeHeaders* mimeHeaders = CMsvMimeHeaders::NewL();
- CleanupStack::PushL(mimeHeaders);
- mimeHeaders->SetContentTypeL( _L8("text") );
- mimeHeaders->SetContentSubTypeL( _L8("plain") );
- mimeHeaders->SetMimeCharset( KMmsUtf8 );
- mimeHeaders->SetSuggestedFilenameL( _L("body.txt") );
-
- MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
- CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); // ownership of attachmentInfo will be transferred
- CleanupStack::PushL(attachmentInfo);
- attachmentInfo->SetAttachmentNameL( _L("body.txt") );
- attachmentInfo->SetMimeTypeL( _L8("text/plain") );
- mimeHeaders->StoreL( *attachmentInfo );
-
- RFile textFile;
-
- CAsyncWaiter* waiter = CAsyncWaiter::NewLC();
- attachMan.CreateAttachmentL(_L("body.txt"), textFile, attachmentInfo, waiter->iStatus );
- CleanupStack::Pop(); // waiter
- CleanupStack::Pop(); // attachmentInfo
- CleanupStack::PushL(waiter);
- waiter->StartAndWait();
- CleanupStack::PopAndDestroy(waiter);
-
- HBufC8* tempBuf = HBufC8::NewLC( parameters.iMessageBodyText->Des().Length() );
- tempBuf->Des().Copy( parameters.iMessageBodyText->Des() );
- textFile.Write( tempBuf->Des() );
- textFile.Close();
- CleanupStack::PopAndDestroy(); //tempBuf
-
- CleanupStack::PopAndDestroy(); //mimeHeaders
-
-
- // get the entry of the message
- TMsvEntry messageEntry = clientMtm->Entry().Entry();
-
- // set the details field
- if (parameters.iFolderType == EInbox)
- {
- SetSenderToEntryDetails(messageEntry, parameters, EFalse);
- }
- else
- {
- SetRecipientToEntryDetails(messageEntry, parameters, EFalse);
- }
-
- // set the description field same as the message subject
- messageEntry.iDescription.Set( parameters.iMessageSubject->Des().Left(KSmsDescriptionLength) );
-
- // save the changes done above
- clientMtm->Entry().ChangeL(messageEntry);
-
-
- // save the attachments
- HandleAttachementsL(parameters, store, err );
-// for (TInt i=0; i<parameters.iAttachments->Count(); i++)
-// {
-// TFileName sourceFileName = iEngine->TestDataPathL( (CCreatorEngine::TTestDataPath) parameters.iAttachments->At(i) );
-//
-// TParse parser;
-// parser.Set(sourceFileName, NULL, NULL);
-// TFileName shortFileName = parser.NameAndExt();
-//
-// // get the mime type
-// RApaLsSession ls;
-// User::LeaveIfError(ls.Connect());
-// CleanupClosePushL<RApaLsSession>(ls);
-// TUid appUid;
-// TDataType dataType;
-// ls.AppForDocument(sourceFileName, appUid, dataType);
-// CleanupStack::PopAndDestroy(); //ls
-// TPtrC8 mimeType = dataType.Des8();
-//
-// // attachment settings
-// MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
-// CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); // ownership of attachmentInfo will be transferred
-// attachmentInfo->SetAttachmentNameL( shortFileName );
-// attachmentInfo->SetMimeTypeL( mimeType );
-//
-// // save
-// CAsyncWaiter* waiter = CAsyncWaiter::NewLC();
-//
-// TRAP(err, attachMan.AddAttachmentL(sourceFileName, attachmentInfo, waiter->iStatus ));
-// if (err == KErrNone)
-// waiter->StartAndWait();
-// else
-// LOGSTRING2("Creator: CCreatorMessages::CreateMMSEntryL failed to attach %S", &sourceFileName);
-//
-// CleanupStack::PopAndDestroy(waiter);
-// }
-
- // save the changes made to the message store
- store->CommitL();
- CleanupStack::PopAndDestroy(store);
-
-
- // save the message
- clientMtm->SaveMessageL();
-
- // final fine tuning
- messageEntry.SetAttachment(ETrue);
- messageEntry.iDate.HomeTime();
- messageEntry.SetVisible(ETrue);
- messageEntry.SetInPreparation(EFalse);
- if (parameters.iCreateAsUnread)
- {
- messageEntry.SetUnread(ETrue);
- messageEntry.SetNew(ETrue);
- }
- else
- {
- messageEntry.SetUnread(EFalse);
- messageEntry.SetNew(EFalse);
- }
- messageEntry.SetComplete(ETrue);
- messageEntry.iServiceId = defaultServiceId;
- messageEntry.iRelatedId = 0;
-
- if (parameters.iFolderType == EDrafts)
- messageEntry.SetReadOnly(EFalse);
- else
- messageEntry.SetReadOnly(ETrue);
-
- messageEntry.iMtmData1 = KMmsMessageMRetrieveConf | KMmsMessageMobileTerminated;
-
- clientMtm->Entry().ChangeL(messageEntry);
-
- // id has been generated, store it for being able to delete
- // only entries created with Creator
- iEntryIds.Append( messageEntry.Id() );
-
- CleanupStack::PopAndDestroy(2); // registry, clientMtm
-
-
- return err;
- }
-
-//----------------------------------------------------------------------------
-void CCreatorMessages::HandleAttachementsL(const CMessagesParameters& parameters, CMsvStore* store, TInt err )
- {
- // save the attachments (added with id's)
- for (TInt i=0; i<parameters.iAttachments->Count(); i++)
- {
- TFileName sourceFileName = iEngine->TestDataPathL( (CCreatorEngine::TTestDataPath) parameters.iAttachments->At(i) );
- HandleAttachementL(store, err, sourceFileName );
-
- }
- //Adding attachmentpaths
- for (TInt i=0; i<parameters.iAttachmentPaths.Count(); i++)
- {
- HBufC* point = parameters.iAttachmentPaths[i];
- TFileName sourceFileName(point->Des());
- HandleAttachementL(store, err, sourceFileName );
- }
- }
-//----------------------------------------------------------------------------
-
-void CCreatorMessages::HandleAttachementL(CMsvStore* store, TInt err, TFileName& sourceFileName )
- {
- TParse parser;
- parser.Set(sourceFileName, NULL, NULL);
- TFileName shortFileName = parser.NameAndExt();
-
- // get the mime type
- RApaLsSession ls;
- User::LeaveIfError(ls.Connect());
- CleanupClosePushL<RApaLsSession>(ls);
- TUid appUid;
- TDataType dataType;
- ls.AppForDocument(sourceFileName, appUid, dataType);
- CleanupStack::PopAndDestroy(); //ls
- TPtrC8 mimeType = dataType.Des8();
-
- // attachment settings
- MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
- CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); // ownership of attachmentInfo will be transferred
- CleanupStack::PushL(attachmentInfo);
- attachmentInfo->SetAttachmentNameL( shortFileName );
- attachmentInfo->SetMimeTypeL( mimeType );
-
- if ( mimeType == _L8("text/plain") )
- {
- // CMsvMimeHeaders needs to be stored in case of text file
- CMsvMimeHeaders* mimeHeaders = CMsvMimeHeaders::NewL();
- CleanupStack::PushL(mimeHeaders);
- mimeHeaders->SetContentTypeL( _L8("text") );
- mimeHeaders->SetContentSubTypeL( _L8("plain") );
- mimeHeaders->SetMimeCharset( KMmsUtf8 );
- mimeHeaders->StoreL( *attachmentInfo );
- CleanupStack::PopAndDestroy( mimeHeaders );
- }
-
- // save
-
- CAsyncWaiter* waiter = CAsyncWaiter::NewLC();
- TRAP(err, attachMan.AddAttachmentL(sourceFileName, attachmentInfo, waiter->iStatus ));
- if (err == KErrNone)
- {
- waiter->StartAndWait();
- CleanupStack::PopAndDestroy(waiter);
- CleanupStack::Pop(); // attachmentInfo, the ownership is transferred
- }
- else
- {
- CleanupStack::PopAndDestroy(waiter);
- CleanupStack::PopAndDestroy(); // attachmentInfo, ownership is not transferred (leave occurs)
- LOGSTRING2("Creator: CCreatorMessages::HandleAttachementsL failed to attach %S", &sourceFileName);
- }
- }
- //----------------------------------------------------------------------------
-
-TInt CCreatorMessages::CreateAMSEntryL(const CMessagesParameters& parameters)
- {
- LOGSTRING("Creator: CCreatorMessages::CreateAMSEntryL");
-
- TInt err = KErrNone;
-
-
- // init
- if( iSession == 0 )
- {
- iSession = CMsvSession::OpenSyncL(*this);
- }
-
- CClientMtmRegistry* registry = CClientMtmRegistry::NewL(*iSession);
- CleanupStack::PushL(registry);
-
- // get the client mtm and return if it isn't supported in the system
- CMmsClientMtm* clientMtm = NULL;
- TRAP(err, clientMtm = static_cast<CMmsClientMtm*>(registry->NewMtmL(KUidMsgTypeMultimedia)));
- if (err || !clientMtm)
- {
- CAknErrorNote* note = new(ELeave) CAknErrorNote;
- note->ExecuteLD(_L("MMS: Message type module not found"));
- CleanupStack::PopAndDestroy(2);
- User::Leave(KErrNotFound);
- }
- CleanupStack::PushL(clientMtm);
-
- // create a new object to access an existing entry
- CMsvEntry* msvEntry = CMsvEntry::NewL(*iSession, KMsvGlobalInBoxIndexEntryId, TMsvSelectionOrdering());
- CleanupStack::PushL(msvEntry);
-
- // get default service
- TMsvId defaultServiceId = 0;
- TRAP(err, defaultServiceId = clientMtm->DefaultServiceL());
- if (err)
- {
- CAknErrorNote* note = new(ELeave) CAknErrorNote;
- note->ExecuteLD(_L("MMS: Define MMS settings first"));
- CleanupStack::PopAndDestroy(2);
- User::Leave(KErrNotFound);
- }
-
- // set folder type
- switch (parameters.iFolderType)
- {
- case EInbox: { msvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId); break; }
- case EDrafts: { msvEntry->SetEntryL(KMsvDraftEntryId); break; }
- case EOutbox: { msvEntry->SetEntryL(KMsvGlobalOutBoxIndexEntryId); break; }
- case ESent: { msvEntry->SetEntryL(KMsvSentEntryId); break; }
- default: { User::Panic(_L("Folder Type"), 871); break; }
- }
-
- // mtm takes ownership of entry context
- CleanupStack::Pop(msvEntry);
- clientMtm->SetCurrentEntryL(msvEntry);
-
- // create a new message
- clientMtm->CreateMessageL(defaultServiceId);
-
- // set subject
- clientMtm->SetSubjectL(parameters.iMessageSubject->Des() );
-
- // set some mms defaults
- clientMtm->SetMessageClass(EMmsClassPersonal);
- clientMtm->SetExpiryInterval(86400);
- clientMtm->SetDeliveryTimeInterval(3600);
- clientMtm->SetMessagePriority(EMmsPriorityLow);
- clientMtm->SetSenderVisibility(EMmsMaximumSenderVisibility);
- clientMtm->SetDeliveryReport(EMmsDeliveryReportYes);
- clientMtm->SetReadReply(EMmsReadReplyYes);
-
- // set the sender / addressee field
- if (parameters.iFolderType == EInbox)
- {
- AddMtmSenderL(*clientMtm, parameters, EFalse);
- }
-
- // Add all recipients to clientMtm
- AddRecipientsL( *clientMtm, parameters, EFalse );
-
-
- // get an access to the message store
- CMsvStore* store = msvEntry->EditStoreL();
- CleanupStack::PushL(store);
-
- // get the entry of the message
- TMsvEntry messageEntry = clientMtm->Entry().Entry();
-
- // set the details field
- if (parameters.iFolderType == EInbox)
- {
- SetSenderToEntryDetails(messageEntry, parameters, EFalse);
- }
- else
- {
- SetRecipientToEntryDetails(messageEntry, parameters, EFalse);
- }
-
- // set the description field same as the message subject
- messageEntry.iDescription.Set( parameters.iMessageSubject->Des().Left(KSmsDescriptionLength) );
- messageEntry.iBioType = KUidMsgSubTypeMmsAudioMsg.iUid;
-
- // save the changes done above
- clientMtm->Entry().ChangeL(messageEntry);
-
-
- TFileName sourceFileName = iEngine->TestDataPathL( CCreatorEngine::EAMR_20kB );
- TParse parser;
- parser.Set(sourceFileName, NULL, NULL);
- TFileName shortFileName = parser.NameAndExt();
-
- // get the mime type
- RApaLsSession ls;
- User::LeaveIfError(ls.Connect());
- CleanupClosePushL<RApaLsSession>(ls);
- TUid appUid;
- TDataType dataType;
- ls.AppForDocument(sourceFileName, appUid, dataType);
- CleanupStack::PopAndDestroy(); //ls
- TPtrC8 mimeType = dataType.Des8();
-
- // attachment settings
- MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
- CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); // ownership of attachmentInfo will be transferred
- attachmentInfo->SetAttachmentNameL( shortFileName );
- attachmentInfo->SetMimeTypeL( mimeType );
-
- // save
- CAsyncWaiter* waiter = CAsyncWaiter::NewLC();
-
- TRAP(err, attachMan.AddAttachmentL(sourceFileName, attachmentInfo, waiter->iStatus ));
- if (err == KErrNone)
- waiter->StartAndWait();
- else
- LOGSTRING2("Creator: CCreatorMessages::CreateAMSEntryL failed to attach %S", &sourceFileName);
-
- CleanupStack::PopAndDestroy(waiter);
-
- // save the changes made to the message store
- store->CommitL();
- CleanupStack::PopAndDestroy(store);
-
-
- // save the message
- clientMtm->SaveMessageL();
-
- // final fine tuning
- messageEntry.SetAttachment(ETrue);
- messageEntry.iDate.HomeTime();
- messageEntry.SetVisible(ETrue);
- messageEntry.SetInPreparation(EFalse);
- if (parameters.iCreateAsUnread)
- {
- messageEntry.SetUnread(ETrue);
- messageEntry.SetNew(ETrue);
- }
- else
- {
- messageEntry.SetUnread(EFalse);
- messageEntry.SetNew(EFalse);
- }
- messageEntry.SetComplete(ETrue);
- messageEntry.iServiceId = defaultServiceId;
- messageEntry.iRelatedId = 0;
-
- if (parameters.iFolderType == EDrafts)
- messageEntry.SetReadOnly(EFalse);
- else
- messageEntry.SetReadOnly(ETrue);
-
- messageEntry.iMtmData1 = KMmsMessageMRetrieveConf | KMmsMessageMobileTerminated;
-
- clientMtm->Entry().ChangeL(messageEntry);
-
- // id has been generated, store it for being able to delete
- // only entries created with Creator
- iEntryIds.Append( messageEntry.Id() );
-
- CleanupStack::PopAndDestroy(2); // registry, clientMtm
-
-
- return err;
- }
-
-//----------------------------------------------------------------------------
-
-TInt CCreatorMessages::CreateEmailEntryL(const CMessagesParameters& parameters)
- {
- LOGSTRING("Creator: CCreatorMessages::CreateEmailEntryL");
-
- TInt err = KErrNone;
-
- // init
- if( iSession == 0 )
- {
- iSession = CMsvSession::OpenSyncL(*this);
- }
-
- CClientMtmRegistry* registry = CClientMtmRegistry::NewL(*iSession);
- CleanupStack::PushL(registry);
-
- // get the client mtm and return if it isn't supported in the system
- CSmtpClientMtm* clientMtm = NULL;
- TRAP(err, clientMtm = static_cast<CSmtpClientMtm*>(registry->NewMtmL(KUidMsgTypeSMTP)));
-
- if (err || !clientMtm)
- {
- CAknErrorNote* note = new(ELeave) CAknErrorNote;
- note->ExecuteLD(_L("Email: Message type module not found"));
- CleanupStack::PopAndDestroy(2);
- User::Leave(KErrNotFound);
- }
- CleanupStack::PushL(clientMtm);
-
- // create a new object to access an existing entry
- CMsvEntry* msvEntry = CMsvEntry::NewL(*iSession, KMsvGlobalInBoxIndexEntryId, TMsvSelectionOrdering());
- CleanupStack::PushL(msvEntry);
-
- // get default service
- TMsvId defaultServiceId(0);
- TRAP(err, defaultServiceId = clientMtm->DefaultServiceL());
- if (err)
- {
- CAknErrorNote* note = new(ELeave) CAknErrorNote;
- note->ExecuteLD(_L("Email: Define a mailbox first"));
- CleanupStack::PopAndDestroy(2);
- User::Leave(KErrNotFound);
- }
-
- // set folder type
- switch (parameters.iFolderType)
- {
- case EInbox: { msvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId); break; }
- case EDrafts: { msvEntry->SetEntryL(KMsvDraftEntryId); break; }
- case EOutbox: { msvEntry->SetEntryL(KMsvGlobalOutBoxIndexEntryId); break; }
- case ESent: { msvEntry->SetEntryL(KMsvSentEntryId); break; }
- case EMailbox: { msvEntry->SetEntryL(iUserSelectedMailbox); break; }
- default: { User::Panic(_L("Folder Type"), 871); break; }
- }
-
- // mtm takes ownership of entry context
- CleanupStack::Pop(msvEntry);
- clientMtm->SetCurrentEntryL(msvEntry);
-
- // create a new message
- clientMtm->CreateMessageL(defaultServiceId);
-
- // set subject
- clientMtm->SetSubjectL( parameters.iMessageSubject->Des() );
-
- // set body
- clientMtm->Body().Reset();
- clientMtm->Body().InsertL(0, parameters.iMessageBodyText->Des());
-
- // get the entry of the message
- TMsvEntry messageEntry = clientMtm->Entry().Entry();
-
- // set the address fields
- if (parameters.iFolderType == EInbox)
- {
- AddSenderToMtmAddresseeL(*clientMtm, parameters, ETrue );
- SetSenderToEntryDetails(messageEntry, parameters, ETrue);
- messageEntry.iMtm = KUidMsgTypeIMAP4; // or any other than KUidMsgTypeSMTP to display 'from' field instead of 'to' field
- }
- else
- {
- // Add all recipients to clientMtm
- AddRecipientsL( *clientMtm, parameters, ETrue );
- SetRecipientToEntryDetails(messageEntry, parameters, EFalse);
- }
-
- // set the description field same as the message subject
- messageEntry.iDescription.Set( parameters.iMessageSubject->Des().Left(KSmsDescriptionLength) );
-
- // save the changes done above
- clientMtm->Entry().ChangeL(messageEntry);
-
- // get an access to the message store
- CMsvStore* store = msvEntry->EditStoreL();
- CleanupStack::PushL(store);
-
- // save the attachments
- HandleAttachementsL(parameters, store, err);
-// for (TInt i=0; i<parameters.iAttachments->Count(); i++)
-// {
-// TFileName sourceFileName = iEngine->TestDataPathL( (CCreatorEngine::TTestDataPath) parameters.iAttachments->At(i) );
-//
-// TParse parser;
-// parser.Set(sourceFileName, NULL, NULL);
-// TFileName shortFileName = parser.NameAndExt();
-//
-// // get the mime type
-// RApaLsSession ls;
-// User::LeaveIfError(ls.Connect());
-// CleanupClosePushL<RApaLsSession>(ls);
-// TUid appUid;
-// TDataType dataType;
-// ls.AppForDocument(sourceFileName, appUid, dataType);
-// CleanupStack::PopAndDestroy(); //ls
-// TPtrC8 mimeType = dataType.Des8();
-//
-// // attachment settings
-// MMsvAttachmentManager& attachMan = store->AttachmentManagerL();
-// CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile); // ownership of attachmentInfo will be transferred
-// attachmentInfo->SetAttachmentNameL( shortFileName );
-// attachmentInfo->SetMimeTypeL( mimeType );
-//
-// // save
-// CAsyncWaiter* waiter = CAsyncWaiter::NewLC();
-//
-// TRAP(err, attachMan.AddAttachmentL(sourceFileName, attachmentInfo, waiter->iStatus ));
-// if (err == KErrNone)
-// waiter->StartAndWait();
-// else
-// LOGSTRING2("Creator: CCreatorMessages::CreateEmailEntryL failed to attach %S", &sourceFileName);
-//
-// CleanupStack::PopAndDestroy(waiter);
-// }
-
- // save the changes made to the message store
- store->CommitL();
- CleanupStack::PopAndDestroy(store);
-
- // save the message
- clientMtm->SaveMessageL();
-
- // final fine tuning
- TMsvEmailEntry temailEntry = static_cast<TMsvEmailEntry>(messageEntry);
- temailEntry.SetMessageFolderType(EFolderTypeUnknown);
- temailEntry.SetDisconnectedOperation(ENoDisconnectedOperations);
- temailEntry.SetEncrypted(EFalse);
- temailEntry.SetSigned(EFalse);
- temailEntry.SetVCard(EFalse);
- temailEntry.SetVCalendar(EFalse);
- temailEntry.SetReceipt(EFalse);
- temailEntry.SetMHTMLEmail(EFalse);
- temailEntry.SetBodyTextComplete(ETrue);
-
- if (parameters.iAttachments->Count() > 0)
- temailEntry.SetAttachment(ETrue);
- else
- temailEntry.SetAttachment(EFalse);
-
- temailEntry.iDate.HomeTime();
- temailEntry.SetVisible(ETrue);
- temailEntry.SetInPreparation(EFalse);
- if (parameters.iCreateAsUnread)
- {
- temailEntry.SetUnread(ETrue);
- temailEntry.SetNew(ETrue);
- }
- else
- {
- temailEntry.SetUnread(EFalse);
- temailEntry.SetNew(EFalse);
- }
- temailEntry.SetComplete(ETrue);
- temailEntry.iServiceId = defaultServiceId;
- temailEntry.iRelatedId = 0;
-
- clientMtm->Entry().ChangeL(temailEntry);
-
- // reset email headers
- CImHeader* header = CImHeader::NewLC();
- CMsvStore* msvStore = msvEntry->EditStoreL();
- CleanupStack::PushL(msvStore);
- header->RestoreL(*msvStore);
- header->SetSubjectL( parameters.iMessageSubject->Des() );
- if( iSenderArray.Count() == 0 )
- {
- GetSendersL(iSenderArray, parameters, ETrue, 1 );
- }
-
- if( iSenderArray.Count() > 0 )
- {
- header->SetFromL(iSenderArray[0]->Des());
- }
- else
- {
- header->SetFromL( parameters.iSenderAddress->Des() );
- }
- if( parameters.iRecipientAddress->Length() > 0 )
- {
- header->SetReceiptAddressL( parameters.iRecipientAddress->Des() );
- }
- else if( parameters.iRecipientAddressArray.Count() > 0 )
- {
- header->SetReceiptAddressL( parameters.iRecipientAddressArray[0]->Des());
- }
-
- header->StoreL( *msvStore );
- msvStore->CommitL();
- CleanupStack::PopAndDestroy(2); // msvStore, header
-
- // id has been generated, store it for being able to delete
- // only entries created with Creator
- iEntryIds.Append( messageEntry.Id() );
-
- CleanupStack::PopAndDestroy(2); // registry, clientMtm
-
- return err;
- }
-
-//----------------------------------------------------------------------------
-
-TInt CCreatorMessages::CreateSmartMessageEntryL(const CMessagesParameters& parameters)
- {
- LOGSTRING("Creator: CCreatorMessages::CreateSmartMessageEntryL");
-
- TInt err = KErrNone;
-
- // init
- if( iSession == 0 )
- {
- iSession = CMsvSession::OpenSyncL(*this);
- }
-
- CClientMtmRegistry* registry = CClientMtmRegistry::NewL(*iSession);
- CleanupStack::PushL(registry);
-
- // get the client mtm and return if it isn't supported in the system
- CSmsClientMtm* clientMtm = NULL;
- TRAP(err, clientMtm = static_cast<CSmsClientMtm*>(registry->NewMtmL(KUidMsgTypeSMS)));
- if (err || !clientMtm)
- {
- CAknErrorNote* note = new(ELeave) CAknErrorNote;
- note->ExecuteLD(_L("BIO: Message type module not found"));
- CleanupStack::PopAndDestroy(2);
- User::Leave(KErrNotFound);
- }
- CleanupStack::PushL(clientMtm);
-
- // create a new object to access an existing entry
- CMsvEntry* msvEntry = CMsvEntry::NewL(*iSession, KMsvGlobalInBoxIndexEntryId, TMsvSelectionOrdering());
- CleanupStack::PushL(msvEntry);
-
- // get default service
- TMsvId defaultServiceId = 0;
- TRAP(err, defaultServiceId = clientMtm->DefaultServiceL());
- if (err)
- {
- CAknErrorNote* note = new(ELeave) CAknErrorNote;
- note->ExecuteLD(_L("SMS: Define a SMS centre first"));
- CleanupStack::PopAndDestroy(2);
- User::Leave(KErrNotFound);
- }
-
- // set folder type
- switch (parameters.iFolderType)
- {
- case EInbox: { msvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId); break; }
- case EDrafts: { msvEntry->SetEntryL(KMsvDraftEntryId); break; }
- case EOutbox: { msvEntry->SetEntryL(KMsvGlobalOutBoxIndexEntryId); break; }
- case ESent: { msvEntry->SetEntryL(KMsvSentEntryId); break; }
- default: { User::Panic(_L("Folder Type"), 871); break; }
- }
-
- // mtm takes ownership of entry context
- CleanupStack::Pop(msvEntry);
- clientMtm->SetCurrentEntryL(msvEntry);
-
- // create a new message
- clientMtm->CreateMessageL(defaultServiceId);
-
- // set the from field to sms header
- if (parameters.iFolderType == EInbox)
- {
- CSmsHeader& smsHeader = clientMtm->SmsHeader();
-
- if( parameters.iSenderAddress )
- {
- smsHeader.SetFromAddressL( parameters.iSenderAddress->Des() );
- }
- else
- {
- smsHeader.SetFromAddressL(KEmpty);
- }
- }
-
- // set body, the BIO message itself
- clientMtm->Body().Reset();
- clientMtm->Body().InsertL(0, _L("Business Card\nTester Mike\nThe Company Ltd.\nSoftware Engineer\ntel +358 66 1234567\n"));
-
- // get the entry of the message
- TMsvEntry messageEntry = clientMtm->Entry().Entry();
-
- // TO-DO: Add support for all BIO messages, currently just insert a business card message ... :
- // set the message type
- // parameters.iBIOMessageType ...
- clientMtm->BioTypeChangedL(KUidBIOBusinessCardMsg);
- messageEntry.iBioType = KUidBIOBusinessCardMsg.iUid;
-
- // set the details field
- if (parameters.iFolderType == EInbox)
- {
- SetSenderToEntryDetails(messageEntry, parameters, EFalse);
- }
- else
- {
- SetRecipientToEntryDetails(messageEntry, parameters, EFalse);
- }
-
- // set the subject line
- messageEntry.iDescription.Set( parameters.iMessageSubject->Des().Left(KSmsDescriptionLength) );
-
- // set correct MTM type
- messageEntry.iMtm= KUidBIOMessageTypeMtm;
-
- // save the changes done above
- clientMtm->Entry().ChangeL(messageEntry);
-
- // save the message
- clientMtm->SaveMessageL();
-
- // final fine tuning
- messageEntry.SetAttachment(EFalse);
- messageEntry.iDate.HomeTime();
- messageEntry.SetVisible(ETrue);
- messageEntry.SetInPreparation(EFalse);
- if (parameters.iCreateAsUnread)
- {
- messageEntry.SetUnread(ETrue);
- messageEntry.SetNew(ETrue);
- }
- else
- {
- messageEntry.SetUnread(EFalse);
- messageEntry.SetNew(EFalse);
- }
- messageEntry.SetComplete(ETrue);
- messageEntry.iServiceId = defaultServiceId;
- messageEntry.iRelatedId = 0;
- clientMtm->Entry().ChangeL(messageEntry);
-
- // id has been generated, store it for being able to delete
- // only entries created with Creator
- iEntryIds.Append( messageEntry.Id() );
-
- CleanupStack::PopAndDestroy(2); // registry, clientMtm
-
-
- return err;
- }
-
-//----------------------------------------------------------------------------
-
-TInt CCreatorMessages::CreateObexEntryL(TUid aMtm, const CMessagesParameters& parameters)
- {
- LOGSTRING("Creator: CCreatorMessages::CreateObexEntryL");
-
- TInt err = KErrNone;
-
- // init
- if( iSession == 0 )
- {
- iSession = CMsvSession::OpenSyncL(*this);
- }
- CClientMtmRegistry* registry = CClientMtmRegistry::NewL(*iSession);
- CleanupStack::PushL(registry);
-
- // get the client mtm and return if it isn't supported in the system
- CObexClientMtm* clientMtm = NULL;
- TRAP(err, clientMtm = static_cast<CObexClientMtm*>(registry->NewMtmL(aMtm)));
- if (err || !clientMtm)
- {
- CAknErrorNote* note = new(ELeave) CAknErrorNote;
- note->ExecuteLD(_L("Obex: Message type module not found"));
- CleanupStack::PopAndDestroy(2);
- User::Leave(KErrNotFound);
- }
- CleanupStack::PushL(clientMtm);
-
- // create a new object to access an existing entry
- CMsvEntry* msvEntry = CMsvEntry::NewL(*iSession, KMsvGlobalInBoxIndexEntryId, TMsvSelectionOrdering());
- CleanupStack::PushL(msvEntry);
-
- // define default service
- TMsvId defaultServiceId = 0;
-
- // set folder type
- switch (parameters.iFolderType)
- {
- case EInbox: { msvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId); break; }
- case EDrafts: { msvEntry->SetEntryL(KMsvDraftEntryId); break; }
- case EOutbox: { msvEntry->SetEntryL(KMsvGlobalOutBoxIndexEntryId); break; }
- case ESent: { msvEntry->SetEntryL(KMsvSentEntryId); break; }
- default: { User::Panic(_L("Folder Type"), 871); break; }
- }
-
- // mtm takes ownership of entry context
- CleanupStack::Pop(msvEntry);
- clientMtm->SetCurrentEntryL(msvEntry);
-
- // create a new message
- clientMtm->CreateMessageL(defaultServiceId);
-
- // get the entry of the message
- TMsvEntry messageEntry = clientMtm->Entry().Entry();
-
- // set subject
- clientMtm->SetSubjectL( parameters.iMessageSubject->Des() );
- messageEntry.iDescription.Set( parameters.iMessageSubject->Des().Left(KSmsDescriptionLength) );
-
- // set body, must be empty for obex messages
- clientMtm->Body().Reset();
-
- // set the details field and
- if (parameters.iFolderType == EInbox)
- {
- SetSenderToEntryDetails(messageEntry, parameters, EFalse);
- }
- else
- {
- SetRecipientToEntryDetails(messageEntry, parameters, EFalse);
- }
-
- // set mtm
- messageEntry.iMtm = aMtm;
- messageEntry.iType = KUidMsvMessageEntry;
- messageEntry.iServiceId = KMsvUnknownServiceIndexEntryId;
-
- // save the changes done above
- clientMtm->Entry().ChangeL(messageEntry);
-
- // save the message
- clientMtm->SaveMessageL();
-
- // final fine tuning
- messageEntry.iDate.HomeTime();
- messageEntry.SetVisible(ETrue);
- messageEntry.SetInPreparation(EFalse);
- if (parameters.iCreateAsUnread)
- {
- messageEntry.SetUnread(ETrue);
- messageEntry.SetNew(ETrue);
- }
- else
- {
- messageEntry.SetUnread(EFalse);
- messageEntry.SetNew(EFalse);
- }
- messageEntry.SetComplete(ETrue);
- clientMtm->Entry().ChangeL(messageEntry);
-
- // save the attachment
- if (parameters.iAttachments->Count() >= 1)
- {
- // create a new entry for the attachment
- TMsvEntry attachTEntry;
- attachTEntry.iType = KUidMsvAttachmentEntry;
- attachTEntry.iServiceId = KMsvUnknownServiceIndexEntryId;
- attachTEntry.iMtm = KUidMsgTypeBt; //save as bt message
-
- msvEntry->CreateL(attachTEntry);
-
- CMsvEntry* attachEntry = iSession->GetEntryL(attachTEntry.Id());
- clientMtm->SetCurrentEntryL(attachEntry);
-
- // get source file
- TFileName sourceFileName = iEngine->TestDataPathL( (CCreatorEngine::TTestDataPath) parameters.iAttachments->At(0) );
-
- // get the mime type
- RApaLsSession ls;
- User::LeaveIfError(ls.Connect());
- CleanupClosePushL<RApaLsSession>(ls);
- TUid appUid;
- TDataType mimeType;
- ls.AppForDocument(sourceFileName, appUid, mimeType);
- CleanupStack::PopAndDestroy(); //ls
-
- CAsyncWaiter* waiter = CAsyncWaiter::NewLC();
-
- // add an attachment to the current message entry
- TRAP(err, clientMtm->AddAttachmentL( sourceFileName, mimeType.Des8(), 0, waiter->iStatus ));
- if (err == KErrNone)
- waiter->StartAndWait();
- else
- LOGSTRING2("Creator: CCreatorMessages::CreateObexEntryL failed to attach %S", &sourceFileName);
-
- CleanupStack::PopAndDestroy(waiter);
- }
-
- // id has been generated, store it for being able to delete
- // only entries created with Creator
- iEntryIds.Append( messageEntry.Id() );
-
- CleanupStack::PopAndDestroy(2); // registry, clientMtm
-
-
- return err;
- }
-
-//----------------------------------------------------------------------------
-
-void CCreatorMessages::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) // from MMsvSessionObserver
- {
- }
-
-//----------------------------------------------------------------------------
-void CCreatorMessages::SetSenderToEntryDetails(TMsvEntry& aMsgEntry, const CMessagesParameters& aParameters, TBool aUseEmailAddress)
- {
- // Only one sender allowed:
- if( iSenderArray.Count() == 0 )
- {
- GetSendersL(iSenderArray, aParameters, aUseEmailAddress, 1 );
- }
- if( iSenderArray.Count() > 0 )
- {
- aMsgEntry.iDetails.Set( iSenderArray[0]->Des() );
- }
- else
- {
- aMsgEntry.iDetails.Set(KEmpty);
- }
- }
-
-//----------------------------------------------------------------------------
-void CCreatorMessages::SetRecipientToEntryDetails(TMsvEntry& aMsgEntry, const CMessagesParameters& aParameters, TBool aUseEmailAddress)
- {
- // Only one sender allowed:
- GetAllRecipientsL(iRecipientArray, aParameters, aUseEmailAddress);
- if( iRecipientArray.Count() > 0 )
- {
- const TDesC& temp = iRecipientArray[0]->Des();
- aMsgEntry.iDetails.Set( temp );
- }
- else
- {
- aMsgEntry.iDetails.Set(KEmpty);
- }
- }
-
-//----------------------------------------------------------------------------
-void CCreatorMessages::AddSenderToMtmAddresseeL(CBaseMtm& aMtm, const CMessagesParameters& aParameters, TBool aUseEmailAddress )
- {
- // Only one sender allowed:
- if( iSenderArray.Count() == 0 )
- {
- GetSendersL(iSenderArray, aParameters, aUseEmailAddress, 1 );
- }
-
- for( TInt i = 0; i < iSenderArray.Count(); ++i )
- {
- aMtm.AddAddresseeL( iSenderArray[i]->Des() );
- }
- }
-
-//----------------------------------------------------------------------------
-void CCreatorMessages::AddMtmSenderL(CMmsClientMtm& aMtm, const CMessagesParameters& aParameters, TBool aUseEmailAddress )
- {
- // Only one sender allowed:
- if( iSenderArray.Count() == 0 )
- {
- GetSendersL(iSenderArray, aParameters, aUseEmailAddress, 1 );
- }
-
- if( iSenderArray.Count() > 0 )
- {
- aMtm.SetSenderL( iSenderArray[0]->Des() );
- }
- }
-
-//----------------------------------------------------------------------------
-void CCreatorMessages::GetSendersL(RPointerArray<HBufC>& aSenderArray, const CMessagesParameters& aParameters, TBool aUseEmailAddress, TInt aMaxNum )
- {
- TInt counter = 0;
-
- if( counter < aMaxNum || aMaxNum == KUndef )
- {
- if( aParameters.iSenderAddress && aParameters.iSenderAddress->Length() > 0 )
- {
- HBufC* temp = HBufC::NewL(aParameters.iSenderAddress->Length());
- CleanupStack::PushL(temp);
- temp->Des().Copy(aParameters.iSenderAddress->Des());
- aSenderArray.AppendL( temp );
- CleanupStack::Pop(); // temp
- ++counter;
- }
- }
-
- if( counter < aMaxNum || aMaxNum == KUndef )
- {
- RPointerArray<HBufC> tempArray;
- CleanupResetAndDestroyPushL( tempArray );
- GetLinkedAddressesL(tempArray, aParameters.iSenderLinkIds, aUseEmailAddress, aParameters.iNumberOfExistingSenders);
- for( TInt i = 0; i < tempArray.Count() && (counter < aMaxNum || aMaxNum == KUndef); ++i )
- {
- HBufC* temp = tempArray[i]->AllocLC();
- aSenderArray.AppendL(temp);
- CleanupStack::Pop(); // temp
- ++counter;
- }
- CleanupStack::PopAndDestroy(); // tempArray
- }
- }
-
-//----------------------------------------------------------------------------
-void CCreatorMessages::AddRecipientsL(CBaseMtm& aMtm, const CMessagesParameters& aParameters, TBool aUseEmailAddress )
- {
- GetAllRecipientsL(iRecipientArray, aParameters, aUseEmailAddress);
- for( TInt i = 0; i < iRecipientArray.Count(); ++i )
- {
- aMtm.AddAddresseeL( iRecipientArray[i]->Des() );
- }
- }
-
-//----------------------------------------------------------------------------
-void CCreatorMessages::GetAllRecipientsL(RPointerArray<HBufC>& aRecipientArray, const CMessagesParameters& aParameters, TBool aUseEmailAddress )
- {
-
- // If iRecipientAddress is given, add it to the array:
- if( aParameters.iRecipientAddress && aParameters.iRecipientAddress->Length() > 0 )
- {
- HBufC* temp = HBufC::NewL(aParameters.iRecipientAddress->Length());
- CleanupStack::PushL(temp);
- temp->Des().Copy(aParameters.iRecipientAddress->Des());
- aRecipientArray.AppendL( temp );
- CleanupStack::Pop(); // temp
- }
-
- // Add all recipients listed in iRecipientAddressArray:
- for( TInt i = 0; i < aParameters.iRecipientAddressArray.Count(); ++i )
- {
- HBufC* temp = HBufC::NewL(aParameters.iRecipientAddressArray[i]->Length());
- CleanupStack::PushL(temp);
- temp->Des().Copy(aParameters.iRecipientAddressArray[i]->Des());
- aRecipientArray.AppendL( temp );
- CleanupStack::Pop(); // temp
- }
-
- // Get all linked addresses.
- GetLinkedAddressesL(aRecipientArray, aParameters.iRecipientLinkIds, aUseEmailAddress, aParameters.iNumberOfExistingRecipients);
- }
-
-/*
- * Get all linked addresses. This method gets addresses that are linked with contact-set id and
- * existing addresses from the contact database, if required.
- */
-void CCreatorMessages::GetLinkedAddressesL(
- RPointerArray<HBufC>& aAddressArray,
- const RArray<TLinkIdParam>& aLinkIds,
- TBool aUseEmailAddress,
- TInt aNumOfExistingAddresses )
- {
-#if(!defined __SERIES60_30__ && !defined __SERIES60_31__)
-
- if( aNumOfExistingAddresses > 0 || aLinkIds.Count() > 0 )
- {
- // First create contact manager:
- if( iContactManager == 0)
- {
- CVPbkContactStoreUriArray* uriArray = CVPbkContactStoreUriArray::NewLC();
- uriArray->AppendL( TVPbkContactStoreUriPtr(VPbkContactStoreUris::DefaultCntDbUri()));
- iContactManager = CVPbkContactManager::NewL( *uriArray, &CCoeEnv::Static()->FsSession());
- CleanupStack::PopAndDestroy(uriArray);
-
-
- // Then open the stores:
-
- MVPbkContactStoreList& storeList = iContactManager->ContactStoresL();
- storeList.OpenAllL(*this);
- iWaiter->StartAndWait();
- _LIT(dbUri, "cntdb://c:contacts.cdb");
- TVPbkContactStoreUriPtr uri(dbUri);
- iStore = storeList.Find(uri);
- }
- // Existing attendees:
- if( aNumOfExistingAddresses > 0 )
- {
- if( iStore )
- {
- const MVPbkFieldTypeList& fieldList = iStore->StoreProperties().SupportedFields();
-
- // get contacts, results will be set to iExistingContacts
- MVPbkContactOperationBase* operation = iContactManager->FindL(_L(""), fieldList , *this);
- if (operation)
- {
- CleanupDeletePushL( operation );
- iWaiter->StartAndWait();//Making asynchronous FindL to synchronous
- CleanupStack::Pop(operation);
- delete operation;
- }
- if( iExistingContacts )
- {
- // Loop the links pointing to the existing contacts:
- TInt addedContacts = 0;
- for( TInt i = 0; i < iExistingContacts->Count() && addedContacts < aNumOfExistingAddresses; ++i )
- {
- // Get the address of the actual contact based on the contact link. Results are stored in
- // iTmpEmail and iTmpPhoneNumber
- MVPbkContactOperationBase* operation = iContactManager->RetrieveContactL( iExistingContacts->At(i), *this );
- if (operation)
- {
- CleanupDeletePushL( operation );
- iWaiter->StartAndWait(); // Making asynchronous RetrieveContactL to synchronous
- CleanupStack::Pop(); // operation
- delete operation;
- operation = 0;
- HandleSingleContactResultL();
- if( aUseEmailAddress && iTmpEmail && iTmpEmail->Length() > 0 )
- {
- HBufC* temp = HBufC::NewL(iTmpEmail->Length());
- CleanupStack::PushL(temp);
- temp->Des().Copy(iTmpEmail->Des());
- aAddressArray.AppendL(temp);
- CleanupStack::Pop(); // temp
- delete iTmpEmail;
- iTmpEmail = 0; // The pointer is owned by the aAddressArray now.
- ++addedContacts;
- }
- else if( !aUseEmailAddress && iTmpPhoneNumber && iTmpPhoneNumber->Length() > 0 )
- {
- HBufC* temp = HBufC::NewL(iTmpPhoneNumber->Length());
- CleanupStack::PushL(temp);
- temp->Des().Copy(iTmpPhoneNumber->Des());
- aAddressArray.AppendL(temp);
- CleanupStack::Pop(); // temp
- delete iTmpPhoneNumber;
- iTmpPhoneNumber = 0; // The pointer is owned by the aAddressArray now.
- ++addedContacts;
- }
- }
- }
- }
- }
- }
-
- // Loop linked contact-set ids:
- for( TInt i = 0; i < aLinkIds.Count(); ++i )
- {
- TLinkIdParam id = aLinkIds[i];
- // Get all contact links in the contact-set...
- RPointerArray<MVPbkContactLink>& links = ContactLinkCache::Instance()->ContactLinks(id.iLinkId);
- // ... and loop the links:
- TInt addedContacts = 0;
- for( TInt j = 0; j < links.Count() && (id.iLinkAmount < 0 || addedContacts < id.iLinkAmount); ++j )
- {
- // Again retrieve contact based on the contact link. Results are stored in
- // iTmpEmail and iTmpPhoneNumber:
- MVPbkContactOperationBase* operation = iContactManager->RetrieveContactL( *(links[j]), *this );
- if (operation)
- {
- CleanupDeletePushL( operation );
- iWaiter->StartAndWait(); // Making asynchronous RetrieveContactL to synchronous
- CleanupStack::Pop(operation);
- delete operation;
- operation = 0;
- HandleSingleContactResultL();
- if( aUseEmailAddress && iTmpEmail && iTmpEmail->Length() > 0 )
- {
- aAddressArray.AppendL(iTmpEmail);
- iTmpEmail = 0; // The pointer is owned by the aAddressArray now.
- ++addedContacts;
- }
- else if( !aUseEmailAddress && iTmpPhoneNumber && iTmpPhoneNumber->Length() > 0 )
- {
- aAddressArray.AppendL(iTmpPhoneNumber);
- iTmpPhoneNumber = 0; // The pointer is owned by the aAddressArray now.
- ++addedContacts;
- }
- }
- }
- }
-
- //if( iContactManager )
- // iContactManager->ContactStoresL().CloseAll(*this);
- }
-#endif
-}
-
-//----------------------------------------------------------------------------
-#if(!defined __SERIES60_30__ && !defined __SERIES60_31__)
-void CCreatorMessages::VPbkSingleContactOperationComplete(
- MVPbkContactOperationBase& /*aOperation*/,
- MVPbkStoreContact* aContact )
- {
- LOGSTRING("Creator: CCreatorMessages::VPbkSingleContactOperationComplete" );
- iWaiter->Cancel();
- delete iTempContact;
- iTempContact = aContact;
- }
-
-void CCreatorMessages::HandleSingleContactResultL()
- {
- if( iTempContact )
- {
- TPtrC phoneNumber;
- TPtrC email;
-
- // Put contact's name to temporary member:
- delete iTmpPhoneNumber;
- iTmpPhoneNumber = 0;
- delete iTmpEmail;
- iTmpEmail = 0;
-
- TBool phFound = EFalse;
- TBool emailFound = EFalse;
-
- MVPbkStoreContactFieldCollection& fields = iTempContact->Fields();
- TInt fieldCount = fields.FieldCount();
- for (TInt i = 0; i < fieldCount; ++i)
- {
- MVPbkStoreContactField& field = fields.FieldAt(i);
- MVPbkContactFieldData& fieldData = field.FieldData();
- const MVPbkFieldType* fieldType = field.BestMatchingFieldType();
-
- if( fieldType )
- {
- // Find phone number and email:
- TInt fieldId( fieldType->FieldTypeResId() );
-
- TVPbkFieldStorageType dataType = fieldData.DataType();
- if( dataType == EVPbkFieldStorageTypeText)
- {
- MVPbkContactFieldTextData& textData = MVPbkContactFieldTextData::Cast(fieldData);
- if( !phFound &&
- (fieldId == R_VPBK_FIELD_TYPE_LANDPHONEGEN ||
- fieldId == R_VPBK_FIELD_TYPE_LANDPHONEHOME ||
- fieldId == R_VPBK_FIELD_TYPE_LANDPHONEWORK ||
- fieldId == R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ||
- fieldId == R_VPBK_FIELD_TYPE_MOBILEPHONEHOME ||
- fieldId == R_VPBK_FIELD_TYPE_MOBILEPHONEWORK ))
- {
- phoneNumber.Set(textData.Text());
- phFound = ETrue;
- }
- else if( !emailFound &&
- (fieldId == R_VPBK_FIELD_TYPE_EMAILGEN ||
- fieldId == R_VPBK_FIELD_TYPE_EMAILHOME ||
- fieldId == R_VPBK_FIELD_TYPE_EMAILWORK ))
- {
- email.Set(textData.Text());
- emailFound = ETrue;
- }
-
- if( phFound && emailFound )
- break; // No need to loop more fields.
- }
- }
- }
- if( phoneNumber.Length() > 0 )
- {
- delete iTmpPhoneNumber;
- iTmpPhoneNumber = 0;
- iTmpPhoneNumber = HBufC::NewL(phoneNumber.Length());
- iTmpPhoneNumber->Des().Copy(phoneNumber);
- }
- if( email.Length() > 0 )
- {
- delete iTmpEmail;
- iTmpEmail = 0;
- iTmpEmail = HBufC::NewL(email.Length());
- iTmpEmail->Des().Copy(email);
- }
- delete iTempContact;
- iTempContact = 0;
- }
- }
-
-void CCreatorMessages::VPbkSingleContactOperationFailed(
- MVPbkContactOperationBase& /*aOperation*/,
- TInt aError )
- {
- LOGSTRING2("Creator: CCreatorMessages::VPbkSingleContactOperationFailed - Error: %d", aError );
- iWaiter->Cancel();
- }
-
-void CCreatorMessages::OpenComplete()
- {
- LOGSTRING("Creator: CCreatorMessages::OpenComplete()");
- iWaiter->Cancel();
- }
-
-void CCreatorMessages::StoreReady(MVPbkContactStore& /*aContactStore*/)
- {
- LOGSTRING("Creator: CCreatorMessages::StoreReady()");
- iWaiter->Cancel();
- }
-
-void CCreatorMessages::StoreUnavailable(MVPbkContactStore& /*aContactStore*/,
- TInt /*aReason*/)
- {
- LOGSTRING("Creator: CCreatorMessages::StoreUnavailable()");
- iWaiter->Cancel();
- }
-
-
-void CCreatorMessages::HandleStoreEventL(
- MVPbkContactStore& /*aContactStore*/,
- TVPbkContactStoreEvent /*aStoreEvent*/)
- {
- LOGSTRING("Creator: CCreatorMessages::HandleStoreEventL()");
- iWaiter->Cancel();
- }
-
-void CCreatorMessages::FindCompleteL( MVPbkContactLinkArray* aResults )
- {
- LOGSTRING("Creator: CCreatorMessages::FindCompleteL()");
- iWaiter->Cancel();
- delete iExistingContacts;
- iExistingContacts = aResults;
- }
-
-void CCreatorMessages::FindFailed( TInt aError )
- {
- LOGSTRING2("Creator: CCreatorMessages:FindFailed() - Error: %d", aError);
- iWaiter->Cancel();
- delete iExistingContacts;
- iExistingContacts = 0;
- }
-#endif
-
-
-//----------------------------------------------------------------------------
-void CCreatorMessages::DeleteAllL()
- {
- LOGSTRING("Creator: CCreatorMessages::DeleteAllL");
- DeleteAllMessagesL( EFalse );
- }
-
-//----------------------------------------------------------------------------
-void CCreatorMessages::DeleteAllMessagesL( TBool aOnlyCreatedWithCreator )
- {
- LOGSTRING("Creator: CCreatorMessages::DeleteAllMessagesL");
- TInt err( KErrNone );
-
- // init
- if( iSession == 0 )
- {
- iSession = CMsvSession::OpenSyncL(*this);
- }
-
- CClientMtmRegistry* registry = CClientMtmRegistry::NewL(*iSession);
- CleanupStack::PushL( registry );
-
- // get the client mtm and return if it isn't supported in the system
- CSmsClientMtm* clientMtm( NULL );
- TRAP( err, clientMtm = static_cast<CSmsClientMtm*>( registry->NewMtmL( KUidMsgTypeSMS ) ) );
- if ( err || !clientMtm )
- {
- CAknErrorNote* note = new (ELeave) CAknErrorNote();
- note->ExecuteLD( _L( "SMS: Message type module not found" ) );
- CleanupStack::PopAndDestroy( 2 );
- User::Leave( KErrNotFound );
- }
- CleanupStack::PushL( clientMtm );
-
- TRAP_IGNORE( DeleteAllFromFolderL( KMsvGlobalInBoxIndexEntryId, iSession, clientMtm, aOnlyCreatedWithCreator ) );
- TRAP_IGNORE( DeleteAllFromFolderL( KMsvDraftEntryId, iSession, clientMtm, aOnlyCreatedWithCreator ) );
- TRAP_IGNORE( DeleteAllFromFolderL( KMsvGlobalOutBoxIndexEntryId, iSession, clientMtm, aOnlyCreatedWithCreator ) );
- TRAP_IGNORE( DeleteAllFromFolderL( KMsvSentEntryId, iSession, clientMtm, aOnlyCreatedWithCreator ) );
-
- // reset must be done here, because iEntryIds is stored in destructor
- iEntryIds.Reset();
-
- // all entries deleted, remove the Messages related registry
- iEngine->RemoveStoreL( KUidDictionaryUidMessages );
-
- CleanupStack::PopAndDestroy( clientMtm );
- CleanupStack::PopAndDestroy( registry );
- }
-
-//----------------------------------------------------------------------------
-void CCreatorMessages::DeleteAllFromFolderL( const TMsvId aContext,
- CMsvSession* aSession,
- CSmsClientMtm* aClientMtm,
- TBool aOnlyCreatedWithCreator )
- {
- LOGSTRING("Creator: CCreatorMessages::DeleteAllFromFolderL");
-
- TMsvSelectionOrdering sort;
- sort.SetShowInvisibleEntries( ETrue );
-
- CMsvEntry* inboxContext = CMsvEntry::NewL( *aSession, aContext, sort );
- CleanupStack::PushL( inboxContext );
-
- CMsvEntrySelection* entries = inboxContext->ChildrenL();
- CleanupStack::PushL( entries );
-
- TInt msgCount = entries->Count();
- for ( TInt i = 0; i < entries->Count(); i++)
- {
- TMsvId entryID = entries->At(i);
- aClientMtm->SwitchCurrentEntryL( entryID );
-
- if ( !aOnlyCreatedWithCreator || iEntryIds.Find( entryID ) != KErrNotFound )
- {
- CMsvEntry* entry = aSession->GetEntryL( (*entries)[i] );
- CleanupStack::PushL( entry );
-
- entry->DeleteL( entries->At(i) );
- CleanupStack::PopAndDestroy( entry );
- }
- }
-
- CleanupStack::PopAndDestroy( entries );
- CleanupStack::PopAndDestroy( inboxContext );
- }
-
-//----------------------------------------------------------------------------
-void CCreatorMessages::DeleteAllCreatedByCreatorL()
- {
- LOGSTRING("Creator: CCreatorMessages::DeleteAllCreatedByCreatorL");
-
- iEntryIds.Reset();
-
- // fetch ids of entries created by Creator
- iEngine->ReadEntryIdsFromStoreL( iEntryIds, KUidDictionaryUidMessages );
-
- // delete them
- DeleteAllMessagesL( ETrue );
- }
-
-CRecipientInfo::CRecipientInfo()
- {
-
- }
-
-CRecipientInfo::~CRecipientInfo()
- {
- delete iPhoneNumber;
- delete iEmailAddress;
- }
-
-void CRecipientInfo::SetPhoneNumber(HBufC* aPhone)
- {
- delete iPhoneNumber;
- iPhoneNumber = aPhone;
- }
-
-void CRecipientInfo::SetEmailAddress(HBufC* aEmail)
- {
- delete iEmailAddress;
- iEmailAddress = aEmail;
- }
-
-const HBufC* CRecipientInfo::PhoneNumber() const
- {
- return iPhoneNumber;
- }
-
-const HBufC* CRecipientInfo::EmailAddress() const
- {
- return iEmailAddress;
- }