[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