[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdepim/kmail
From: Ingo Klöcker <kloecker () kde ! org>
Date: 2004-05-31 23:07:59
Message-ID: 20040531230759.C83CC126E0 () office ! kde ! org
[Download RAW message or body]
CVS commit by kloecker:
Fix bug 78794 (kmail deletes my email and does not download from pop3). This bug is \
caused by the non-uniqueness of the UIDs on hotpop.com (this broken POP server \
obviously re-uses UIDs) in combination with wrong handling of the UIDs of seen \
messages in KMail. So the following fixes the wrong handling of the UIDs of seen \
messages and thus makes KMail work even with broken POP servers that re-use UIDs. The \
general idea is to only remember the UIDs of messages which actually remain on the \
server.
Changes in kmacctexppop.h:
- processRemainingQueuedMessagesAndSaveUidList() is split into \
processRemainingQueuedMessages() and saveUidList().
- QStringList mUidsOfSeenMsgs is removed because it's no longer necessary.
- QStringList uidsOfNextSeenMsgs is replaced by QDict<int> mUidsOfNextSeenMsgsDict \
because we need to remove elements from this list/set in random order.
Changes in kmacctexppop.cpp (hunk by hunk):
- mUidsOfNextSeenMsgsDict must not auto-delete the fake pointers we use as values
- call processRemainingQueuedMessages() and saveUidList() instead of \
processRemainingQueuedMessagesAndSaveUidList()
- instead of the member variable mUidsOfSeenMsgs we use a temporary variable to \
initialize mUidsOfSeenMsgsDict (the set of old seen messages)
- clear mUidsOfNextSeenMsgsDict
- call processRemainingQueuedMessages() and saveUidList() instead of \
processRemainingQueuedMessagesAndSaveUidList()
- mUidsOfNextSeenMsgsDict.insert UID instead of uidsOfNextSeenMsgs.append
- less debug
- resize mUidsOfNextSeenMsgsDict to a reasonable size (number of messages on the \
server + 10% since it's a hash)
- only apply the workaround for servers which don't support the UIDL command; \
otherwise UIDs of messages which are no longer on the server might be added to the \
set of unseen messages for the next check and this will result in not downloading \
messages with re-used UIDs
- don't remove anything from the mUidForIdMap (id -> uid map) because we'll also need \
this map for messages which are not downloaded
- mUidsOfNextSeenMsgsDict.insert UID instead of uidsOfNextSeenMsgs.append
- call only processRemainingQueuedMessages() instead of \
processRemainingQueuedMessagesAndSaveUidList(); the uid list will be saved after the \
Quit stage has finished (because it has to be saved after the deletion of messages \
from the server)
- explicitely set stage to Quit (not really necessary because it's already set in \
processRemainingQueuedMessages() but it's better readable)
- don't clear the list of ids of deleted messages now
- after deletion is finished remove the UIDs of all messages which have been deleted \
from the set of UIDs of seen messages; this is important to make KMail work with \
broken POP servers, but it anyway doesn't made sense to remember the UIDs of messages \
which have been deleted; so this is correct behavior in any case
- now we can clear the list of ids of deleted messages
- now we can call saveUidList() to save the list of UIDs of seen messages
- split processRemainingQueuedMessagesAndSaveUidList() into \
processRemainingQueuedMessages() and saveUidList(); saving is now a bit more \
complicated because we have to create a comma separated list from the set of UIDs of \
seen messages (Why is there no QStringList QDict::keys()?)
- mUidsOfNextSeenMsgsDict.insert UID instead of uidsOfNextSeenMsgs.append and insert \
all (id,uid) pairs into mUidForIdMap instead of only some of them (because we'll need \
all of them)
M +47 -26 kmacctexppop.cpp 1.164
M +8 -5 kmacctexppop.h 1.46
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic