diff -r 64e38f08e49c -r 47d84de1c893 emailuis/nmframeworkadapter/src/nmframeworkadapter.cpp --- 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& mailboxIdList) { NM_FUNCTION; - + QList 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 NmFrameworkAdapter::deleteMailboxById(const NmId& mailboxId) { NM_FUNCTION; + + resetCache(mailboxId); + QPointer 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 folders = currentMailbox->ListFolders(); @@ -664,7 +667,7 @@ QPointer NmFrameworkAdapter::removeDraftMessage(NmMessage *message) { NM_FUNCTION; - + QPointer 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(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( 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* aEntries // aParam2: TFSMailMsgId* aParentFolder - // aParam3: NULL + // aParam3: NULL NmId mailboxId(0); mailboxId = mailbox.GetNmId(); NmId nmMsgId(0); - QList folderIds; + QList folderIds; + resetCache(mailboxId); + RArray* fsEntries = reinterpret_cast*> (param1); - TFSMailMsgId* fsFolderId = reinterpret_cast (param2); - NmId folderId = fsFolderId->GetNmId(); - NmId inputFolderId = NmFrameworkAdapter::getStandardFolderId(mailboxId, NmFolderInbox); + NmId folderId(0); TFSMailMsgId fsMsgId; for(TInt i = 0; i < fsEntries->Count(); i++){