[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