[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