emailuis/nmframeworkadapter/src/nmframeworkadapter.cpp
changeset 65 478bc57ad291
parent 59 16ed8d08d0b1
child 66 084b5b1f02a7
--- a/emailuis/nmframeworkadapter/src/nmframeworkadapter.cpp	Wed Aug 18 09:37:47 2010 +0300
+++ b/emailuis/nmframeworkadapter/src/nmframeworkadapter.cpp	Thu Sep 02 20:15:00 2010 +0300
@@ -91,7 +91,7 @@
     QList<NmMailbox*> mailboxList;
     int ret = listMailboxes(mailboxList);
 
-    if ( ret == NmNoError ) {
+    if (ret == NmNoError) {
         QListIterator<NmMailbox*> iterator(mailboxList);
         while (iterator.hasNext()) {
             NmMailbox *box = iterator.next();
@@ -121,12 +121,12 @@
 
     //if id.IsNullId(), mailboxes are listed from all plugins.
     //otherwise, only from the given one.
-    TInt rcode = mFSfw->ListMailBoxes(id,mailBoxes);
+    TInt rcode = mFSfw->ListMailBoxes(id, mailBoxes);
 
-    if ( rcode == NmNoError ) {
+    if (rcode == NmNoError) {
         // convert mailbox data to QT classes
-        NmMailbox* box(0);
-        for(TInt i=0;i<mailBoxes.Count();i++) {
+        NmMailbox *box(NULL);
+        for (TInt i(0) ; i < mailBoxes.Count(); i++) {
             box = NULL;
             if (mailBoxes[i]) {
                 box = mailBoxes[i]->GetNmMailbox();
@@ -136,7 +136,7 @@
                 }
             }
         }
-	mailBoxes.ResetAndDestroy();
+    mailBoxes.ResetAndDestroy();
     return rcode;
 }
 
@@ -186,37 +186,31 @@
 
     \return Error code.
  */
-int NmFrameworkAdapter::getFolderById( const NmId& mailboxId, const NmId& folderId, NmFolder*& folder )
-    {
+int NmFrameworkAdapter::getFolderById(const NmId& mailboxId, const NmId& folderId, NmFolder*& folder)
+{
     NM_FUNCTION;
 
-    TRAPD(err, getFolderByIdL( mailboxId, folderId, folder ) );
+    TRAPD(err, getFolderByIdL(mailboxId, folderId, folder));
     return err;
-    }
+}
 
 /*!
     Leaving version of getFolderById function
  */
-void NmFrameworkAdapter::getFolderByIdL( const NmId& mailboxId, const NmId& folderId, NmFolder*& folder )
-    {
+void NmFrameworkAdapter::getFolderByIdL(const NmId& mailboxId, const NmId& folderId, NmFolder*& folder)
+{
     NM_FUNCTION;
 
     CFSMailFolder* fsFolder(NULL);
-	if (mFSfw)
-		{
-    	fsFolder = mFSfw->GetFolderByUidL(TFSMailMsgId(mailboxId), TFSMailMsgId(folderId));
-    	if (fsFolder)
-        	{
-        	folder = fsFolder->GetNmFolder();
-        	delete fsFolder;
-        	fsFolder = NULL;
-        	}
-    	else
-    	    {
-            User::Leave(KErrNotFound);
-    	    }
-		}
+    fsFolder = mFSfw->GetFolderByUidL(TFSMailMsgId(mailboxId), TFSMailMsgId(folderId));
+    if (fsFolder) {
+        folder = fsFolder->GetNmFolder();
+        delete fsFolder;
+        fsFolder = NULL;
+    } else {
+        User::Leave(KErrNotFound);
     }
+}
 
 
 /*!
@@ -238,7 +232,7 @@
 {
     NM_FUNCTION;
 
-    TRAPD(err, getMessageByIdL(mailboxId,folderId,messageId,message));
+    TRAPD(err, getMessageByIdL(mailboxId, folderId, messageId, message));
     return err;
 }
 
@@ -267,6 +261,8 @@
 
         message->removeAllChildParts();
         childrenToNmMessagePartL(newMessage, message);
+        delete newMessage;
+        newMessage = NULL;
     }
     else {
         User::Leave(KErrNotFound);
@@ -276,29 +272,30 @@
 /*!
     Returns list of folders in a mailbox.
 
-	\param mailboxId Id of the mailbox containing the folder.
-	\param folderList Reference to a pointer list to receive pointers to the folders.
+  \param mailboxId Id of the mailbox containing the folder.
+  \param folderList Reference to a pointer list to receive pointers to the folders.
 
-	\return Error code.
+  \return Error code.
  */
 int NmFrameworkAdapter::listFolders(
     const NmId& mailboxId,
     QList<NmFolder*>& folderList)
 {
     NM_FUNCTION;
-
-    CFSMailBox* currentMailbox = NULL;
-    TRAPD (err, currentMailbox = mFSfw->GetMailBoxByUidL(mailboxId));
-    if (KErrNone == err) {
+    int err(NmNoError);
+    CFSMailBox* currentMailbox(NULL); 
+    TRAP(err, currentMailbox = mFSfw->GetMailBoxByUidL(mailboxId));
+    if (KErrNone == err && currentMailbox) {
         RPointerArray<CFSMailFolder> folders = currentMailbox->ListFolders();
         for (int i = 0; i < folders.Count(); i++) {
             folderList.append(folders[i]->GetNmFolder());
         }
-        return KErrNone;
+        delete currentMailbox;
+        currentMailbox = NULL;
+    } else {
+        err = NmNotFoundError;
     }
-    else {
-        return err;
-    }
+    return err;
 }
 
 
@@ -316,11 +313,7 @@
      const int maxEnvelopeCount)
 {
     NM_FUNCTION;
-
-    if (!folder || maxEnvelopeCount < 1) {
-        return;
-    }
-
+    // validity of input parameters is checked in calling function
     int blockSize = NmListMessagesBlock;
     int maxItemCount = NmMaxItemsInMessageList;
 
@@ -428,7 +421,7 @@
 {
     NM_FUNCTION;
 
-    TInt err = KErrNone;
+    TInt err(KErrNone);
     TRAP(err, listMessagesL(mailboxId,folderId, messageEnvelopeList,maxAmountOfEnvelopes) );
     return err;
 }
@@ -507,7 +500,7 @@
 {
     NM_FUNCTION;
 
-    CFSMailBox * currentMailbox(NULL);
+    CFSMailBox* currentMailbox(NULL);
     CFSMailFolder* folder(NULL);
 
     //If we are requesting 0 or less mails so we can return
@@ -647,6 +640,8 @@
 
     if (err == KErrNone && mailbox) {
         mailbox->CancelSearch();
+        delete mailbox;
+        mailbox = NULL;
     }
 
     return err;
@@ -730,6 +725,7 @@
     mailbox = mFSfw->GetMailBoxByUidL(mailboxId);
 
     if (mailbox) {
+        CleanupStack::PushL(mailbox);
         RPointerArray<TDesC> strings;
         CleanupResetAndDestroy<TDesC>::PushL(strings);
 
@@ -751,6 +747,7 @@
         // Clean up.
         strings.ResetAndDestroy();
         CleanupStack::Pop(&strings);
+        CleanupStack::PopAndDestroy(mailbox);
     }
 }
 
@@ -846,12 +843,12 @@
     TFSMailMsgId fsMsgId(messageId);
     TFSMailMsgId fsMsgPartId(messagePartId);
 
-    CFSMailMessage* fsMessage = NULL;
-    int error = KErrNone;
+    CFSMailMessage* fsMessage(NULL);
+    int error(KErrNone);
     TRAP(error, fsMessage = mFSfw->GetMessageByUidL(fsMboxId, fsFolderId,
             fsMsgId, details) );
 
-    CFSMailMessagePart* fsMessagePart = NULL;
+    CFSMailMessagePart* fsMessagePart(NULL);
     if (fsMessage && error == KErrNone) {
         TRAP(error, fsMessagePart = fsMessage->ChildPartL(fsMsgPartId) );
 
@@ -860,6 +857,10 @@
         RFile file = fsMessagePart->GetContentFileL();
         retFile.setHandle(file);
     }
+    delete fsMessagePart;
+    fsMessagePart = NULL;
+    delete fsMessage;
+    fsMessage = NULL;
     return retFile;
 }
 
@@ -879,34 +880,34 @@
 
     TFSMailMsgId folderId;
     NmId resultId(0);
-    CFSMailBox * currentMailbox(NULL);
+    CFSMailBox* currentMailbox(NULL);
 
-    TRAPD(error, currentMailbox = mFSfw->GetMailBoxByUidL(mailboxId) );
+    TRAPD(error, currentMailbox = mFSfw->GetMailBoxByUidL(mailboxId));
 
-    if( !currentMailbox || error != KErrNone ) {
-    	return resultId;
+    if(!currentMailbox || error != KErrNone) {
+      return resultId;
     }
 
     switch(folderType) {
-    	case NmFolderInbox:
-    		folderId = currentMailbox->GetStandardFolderId( EFSInbox );
-    		break;
-    	case NmFolderOutbox:
-    		folderId = currentMailbox->GetStandardFolderId( EFSOutbox );
-    		break;
-    	case NmFolderDrafts:
-    		folderId = currentMailbox->GetStandardFolderId( EFSDraftsFolder );
-    		break;
-    	case NmFolderSent:
-    		folderId = currentMailbox->GetStandardFolderId( EFSSentFolder );
-    		break;
-    	case NmFolderDeleted:
-    		folderId = currentMailbox->GetStandardFolderId( EFSDeleted );
-    		break;
-    	case NmFolderOther:
-    	default:
-    		folderId = currentMailbox->GetStandardFolderId( EFSOther );
-    		break;
+      case NmFolderInbox:
+        folderId = currentMailbox->GetStandardFolderId(EFSInbox);
+        break;
+      case NmFolderOutbox:
+        folderId = currentMailbox->GetStandardFolderId(EFSOutbox);
+        break;
+      case NmFolderDrafts:
+        folderId = currentMailbox->GetStandardFolderId(EFSDraftsFolder);
+        break;
+      case NmFolderSent:
+        folderId = currentMailbox->GetStandardFolderId(EFSSentFolder);
+        break;
+      case NmFolderDeleted:
+        folderId = currentMailbox->GetStandardFolderId(EFSDeleted);
+        break;
+      case NmFolderOther:
+      default:
+        folderId = currentMailbox->GetStandardFolderId(EFSOther);
+        break;
     }
 
     delete currentMailbox;
@@ -929,7 +930,7 @@
     NM_FUNCTION;
     
     TRAPD(err, RefreshMailboxL(mailboxId)); // return value not used
-    return ( err == KErrNone ) ? NmNoError : NmGeneralError;
+    return (err == KErrNone) ? NmNoError : NmGeneralError;
 }
 
 /*!
@@ -943,7 +944,7 @@
     NM_FUNCTION;
     
     TRAPD(err, GoOnlineL(mailboxId)); // return value not used
-    return ( err == KErrNone ) ? NmNoError : NmGeneralError;
+    return (err == KErrNone) ? NmNoError : NmGeneralError;
 }
 
 /*!
@@ -957,7 +958,7 @@
     NM_FUNCTION;
     
     TRAPD(err, GoOfflineL(mailboxId)); // return value not used
-    return ( err == KErrNone ) ? NmNoError : NmGeneralError;
+    return (err == KErrNone) ? NmNoError : NmGeneralError;
 }
 
 /*!
@@ -1000,7 +1001,7 @@
     cfsPart->SetFolderId(TFSMailMsgId(folderId));
     QString contentType = messagePart.contentType();
 
-    if (cfsPart && contentType.startsWith(NmContentTypeTextPlain)) {
+    if (contentType.startsWith(NmContentTypeTextPlain)) {
         // add 1 for max size for zero termination and prevend 0 size hbufc
         HBufC* data = HBufC::NewLC(cfsPart->FetchedContentSize()+1);
         TPtr dataPtr = data->Des();
@@ -1009,8 +1010,7 @@
         cfsPart->GetContentToBufferL(dataPtr, startOffset);
         messagePart.setTextContent(NmConverter::toQString(dataPtr), contentType);
         CleanupStack::PopAndDestroy(data);
-    }
-    else if (cfsPart){
+    } else {
         RFile file = cfsPart->GetContentFileL();
         TInt fileSize = 0;
         file.Size(fileSize);
@@ -1024,7 +1024,7 @@
                 User::LeaveIfError(file.Read(dataPtr));
             }
 
-            if (contentType.startsWith(NmContentTypeTextHtml) || contentType.contains( NmContentDescrAttachmentHtml )) {
+            if (contentType.startsWith(NmContentTypeTextHtml) || contentType.contains( NmContentDescrAttachmentHtml)) {
                 QRegExp rxlen("(?:charset=)(?:\"?)([\\-\\_a-zA-Z0-9]+)", Qt::CaseInsensitive);
                 QString charset;
                 int pos = rxlen.indexIn(contentType);
@@ -1038,8 +1038,7 @@
                 }
                 QString encodedStr = codec->toUnicode(msgBytes);
                 messagePart.setTextContent(encodedStr, contentType);
-            }
-            else {
+            } else {
                 messagePart.setBinaryContent(QByteArray(
                         reinterpret_cast<const char*>(dataPtr.Ptr()), fileSize), contentType);
             }
@@ -1047,11 +1046,6 @@
         }
         file.Close();
     }
-    else {
-        // null cfsPart
-        User::Leave(KErrNotFound);
-    }
-
     CleanupStack::PopAndDestroy(cfsPart);
 }
 
@@ -1065,17 +1059,17 @@
     \return Error code.
  */
 int NmFrameworkAdapter::deleteMessages(
-	const NmId &mailboxId,
-	const NmId &folderId,
-	const QList<NmId> &messageIdList)
+    const NmId &mailboxId,
+    const NmId &folderId,
+    const QList<NmId> &messageIdList)
 {
     NM_FUNCTION;
 
-    TInt err = NmNoError;
+    TInt err(NmNoError);
     RArray<TFSMailMsgId> messageIds;
-    for (TInt i=0; i<messageIdList.size(); i++) {
+    for (TInt i(0); i < messageIdList.size(); i++) {
         err = messageIds.Append(TFSMailMsgId(messageIdList[i]));
-        if (err!=NmNoError) {
+        if (err != NmNoError) {
             break;
         }
     }
@@ -1084,7 +1078,7 @@
     }
     messageIds.Close();
 
-    return ( err == NmNoError ) ? NmNoError : NmGeneralError;
+    return (err == NmNoError) ? NmNoError : NmGeneralError;
 }
 
 /*!
@@ -1097,9 +1091,9 @@
     \return NmStoreEnvelopesOperation
  */
 QPointer<NmStoreEnvelopesOperation> NmFrameworkAdapter::storeEnvelopes(
-	const NmId &mailboxId,
-	const NmId &folderId,
-	const QList<const NmMessageEnvelope*> &envelopeList)
+    const NmId &mailboxId,
+    const NmId &folderId,
+    const QList<const NmMessageEnvelope*> &envelopeList)
 {
     NM_FUNCTION;
 
@@ -1108,7 +1102,7 @@
     QPointer<NmStoreEnvelopesOperation> operation(NULL);
     RPointerArray<CFSMailMessage> envelopeMessages;
 
-    int count = envelopeList.count();
+    int count(envelopeList.count());
     for(int i(0); i < count; i++) {
         TRAP_IGNORE(envelopeMessages.AppendL(mailMessageFromEnvelopeL(*envelopeList.at(i))));
     }
@@ -1242,7 +1236,8 @@
         // void messageEvent(
         //      NmMessageEvent event,
         //      const NmId &folderId,
-        //      QList<NmId> &messageIds);
+        //      QList<NmId> &messageIds
+        //      const NmId& mailboxId);
         //
         // enum NmMessageEvent
         //   NmMessageCreated,
@@ -1315,7 +1310,7 @@
             else {
                 emit connectionEvent(Disconnected, id, NmNoError);
             }
-			}
+      }
             break;
 
         default:
@@ -1364,6 +1359,19 @@
 }
 
 /*!
+    Gets the signature for the given mailbox.
+
+    \param mailboxId Id of the mailbox.
+*/
+int NmFrameworkAdapter::getSignature(const NmId &mailboxId, QString *&signature)
+{
+    NM_FUNCTION;
+    TRAPD(error, getSignatureL(mailboxId, signature));
+    
+    return error;
+}
+
+/*!
     Subscribe to events from a mailbox.
 
     \param mailboxId Id of the mailbox.
@@ -1387,25 +1395,6 @@
     mFSfw->UnsubscribeMailboxEvents(mailboxId, *this);
 }
 
-NmId NmFrameworkAdapter::getMailboxIdByMailMsgId(TFSMailMsgId mailbox)
-{
-    NM_FUNCTION;
-    
-    NmId nmId(0);
-
-    QList<NmId> mailboxIds;
-    listMailboxIds(mailboxIds);
-
-    QListIterator<NmId> iterator(mailboxIds);
-    while (iterator.hasNext()) {
-        nmId = iterator.next();
-        if (nmId.id32() == mailbox.Id()) {
-            break;
-        }
-    }
-    mailboxIds.clear();
-    return nmId;
-}
 
 /*!
     Leaving version of removeMessage
@@ -1435,31 +1424,51 @@
     const NmId& destinationFolderId)
 {
     NM_FUNCTION;
-
+    TInt count(messageIds.count());
+    if (!count) {
+        return;
+    }
     RArray<TFSMailMsgId> messages;
     RArray<TFSMailMsgId> copiedMessages;
 
     CleanupClosePushL(messages);
     CleanupClosePushL(copiedMessages);
 
-    for (TInt i = 0; i < messageIds.count(); i++) {
+    for (TInt i = 0; i < count; i++) {
         NmId tmpId(messageIds[i]);
         messages.AppendL(TFSMailMsgId(tmpId));
     }
 
-    CFSMailBox* mailBox = NULL;
+    CFSMailBox* mailBox(NULL);
     mailBox = mFSfw->GetMailBoxByUidL(mailboxId);
     if (mailBox) {
         mailBox->CopyMessagesL(messages, copiedMessages,
             TFSMailMsgId(sourceFolderId),
             TFSMailMsgId(destinationFolderId));
         delete mailBox;
+        mailBox = NULL;
+    } else {
+        User::Leave(NmNotFoundError);
     }
-
     CleanupStack::PopAndDestroy(2,&messages);
 }
 
 /*!
+    Leaving version of getSignature
+*/
+void NmFrameworkAdapter::getSignatureL(const NmId &mailboxId, QString *&signature)
+{
+    NM_FUNCTION;
+    
+    HBufC *sig = mFSfw->GetSignatureL(TFSMailMsgId(mailboxId));
+
+    if (sig) {
+        signature = new QString(NmConverter::toQString(*sig));
+    }
+}
+
+
+/*!
    Sends the given message.
  */
 QPointer<NmMessageSendingOperation> NmFrameworkAdapter::sendMessage(
@@ -1468,7 +1477,7 @@
     NM_FUNCTION;
 
     QPointer<NmMessageSendingOperation>oper = new NmFwaMessageSendingOperation(*this, message, *mFSfw);
-	return oper;
+    return oper;
 }
 
 /*!
@@ -1509,6 +1518,7 @@
    if (KErrNone == err && mailBox) {
        TSSMailSyncState syncState = mailBox->CurrentSyncState();
        delete mailBox;
+       mailBox = NULL;
        if (EmailSyncing == syncState) {
            return Synchronizing;
        }
@@ -1528,11 +1538,12 @@
 {
     NM_FUNCTION;
 
-    CFSMailBox* mailBox = NULL;
+    CFSMailBox* mailBox(NULL);
     TRAPD(err, mailBox = mFSfw->GetMailBoxByUidL(TFSMailMsgId(mailboxId)) );
     if (KErrNone == err && mailBox) {
         TFSMailBoxStatus status = mailBox->GetMailBoxStatus();
         delete mailBox;
+        mailBox = NULL;
         if (status == EFSMailBoxOnline) {
             return Connected;
         }
@@ -1603,7 +1614,6 @@
         CleanupStack::PushL(currentMailbox);
         result = currentMailbox->RefreshNowL();
         CleanupStack::PopAndDestroy(currentMailbox);
-        currentMailbox = NULL;
     }
     return result;
 }
@@ -1622,7 +1632,6 @@
         CleanupStack::PushL(currentMailbox);
         currentMailbox->GoOnlineL();
         CleanupStack::PopAndDestroy(currentMailbox);
-        currentMailbox = NULL;
     }
     return result;
 }
@@ -1634,14 +1643,13 @@
 {
     NM_FUNCTION;
 
-	int result(KErrNotFound);
+    int result(KErrNotFound);
     CFSMailBox *currentMailbox(NULL);
     currentMailbox = mFSfw->GetMailBoxByUidL(mailboxId);
     if(currentMailbox) {
         CleanupStack::PushL(currentMailbox);
-		currentMailbox->GoOfflineL();
+        currentMailbox->GoOfflineL();
         CleanupStack::PopAndDestroy(currentMailbox);
-        currentMailbox = NULL;
     }
     return result;
 }
@@ -1649,19 +1657,12 @@
 /*!
    handles mailbox related events
  */
-void NmFrameworkAdapter::handleMailboxEvent( TFSMailMsgId mailbox, NmMailboxEvent event)
+void NmFrameworkAdapter::handleMailboxEvent(TFSMailMsgId mailbox, NmMailboxEvent event)
 {
     NM_FUNCTION;
 
     QList<NmId> mailboxIds;
-    NmId nmId;
-    if (event == NmMailboxDeleted || 
-        event == NmMailboxCreated ||
-        event == NmMailboxChanged) {
-		nmId = mailbox.GetNmId();
-    } else {
-		nmId = getMailboxIdByMailMsgId(mailbox);
-    }
+    NmId nmId = mailbox.GetNmId();
     mailboxIds.append(nmId);
     emit mailboxEvent(event, mailboxIds);
     }