emailuis/nmframeworkadapter/src/nmfwacheckoutboxoperation.cpp
changeset 18 578830873419
child 20 ecc8def7944a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/nmframeworkadapter/src/nmfwacheckoutboxoperation.cpp	Fri Apr 16 14:51:52 2010 +0300
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#include "nmfwacheckoutboxoperation.h"
+#include "nmframeworkadapterheaders.h"
+
+NmFwaCheckOutboxOperation::NmFwaCheckOutboxOperation(
+    const NmId &mailboxId,
+    CFSMailClient &mailClient) :
+        mMailboxId(mailboxId),
+        mMailClient(mailClient),
+        mFound(false),
+        mMessageId(0)
+{
+}
+
+NmFwaCheckOutboxOperation::~NmFwaCheckOutboxOperation()
+{
+    doCancelOperation();
+}
+
+void NmFwaCheckOutboxOperation::runAsyncOperation()
+{
+    TRAPD(err, runAsyncOperationL());
+    
+    if (err) {
+        completeOperation(NmGeneralError);
+    }
+}
+
+/*!
+    Gets the id of the message with index '0' in the Outbox .
+
+    \return true if there is a message in Outbox.
+ */
+bool NmFwaCheckOutboxOperation::getMessageId(NmId &messageId) const
+{
+    messageId = mMessageId;
+    return mFound;
+}
+
+void NmFwaCheckOutboxOperation::runAsyncOperationL()
+{
+    int err = NmNotFoundError;
+
+    TFSMailMsgId mailboxId(mMailboxId.pluginId32(), mMailboxId.id32());
+    
+    CFSMailBox *mailbox = mMailClient.GetMailBoxByUidL(mailboxId);
+    
+    if (mailbox) {
+        CleanupStack::PushL(mailbox);
+    
+        TFSMailMsgId folderId = mailbox->GetStandardFolderId(EFSOutbox);
+
+        CFSMailFolder *folder =
+            mMailClient.GetFolderByUidL(mailboxId, folderId);
+
+        if (folder) {
+            CleanupStack::PushL(folder);
+
+            TFSMailSortCriteria sortCriteria;
+            sortCriteria.iField = EFSMailSortByDate;
+            sortCriteria.iOrder = EFSMailDescending;
+            
+            RArray<TFSMailSortCriteria> sortArray;
+            CleanupClosePushL(sortArray);
+            sortArray.AppendL(sortCriteria);
+            
+            MFSMailIterator *iter = folder->ListMessagesL(
+                EFSMsgDataIdOnly, sortArray);
+            
+            CleanupStack::PopAndDestroy(); // sortArray
+
+            if (iter) {
+                CleanupDeletePushL(iter);
+
+                TFSMailMsgId nullId;
+                TInt numberOfItems = 1;
+                RPointerArray<CFSMailMessage> messages;
+
+                CleanupClosePushL(messages);
+                TBool unused = iter->NextL(nullId, numberOfItems, messages);
+
+                if (messages.Count() > 0) {
+                    mMessageId = messages[0]->GetMessageId().GetNmId();
+                    mFound = true;
+                }
+
+                messages.ResetAndDestroy();
+                CleanupStack::PopAndDestroy(); // messages
+
+                CleanupStack::PopAndDestroy(iter);
+                
+                err = NmNoError;
+            }
+            CleanupStack::PopAndDestroy(folder);
+        }
+        CleanupStack::PopAndDestroy(mailbox);
+    }
+
+    completeOperation(err);
+}