emailuis/nmframeworkadapter/src/nmframeworkadapter.cpp
changeset 75 47d84de1c893
parent 72 64e38f08e49c
child 74 6c59112cfd31
--- a/emailuis/nmframeworkadapter/src/nmframeworkadapter.cpp	Fri Sep 17 08:27:21 2010 +0300
+++ b/emailuis/nmframeworkadapter/src/nmframeworkadapter.cpp	Mon Oct 04 00:05:37 2010 +0300
@@ -43,7 +43,7 @@
   mStateExtension(NULL)
 {
     NM_FUNCTION;
-    
+
     // get s60 email framework
     TRAP_IGNORE(mFSfw = CFSMailClient::NewL());
 
@@ -58,12 +58,12 @@
 NmFrameworkAdapter::~NmFrameworkAdapter()
 {
     NM_FUNCTION;
-    
+
     delete mCurrentMailBox;
     mCurrentMailBox = NULL;
-    
-    mStateExtension = NULL;    
-    
+
+    mStateExtension = NULL;
+
     if (mSearchObserver) {
         delete mSearchObserver;
         mSearchObserver = NULL;
@@ -87,7 +87,7 @@
 int NmFrameworkAdapter::listMailboxIds(QList<NmId>& mailboxIdList)
 {
     NM_FUNCTION;
-    
+
     QList<NmMailbox*> mailboxList;
     int ret = listMailboxes(mailboxList);
 
@@ -151,7 +151,7 @@
 int NmFrameworkAdapter::getMailboxById(const NmId& id, NmMailbox*& mailbox)
 {
     NM_FUNCTION;
-    
+
     const TFSMailMsgId mailMsgId(id.pluginId32(), id.id32());
     CFSMailBox *box(NULL);
     TRAPD(err, box = mFSfw->GetMailBoxByUidL(mailMsgId));
@@ -173,6 +173,9 @@
 QPointer<NmOperation> NmFrameworkAdapter::deleteMailboxById(const NmId& mailboxId)
 {
     NM_FUNCTION;
+
+    resetCache(mailboxId);
+
     QPointer<NmOperation> oper = new NmFwaDeleteMailboxOperation(mailboxId, *mFSfw);
     return oper;
 }
@@ -283,7 +286,7 @@
 {
     NM_FUNCTION;
     int err(NmNoError);
-    CFSMailBox* currentMailbox(NULL); 
+    CFSMailBox* currentMailbox(NULL);
     TRAP(err, currentMailbox = mFSfw->GetMailBoxByUidL(mailboxId));
     if (KErrNone == err && currentMailbox) {
         RPointerArray<CFSMailFolder> folders = currentMailbox->ListFolders();
@@ -664,7 +667,7 @@
 QPointer<NmOperation> NmFrameworkAdapter::removeDraftMessage(NmMessage *message)
 {
     NM_FUNCTION;
-    
+
     QPointer<NmOperation> oper = new NmFwaRemoveDraftMessageOperation(*this, message, *mFSfw);
     return oper;
 }
@@ -878,6 +881,13 @@
 {
     NM_FUNCTION;
 
+	// Use cached inbox ID when available
+    if (folderType==NmFolderInbox &&
+        mailboxId==mCachedMailboxId &&
+        mCachedInboxId!=0) {
+        return mCachedInboxId;
+    }
+
     TFSMailMsgId folderId;
     NmId resultId(0);
     CFSMailBox* currentMailbox(NULL);
@@ -916,10 +926,29 @@
     resultId.setPluginId32(static_cast<quint32>(folderId.PluginId().iUid));
     resultId.setId32(folderId.Id());
 
+    // Store cached inbox ID
+    if (folderType==NmFolderInbox) {
+        mCachedMailboxId = mailboxId;
+        mCachedInboxId = resultId;
+    }
+
     return resultId;
 }
 
 /*!
+    Reset cache for the specific mailbox
+
+    \param mailboxId id of the mailbox that cache will be reseted
+*/
+void NmFrameworkAdapter::resetCache(const NmId &mailboxId)
+{
+	if (mailboxId==mCachedMailboxId) {
+        mCachedMailboxId=0;
+        mCachedInboxId=0;
+	}
+}
+
+/*!
     Connect to mailbox if not already connected and refresh.
 
     \param mailboxId Id of the mailbox.
@@ -928,7 +957,9 @@
 int NmFrameworkAdapter::refreshMailbox(NmId mailboxId)
 {
     NM_FUNCTION;
-    
+
+    resetCache(mailboxId);
+
     TRAPD(err, RefreshMailboxL(mailboxId)); // return value not used
     return (err == KErrNone) ? NmNoError : NmGeneralError;
 }
@@ -942,7 +973,7 @@
 int NmFrameworkAdapter::goOnline(const NmId& mailboxId)
 {
     NM_FUNCTION;
-    
+
     TRAPD(err, GoOnlineL(mailboxId)); // return value not used
     return (err == KErrNone) ? NmNoError : NmGeneralError;
 }
@@ -956,7 +987,7 @@
 int NmFrameworkAdapter::goOffline(const NmId& mailboxId)
 {
     NM_FUNCTION;
-    
+
     TRAPD(err, GoOfflineL(mailboxId)); // return value not used
     return (err == KErrNone) ? NmNoError : NmGeneralError;
 }
@@ -1222,11 +1253,11 @@
             break;
 
         // Folder related events:
-        case TFSEventFoldersDeleted:                 
+        case TFSEventFoldersDeleted:
             handleFoldersEvent(param1, param2, NmFolderIsDeleted, mailbox);
             break;
         case TFSEventNewFolder:
-            handleFoldersEvent(param1, param2, NmFolderIsCreated, mailbox);            
+            handleFoldersEvent(param1, param2, NmFolderIsCreated, mailbox);
             break;
 
         // Mailbox related events:
@@ -1305,7 +1336,7 @@
             emit connectionEvent(Connected, id, NmNoError);
             }
             break;
-            
+
         // param1: errorcode
         case TFSEventMailboxOffline: {
             NmId id = NmConverter::mailMsgIdToNmId(mailbox);
@@ -1377,7 +1408,7 @@
 {
     NM_FUNCTION;
     TRAPD(error, getSignatureL(mailboxId, signature));
-    
+
     return error;
 }
 
@@ -1389,7 +1420,7 @@
 void NmFrameworkAdapter::subscribeMailboxEvents(const NmId& mailboxId)
 {
     NM_FUNCTION;
-    
+
     TRAP_IGNORE(mFSfw->SubscribeMailboxEventsL(mailboxId, *this));
 }
 
@@ -1401,7 +1432,7 @@
 void NmFrameworkAdapter::unsubscribeMailboxEvents(const NmId& mailboxId)
 {
     NM_FUNCTION;
-    
+
     mFSfw->UnsubscribeMailboxEvents(mailboxId, *this);
 }
 
@@ -1469,7 +1500,7 @@
 void NmFrameworkAdapter::getSignatureL(const NmId &mailboxId, QString *&signature)
 {
     NM_FUNCTION;
-    
+
     HBufC *sig = mFSfw->GetSignatureL(TFSMailMsgId(mailboxId));
 
     if (sig) {
@@ -1756,7 +1787,7 @@
 void NmFrameworkAdapter::handleSyncstateEvent(TAny* param1, TFSMailMsgId mailbox)
 {
     NM_FUNCTION;
-    
+
     TSSMailSyncState* state = static_cast<TSSMailSyncState*>( param1 );
     NmOperationCompletionEvent event;
     event.mMailboxId = NmConverter::mailMsgIdToNmId(mailbox);
@@ -1766,12 +1797,14 @@
         {
         case StartingSync:
             {
+            NM_TIMESTAMP("Sync started.");
             event.mCompletionCode = NmNoError;
             emit syncStateEvent(Synchronizing, event);
             break;
             }
         case FinishedSuccessfully:
             {
+            NM_TIMESTAMP("Sync completed successfully.");
             event.mCompletionCode = NmNoError;
             emit syncStateEvent(SyncComplete, event);
             break;
@@ -1813,21 +1846,23 @@
     TAny* param1, TAny* param2, NmFolderEvent event, TFSMailMsgId mailbox)
 {
     NM_FUNCTION;
+    
+    Q_UNUSED(param2);
 
     // aParam1: RArray<TFSMailMsgId>* aEntries
     // aParam2: TFSMailMsgId* aParentFolder
-    // aParam3: NULL      
+    // aParam3: NULL
 
     NmId mailboxId(0);
     mailboxId = mailbox.GetNmId();
 
     NmId nmMsgId(0);
-    QList<NmId> folderIds;    
+    QList<NmId> folderIds;
 
+    resetCache(mailboxId);
+    
     RArray<TFSMailMsgId>* fsEntries = reinterpret_cast<RArray<TFSMailMsgId>*> (param1);
-    TFSMailMsgId* fsFolderId = reinterpret_cast<TFSMailMsgId*> (param2);
-    NmId folderId = fsFolderId->GetNmId();
-    NmId inputFolderId = NmFrameworkAdapter::getStandardFolderId(mailboxId, NmFolderInbox);
+    NmId folderId(0);
 
     TFSMailMsgId fsMsgId;
     for(TInt i = 0; i < fsEntries->Count(); i++){