--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/support/support_symbian.cpp Wed Aug 25 15:49:42 2010 +0300
@@ -0,0 +1,554 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "support.h"
+#include <qmessageaccountid.h>
+#include <qmessagefolderid.h>
+#include <qmessageid.h>
+#include <qmessagemanager.h>
+#include <qmessage_symbian_p.h>
+#include <messagingutil_p.h>
+
+#include <QDebug>
+
+#include <pop3set.h>
+#include <imapset.h>
+#include <smtpset.h>
+#include <iapprefs.h>
+#include <cemailaccounts.h>
+#include <metadatabase.h>
+#include <commsdat.h>
+
+_LIT(KPopServer, "ban-sindhub01.intra");
+_LIT8(KPopLoginName, "ban-sindhub01");
+_LIT8(KPopPassword, "ban-sindhub01");
+
+_LIT(KImapServer, "ban-sindhub01.intra");
+_LIT8(KImapPassword,"ban-sindhub01");
+_LIT8(KImapLoginName,"ban-sindhub01");
+
+_LIT(KSmtpServerAddress, "ban-sindhub01.intra");
+_LIT(KEmailAlias, "Messaging example");
+
+#define KDocumentsEntryIdValue 0x1008
+
+class CSymbianMessagingSession : public CBase, MMsvSessionObserver
+{
+public:
+ CSymbianMessagingSession();
+ ~CSymbianMessagingSession();
+ void HandleSessionEventL(TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3);
+ CMsvSession* ipMsvSession;
+};
+
+CSymbianMessagingSession::CSymbianMessagingSession()
+{
+ TRAPD(err, ipMsvSession = CMsvSession::OpenSyncL(*this));
+ Q_UNUSED(err)
+}
+
+CSymbianMessagingSession::~CSymbianMessagingSession()
+{
+ delete ipMsvSession;
+}
+
+void CSymbianMessagingSession::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/)
+{
+}
+
+QTM_BEGIN_NAMESPACE
+
+using namespace MessagingUtil;
+
+class MapiSession
+{
+public:
+ static QMessageId addMessage(const Support::Parameters ¶ms);
+};
+
+// The class 'MapiSession' is a friend of QMessageContentContainer - hijack it here
+// => This is needed to make it possible to set parentFolderId
+QMessageId MapiSession::addMessage(const Support::Parameters ¶ms)
+{
+ QString parentAccountName(params["parentAccountName"]);
+ QString parentFolderPath(params["parentFolderPath"]);
+ QString to(params["to"]);
+ QString cc(params["cc"]);
+ QString from(params["from"]);
+ QString date(params["date"]);
+ QString receivedDate(params["receivedDate"]);
+ QString subject(params["subject"]);
+ QString text(params["text"]);
+ QString mimeType(params["mimeType"]);
+ QString attachments(params["attachments"]);
+ QString priority(params["priority"]);
+ QString size(params["size"]);
+ QString type(params["type"]);
+ QString read(params["status-read"]);
+ QString hasAttachments(params["status-hasAttachments"]);
+
+ QMessageManager manager;
+
+ if (!to.isEmpty() && !from.isEmpty() && !date.isEmpty() && !subject.isEmpty() &&
+ !parentAccountName.isEmpty() && !parentFolderPath.isEmpty()) {
+ // Find the named account
+ QMessageAccountIdList accountIds(manager.queryAccounts(QMessageAccountFilter::byName(parentAccountName)));
+ if (accountIds.count() == 1) {
+ // Find the specified folder
+ QMessageFolderFilter filter(QMessageFolderFilter::byName(parentFolderPath) & QMessageFolderFilter::byParentAccountId(accountIds.first()));
+ QMessageFolderIdList folderIds(manager.queryFolders(filter));
+ if (folderIds.count() == 1) {
+ QMessage message;
+
+ message.setParentAccountId(accountIds.first());
+ message.d_ptr->_parentFolderId = folderIds.first();
+
+ QList<QMessageAddress> toList;
+ foreach (const QString &addr, to.split(",")) {
+ toList.append(QMessageAddress(QMessageAddress::Email, addr.trimmed()));
+ }
+ message.setTo(toList);
+
+ QList<QMessageAddress> ccList;
+ foreach (const QString &addr, cc.split(",")) {
+ if (!addr.isEmpty()) {
+ ccList.append(QMessageAddress(QMessageAddress::Email, addr.trimmed()));
+ }
+ }
+ message.setCc(ccList);
+
+ message.setFrom(QMessageAddress(QMessageAddress::Email, from));
+ message.setSubject(subject);
+
+ QDateTime dt(QDateTime::fromString(date, Qt::ISODate));
+ dt.setTimeSpec(Qt::UTC);
+ message.setDate(dt);
+
+ if (type.isEmpty()) {
+ message.setType(QMessage::Email);
+ } else {
+ if (type.toLower() == "mms") {
+ message.setType(QMessage::Mms);
+ } else if (type.toLower() == "sms") {
+ message.setType(QMessage::Sms);
+ } else if (type.toLower() == "instantmessage") {
+ message.setType(QMessage::InstantMessage);
+ } else {
+ message.setType(QMessage::Email);
+ }
+ }
+
+ if (!receivedDate.isEmpty()) {
+ QDateTime dt(QDateTime::fromString(receivedDate, Qt::ISODate));
+ dt.setTimeSpec(Qt::UTC);
+ message.setReceivedDate(dt);
+ }
+
+ if (!priority.isEmpty()) {
+ if (priority.toLower() == "high") {
+ message.setPriority(QMessage::HighPriority);
+ } else if (priority.toLower() == "low") {
+ message.setPriority(QMessage::LowPriority);
+ }
+ }
+
+ /*if (!size.isEmpty()) {
+ message.d_ptr->_size = size.toUInt();
+ }*/
+
+ if (!text.isEmpty()) {
+ message.setBody(text, mimeType.toAscii());
+ }
+
+ if (!attachments.isEmpty()) {
+ message.appendAttachments(attachments.split("\n"));
+ }
+
+ QMessage::StatusFlags flags(0);
+ if (read.toLower() == "true") {
+ flags |= QMessage::Read;
+ }
+ if (hasAttachments.toLower() == "true") {
+ flags |= QMessage::HasAttachments;
+ }
+ message.setStatus(flags);
+
+ if (!manager.addMessage(&message)) {
+ qWarning() << "Unable to addMessage:" << to << from << date << subject;
+ } else {
+ return message.id();
+ }
+ } else {
+ qWarning() << "Unable to locate parent folder:" << parentFolderPath;
+ }
+ } else {
+ qWarning() << "Unable to locate parent account:" << parentAccountName;
+ }
+ } else {
+ qWarning() << "Necessary information missing";
+ }
+
+ return QMessageId();
+}
+QTM_END_NAMESPACE
+
+namespace Support {
+
+using namespace CommsDat;
+
+void deleteServiceRelatedEntriesFromFolder(TMsvId serviceId, TMsvId folderId)
+{
+ CSymbianMessagingSession* pSession = new(ELeave) CSymbianMessagingSession();
+ CleanupStack::PushL(pSession);
+ CMsvEntry* pEntry = CMsvEntry::NewL(*(pSession->ipMsvSession), folderId, TMsvSelectionOrdering(KMsvNoGrouping,EMsvSortByNone,ETrue));
+ CleanupStack::PushL(pEntry);
+ CMsvEntrySelection* pEntries = pEntry->ChildrenWithServiceL(serviceId);
+ CleanupStack::PushL(pEntries);
+ for (int i = 0; i < pEntries->Count(); i++) {
+ CMsvOperationWait* pMsvOperationWait = CMsvOperationWait::NewLC();
+ CMsvOperation* pMsvOperation = pEntry->DeleteL(pEntries->At(i), pMsvOperationWait->iStatus);
+ CleanupStack::PushL(pMsvOperation);
+ pMsvOperationWait->Start();
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(pMsvOperation);
+ CleanupStack::PopAndDestroy(pMsvOperationWait);
+ }
+ CleanupStack::PopAndDestroy(pEntries);
+ CleanupStack::PopAndDestroy(pEntry);
+ CleanupStack::PopAndDestroy(pSession);
+}
+
+void clearMessageStoreL()
+{
+ CEmailAccounts* pEmailAccounts = CEmailAccounts::NewLC();
+
+ RArray<TImapAccount> imapAccounts(10);
+ pEmailAccounts->GetImapAccountsL(imapAccounts);
+ for (int i=0; i < imapAccounts.Count(); i++) {
+ CImImap4Settings* settings = new(ELeave) CImImap4Settings();
+ CleanupStack::PushL(settings);
+ pEmailAccounts->LoadImapSettingsL(imapAccounts[i], *settings);
+ if (settings->ServerAddress().Compare(KImapServer) == 0) {
+ pEmailAccounts->DeleteImapAccountL(imapAccounts[i]);
+ deleteServiceRelatedEntriesFromFolder(imapAccounts[i].iImapService, KDocumentsEntryIdValue);
+ }
+ CleanupStack::PopAndDestroy(settings);
+ }
+
+ RArray<TPopAccount> popAccounts(10);
+ pEmailAccounts->GetPopAccountsL(popAccounts);
+ for (int i=0; i < popAccounts.Count(); i++) {
+ CImPop3Settings* settings = new(ELeave) CImPop3Settings();
+ CleanupStack::PushL(settings);
+ pEmailAccounts->LoadPopSettingsL(popAccounts[i], *settings);
+ if (settings->ServerAddress().Compare(KPopServer) == 0) {
+ pEmailAccounts->DeletePopAccountL(popAccounts[i]);
+ deleteServiceRelatedEntriesFromFolder(popAccounts[i].iPopService, KDocumentsEntryIdValue);
+ }
+ CleanupStack::PopAndDestroy(settings);
+ }
+
+ RArray<TSmtpAccount> smtpAccounts(10);
+ pEmailAccounts->GetSmtpAccountsL(smtpAccounts);
+ for (int i=0; i < smtpAccounts.Count(); i++) {
+ CImSmtpSettings* settings = new(ELeave) CImSmtpSettings();
+ CleanupStack::PushL(settings);
+ pEmailAccounts->LoadSmtpSettingsL(smtpAccounts[i], *settings);
+ if (settings->ServerAddress().Compare(KSmtpServerAddress) == 0) {
+ pEmailAccounts->DeleteSmtpAccountL(smtpAccounts[i]);
+ deleteServiceRelatedEntriesFromFolder(smtpAccounts[i].iSmtpService, KDocumentsEntryIdValue);
+ }
+ CleanupStack::PopAndDestroy(settings);
+ }
+
+ CleanupStack::PopAndDestroy(pEmailAccounts);
+}
+
+void clearMessageStore()
+{
+ TRAPD(err, clearMessageStoreL());
+ Q_UNUSED(err)
+}
+
+QMessageAccountId createPopAndSmtpAccountL(const TDesC& accountName, const TDesC& fromAddress)
+{
+ CEmailAccounts* pEmailAccounts = CEmailAccounts::NewLC();
+
+ // Create IAP Preferences for IMAP & POP3
+ CImIAPPreferences* pImIAPPreferences = CImIAPPreferences::NewLC();
+
+ // Create POP3 Account
+ CImPop3Settings* pImPop3Settings = new(ELeave) CImPop3Settings();
+ CleanupStack::PushL(pImPop3Settings);
+ pEmailAccounts->PopulateDefaultPopSettingsL(*pImPop3Settings, *pImIAPPreferences);
+ pImPop3Settings->SetServerAddressL(KPopServer);
+ pImPop3Settings->SetLoginNameL(KPopLoginName);
+ pImPop3Settings->SetPasswordL(KPopPassword);
+ pImPop3Settings->SetPort(110);
+ TPopAccount popAccount = pEmailAccounts->CreatePopAccountL(accountName, *pImPop3Settings, *pImIAPPreferences, EFalse);
+
+ // Create SMTP Account
+ CImSmtpSettings *pImSmtpSettings = new (ELeave) CImSmtpSettings();
+ CleanupStack::PushL(pImSmtpSettings);
+ pEmailAccounts->PopulateDefaultSmtpSettingsL(*pImSmtpSettings, *pImIAPPreferences);
+ pImSmtpSettings->SetServerAddressL(KSmtpServerAddress);
+ pImSmtpSettings->SetEmailAliasL(KEmailAlias);
+ pImSmtpSettings->SetEmailAddressL(fromAddress);
+ pImSmtpSettings->SetReplyToAddressL(fromAddress);
+ pImSmtpSettings->SetReceiptAddressL(fromAddress);
+ pImSmtpSettings->SetPort(25);
+ pEmailAccounts->CreateSmtpAccountL(popAccount, *pImSmtpSettings, *pImIAPPreferences, EFalse);
+
+ CleanupStack::PopAndDestroy(pImSmtpSettings);
+ CleanupStack::PopAndDestroy(pImPop3Settings);
+ CleanupStack::PopAndDestroy(pImIAPPreferences);
+ CleanupStack::PopAndDestroy(pEmailAccounts);
+
+ return QMessageAccountId(addIdPrefix(QString::number(popAccount.iPopService), SymbianHelpers::EngineTypeMTM));
+}
+
+QMessageAccountId createPopAndSmtpAccount(const TDesC& accountName, const TDesC& fromAddress)
+{
+ QMessageAccountId retVal;
+ TRAPD(err, retVal = createPopAndSmtpAccountL(accountName, fromAddress));
+ Q_UNUSED(err)
+ return retVal;
+}
+
+bool imapAccountByNameL(const TDesC& accountName, TImapAccount& account)
+{
+ CEmailAccounts* pEmailAccounts = CEmailAccounts::NewLC();
+
+ RArray<TImapAccount> imapAccounts(10);
+ pEmailAccounts->GetImapAccountsL(imapAccounts);
+ for (int i=0; i < imapAccounts.Count(); i++) {
+ if (imapAccounts[i].iImapAccountName.Compare(accountName) == 0) {
+ account = imapAccounts[i];
+ CleanupStack::PopAndDestroy(pEmailAccounts);
+ return true;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(pEmailAccounts);
+ return false;
+}
+
+bool imapAccountByName(const TDesC& accountName, TImapAccount& account)
+{
+ bool retVal = false;
+ TRAPD(err, retVal = imapAccountByNameL(accountName, account));
+ Q_UNUSED(err)
+ return retVal;
+}
+
+bool pop3AccountByNameL(const TDesC& accountName, TPopAccount& account)
+{
+ CEmailAccounts* pEmailAccounts = CEmailAccounts::NewLC();
+
+ RArray<TPopAccount> popAccounts(10);
+ pEmailAccounts->GetPopAccountsL(popAccounts);
+ for (int i=0; i < popAccounts.Count(); i++) {
+ if (popAccounts[i].iPopAccountName.Compare(accountName) == 0) {
+ account = popAccounts[i];
+ CleanupStack::PopAndDestroy(pEmailAccounts);
+ return true;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(pEmailAccounts);
+ return false;
+}
+
+bool pop3AccountByName(const TDesC& accountName, TPopAccount& account)
+{
+ bool retVal = false;
+ TRAPD(err, retVal = pop3AccountByNameL(accountName, account));
+ Q_UNUSED(err)
+ return retVal;
+}
+
+bool smtpAccountByNameL(const TDesC& accountName, TSmtpAccount& account)
+{
+ CEmailAccounts* pEmailAccounts = CEmailAccounts::NewLC();
+
+ RArray<TSmtpAccount> smtpAccounts(10);
+ pEmailAccounts->GetSmtpAccountsL(smtpAccounts);
+ for (int i=0; i < smtpAccounts.Count(); i++) {
+ if (smtpAccounts[i].iSmtpAccountName.Compare(accountName) == 0) {
+ account = smtpAccounts[i];
+ CleanupStack::PopAndDestroy(pEmailAccounts);
+ return true;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(pEmailAccounts);
+ return false;
+}
+
+bool smtpAccountByName(const TDesC& accountName, TSmtpAccount& account)
+{
+ bool retVal = false;
+ TRAPD(err, retVal = smtpAccountByNameL(accountName, account));
+ Q_UNUSED(err)
+ return retVal;
+}
+
+QMessageAccountId createImapAndSmtpAccountL(const TDesC& accountName, const TDesC& fromAddress)
+{
+ CEmailAccounts* pEmailAccounts = CEmailAccounts::NewLC();
+
+ // Create IAP Preferences for IMAP & SMTP
+ CImIAPPreferences* pImIAPPreferences = CImIAPPreferences::NewLC();
+
+ // Create IMAP Account
+ CImImap4Settings* pImap4Settings = new(ELeave)CImImap4Settings;
+ CleanupStack::PushL(pImap4Settings);
+ pEmailAccounts->PopulateDefaultImapSettingsL(*pImap4Settings, *pImIAPPreferences);
+ pImap4Settings->SetServerAddressL(KImapServer);
+ pImap4Settings->SetLoginNameL(KImapLoginName);
+ pImap4Settings->SetPasswordL(KImapPassword);
+ pImap4Settings->SetPort(143);
+ TImapAccount imapAccount = pEmailAccounts->CreateImapAccountL(accountName, *pImap4Settings, *pImIAPPreferences, EFalse);
+
+ // Create SMTP Account
+ CImSmtpSettings* pImSmtpSettings = new (ELeave) CImSmtpSettings();
+ CleanupStack::PushL(pImSmtpSettings);
+ pEmailAccounts->PopulateDefaultSmtpSettingsL(*pImSmtpSettings, *pImIAPPreferences);
+ pImSmtpSettings->SetServerAddressL(KSmtpServerAddress);
+ pImSmtpSettings->SetEmailAliasL(KEmailAlias);
+ pImSmtpSettings->SetEmailAddressL(fromAddress);
+ pImSmtpSettings->SetReplyToAddressL(fromAddress);
+ pImSmtpSettings->SetReceiptAddressL(fromAddress);
+ pImSmtpSettings->SetPort(25);
+ TSmtpAccount smtpAccount = pEmailAccounts->CreateSmtpAccountL(imapAccount, *pImSmtpSettings, *pImIAPPreferences, EFalse);
+
+ TSmtpAccount defaultAccount;
+ if (pEmailAccounts->DefaultSmtpAccountL(defaultAccount) == KErrNotFound)
+ {
+ pEmailAccounts->SetDefaultSmtpAccountL(smtpAccount);
+ }
+
+ CleanupStack::PopAndDestroy(pImSmtpSettings);
+ CleanupStack::PopAndDestroy(pImap4Settings);
+ CleanupStack::PopAndDestroy(pImIAPPreferences);
+ CleanupStack::PopAndDestroy(pEmailAccounts);
+
+ return QMessageAccountId(addIdPrefix(QString::number(imapAccount.iImapService), SymbianHelpers::EngineTypeMTM));
+}
+
+QMessageAccountId createImapAndSmtpAccount(const TDesC& accountName, const TDesC& fromAddress)
+{
+ QMessageAccountId retVal;
+ TRAPD(err, retVal = createImapAndSmtpAccountL(accountName, fromAddress));
+ Q_UNUSED(err)
+ return retVal;
+}
+
+QMessageAccountId addAccount(const Parameters ¶ms)
+{
+ QString accountName(params["name"]);
+ TPtrC16 symbianAccountName(KNullDesC);
+ symbianAccountName.Set(reinterpret_cast<const TUint16*>(accountName.utf16()));
+
+ QString fromAddress(params["fromAddress"]);
+ TPtrC16 symbianFromAddress(KNullDesC);
+ symbianFromAddress.Set(reinterpret_cast<const TUint16*>(fromAddress.utf16()));
+
+ return createImapAndSmtpAccount(symbianAccountName, symbianFromAddress);
+}
+
+QMessageFolderId addFolderL(const TDesC& symbianAccountName, const TDesC& symbianFolderName)
+{
+ TSmtpAccount account;
+ bool retVal = smtpAccountByName(symbianAccountName, account);
+ Q_UNUSED(retVal)
+
+ CSymbianMessagingSession* pSession = new CSymbianMessagingSession();
+ CleanupStack::PushL(pSession);
+ CMsvEntry* pEntry = CMsvEntry::NewL(*(pSession->ipMsvSession), KDocumentsEntryIdValue, TMsvSelectionOrdering(KMsvNoGrouping,EMsvSortByNone,ETrue));
+ CleanupStack::PushL(pEntry);
+
+ TMsvEntry newFolder;
+ newFolder.iType = KUidMsvFolderEntry;
+ newFolder.iMtm = KUidMsvLocalServiceMtm;
+ newFolder.iServiceId = account.iSmtpService;
+ newFolder.SetReadOnly(EFalse);
+ newFolder.SetVisible(ETrue);
+ newFolder.iDescription.Set(symbianFolderName);
+ newFolder.iDetails.Set(symbianFolderName);
+ newFolder.iDate.HomeTime();
+ pEntry->CreateL(newFolder);
+ TMsvId folderId = newFolder.Id();
+
+ CleanupStack::PopAndDestroy(pEntry);
+ CleanupStack::PopAndDestroy(pSession);
+
+ QString nullString = "00000000";
+ QString serviceEntryIdString = QString::number(account.iRelatedService);
+ serviceEntryIdString = nullString.left(8-serviceEntryIdString.length()) + serviceEntryIdString;
+ QString folderIdString = QString::number(folderId);
+ folderIdString = nullString.left(8-folderIdString.length()) + folderIdString;
+ return addIdPrefix(serviceEntryIdString+folderIdString, SymbianHelpers::EngineTypeMTM);
+}
+
+QMessageFolderId addFolder(const Parameters ¶ms)
+{
+ QString accountName(params["parentAccountName"]);
+ TPtrC16 symbianAccountName(KNullDesC);
+ symbianAccountName.Set(reinterpret_cast<const TUint16*>(accountName.utf16()));
+
+ QString folderName(params["name"]);
+ TPtrC16 symbianFolderName(KNullDesC);
+ symbianFolderName.Set(reinterpret_cast<const TUint16*>(folderName.utf16()));
+
+ QMessageFolderId id;
+ TRAPD(err, id = addFolderL(symbianAccountName, symbianFolderName));
+ Q_UNUSED(err)
+ return id;
+}
+
+QMessageId addMessage(const Parameters ¶ms)
+{
+ return MapiSession::addMessage(params);
+}
+
+}
+