[prev in list] [next in list] [prev in thread] [next in thread]
List: kmail-devel
Subject: [PATCH] increase moveMsg performance
From: Carsten Burghardt <cb () magic-shop ! de>
Date: 2002-08-25 17:58:19
[Download RAW message or body]
Hi,
at the moment the destination folder of an imap moveMsg is downloaded
(getFolder) after each operation. This is too time-consuming.
The attached patch does 2 things:
- just increment the cached total-count for the total-column
- the destination-folder is not opened/closed for this because the message is
only added on the server. This improves performance and is needed because
otherwise the cached total-count would be overwritten with an old value.
By the way: this is no feature ;-)
--
Regards,
Carsten Burghardt
["movemsg.diff" (text/x-diff)]
Index: kmheaders.cpp
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmheaders.cpp,v
retrieving revision 1.436
diff -u -3 -p -r1.436 kmheaders.cpp
--- kmheaders.cpp 2002/08/25 13:22:14 1.436
+++ kmheaders.cpp 2002/08/25 17:52:49
@@ -1742,10 +1742,13 @@ void KMHeaders::moveMsgToFolder (KMFolde
this,SLOT(highlightMessage(QListViewItem*)));
kernel->kbp()->busy();
- if (destFolder && destFolder->open() != 0)
+ if (destFolder && destFolder->protocol() != "imap")
{
- kernel->kbp()->idle();
- return;
+ // no need to open with imap
+ if (destFolder->open() != 0) {
+ kernel->kbp()->idle();
+ return;
+ }
}
int contentX, contentY;
@@ -1832,7 +1835,9 @@ void KMHeaders::moveMsgToFolder (KMFolde
connect(this,SIGNAL(currentChanged(QListViewItem*)),
this,SLOT(highlightMessage(QListViewItem*)));
- if (destFolder) {
+ if (destFolder && destFolder->protocol() != "imap")
+ {
+ // no need for imap
destFolder->sync();
destFolder->close();
}
Index: kmfolder.cpp
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmfolder.cpp,v
retrieving revision 1.226
diff -u -3 -p -r1.226 kmfolder.cpp
--- kmfolder.cpp 2002/07/29 09:21:01 1.226
+++ kmfolder.cpp 2002/08/25 17:52:50
@@ -979,15 +979,19 @@ int KMFolder::moveMsg(QPtrList<KMMessage
assert(aMsg != NULL);
msgParent = aMsg->parent();
- if (msgParent)
- msgParent->open();
+ if (protocol() != "imap") {
+ if (msgParent)
+ msgParent->open();
- open();
+ open();
+ }
rc = static_cast<KMFolderImap*>(this)->addMsg(msglist, aIndex_ret);
- close();
+ if (protocol() != "imap") {
+ close();
- if (msgParent)
- msgParent->close();
+ if (msgParent)
+ msgParent->close();
+ }
return rc;
}
Index: kmfolderimap.cpp
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmfolderimap.cpp,v
retrieving revision 1.66
diff -u -3 -p -r1.66 kmfolderimap.cpp
--- kmfolderimap.cpp 2002/08/23 05:37:19 1.66
+++ kmfolderimap.cpp 2002/08/25 17:52:51
@@ -168,12 +168,20 @@ void KMFolderImap::addMsgQuiet(KMMessage
if (folder) kernel->undoStack()->pushAction( aMsg->getMsgSerNum(), folder, this );
if (folder) folder->take(folder->find(aMsg));
delete aMsg;
- getFolder();
+ if (mIsSelected) {
+ // folder is selected, so we can fetch the (new) content
+ getFolder();
+ } else {
+ // increase the cached count
+ ++mTotalMsgs;
+ emit msgAdded(static_cast<KMFolder*>(this));
+ }
}
//-----------------------------------------------------------------------------
void KMFolderImap::addMsgQuiet(QPtrList<KMMessage> msgList)
{
+ int count = msgList.count();
KMFolder *folder = msgList.first()->parent();
for ( KMMessage* msg = msgList.first(); msg; msg = msgList.next() )
{
@@ -182,7 +190,14 @@ void KMFolderImap::addMsgQuiet(QPtrList<
if (folder) folder->take(msgList);
msgList.setAutoDelete(true);
msgList.clear();
- getFolder();
+ if (mIsSelected) {
+ // folder is selected, so we can fetch the (new) content
+ getFolder();
+ } else {
+ // increase the cached count
+ mTotalMsgs += count;
+ emit msgAdded(static_cast<KMFolder*>(this));
+ }
}
//-----------------------------------------------------------------------------
Index: kmfoldertree.cpp
===================================================================
RCS file: /home/kde/kdenetwork/kmail/kmfoldertree.cpp,v
retrieving revision 1.193
diff -u -3 -p -r1.193 kmfoldertree.cpp
--- kmfoldertree.cpp 2002/08/23 05:37:19 1.193
+++ kmfoldertree.cpp 2002/08/25 17:52:51
@@ -450,13 +450,14 @@ void KMFolderTree::reload(bool openFolde
this,SLOT(slotUpdateCounts(KMFolderImap*, bool)));
connect(fti->folder(), SIGNAL(folderComplete(KMFolderImap*, bool)),
this,SLOT(slotUpdateCounts(KMFolderImap*, bool)));
- } else {
- // others-only, imap doesn't need this because of the folderComplete-signal
- disconnect(fti->folder(), SIGNAL(msgAdded(KMFolder*)),
- this,SLOT(slotUpdateCounts(KMFolder*)));
- connect(fti->folder(), SIGNAL(msgAdded(KMFolder*)),
- this,SLOT(slotUpdateCounts(KMFolder*)));
}
+ // msgAdded
+ disconnect(fti->folder(), SIGNAL(msgAdded(KMFolder*)),
+ this,SLOT(slotUpdateCounts(KMFolder*)));
+ connect(fti->folder(), SIGNAL(msgAdded(KMFolder*)),
+ this,SLOT(slotUpdateCounts(KMFolder*)));
+
+ // msgRemoved
disconnect(fti->folder(), SIGNAL(msgRemoved(KMFolder*)),
this,SLOT(slotUpdateCounts(KMFolder*)));
connect(fti->folder(), SIGNAL(msgRemoved(KMFolder*)),
_______________________________________________
KMail Developers mailing list
kmail@mail.kde.org
http://mail.kde.org/mailman/listinfo/kmail
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic