synchronization could happen if an Exception was thrown while parsing
an untagged response without using executeSimpleCommand. For
instance, while doing a fetch. Once synchronization was lost, later
commands would fail in surprising ways. One manifestation of such
failures was spontaneously emptying of folders when search results
were not returned properly. The new code makes sure to only accept OK
responses with the tag of the command, and discards the untagged
responses from previous command.
Issue 201
Issue 224
Issue 342
Handle untagged EXISTS messages at any time. Should increase
synchronization speed and accuracy.
Handle IMAP servers that send a NIL where a literal is normally.
Avoids failure to sync when folder contains certain messages.
Throw Exception if folder message count is less than 0, avoiding
accidentally emptying a folder.
Merged from branch issue143 @ revision 426:
Complete replacement for SharedPreferences. Uses SQLite database
stored in application's databases folder.
Will load from legacy preferences if DB-backed preferences are empty.
Editor conforms to atomic commit contract.
Hardening of POP3 and SMTP communication:
SMTP: Decrement failure counter when no possible message send
occurred. This way, K-9 will only stop attempting to send messages
for which a possible successful send occurred, but K-9 could not
detect. Any message that is known to have completely failed to send
will be reattempted indefinitely.
POP3: Some reworking of Exception handling. Also, if it is not
possible to get a "message number" for the UID of the message that is
being deleted, conclude that the message has already been deleted on
the server. Mark this as a permanent error, so that it gets removed
from the pending actions queue.
MessagingController: Look for the permanentFailure flag on the
MessagingException, and if a pending action raised a permanent
failure, remove the pending action from the queue so that it will not
be re-attempted nor block later requests.
Significant hardening of the email sending process.
A given message in the Outbox is only attempted to be sent 5 times.
Once the threshold is reached, the message is flagged. asses through
the Outbox skip flagged messages. The message can be tried again by
manually unflagging. When any messages are flagged during a pass
through the Outbox, K-9 raises a notification with a fast flashing red
LED, alerting the user to the failure to send. A note is also placed
in the K9mail-errors.
The read timeout on SMTP connections has been changed to 300000ms (5
minutes)
The send attempt counter is kept in memory, not stored with the
message, so a phone or application restart will clear the counters,
but not the flagged state. As the intent of this revision is to avoid
runaway message sending, this is deemed to be acceptable for now.
The moving of messages from the Outbox to the Sent folder has been
changed to an atomic move.
Extra error checking has been added to the SMTP communication code.
The flashing LED may be excessive.
Copy now copied body (but attachments might not work right).
Move is now reliable (needed to open the destination folder), and
leaves a placeHolder message behind in the source folder so that
messages are not resynced.
3.
Each remote Store (IMAP, POP3, WebDAV) can provide indications to the
higher level classes as to whether copy and move are implemented.
Currently, copy and move are only provided by ImapStore.java. When
the facilities are not available, the user interface suppresses the
menu options.
The available destination folders can be configured using folder
classes.
Copy results in null message bodies in the destination copy of the
message until the next sync. This is a problem that occurred with
deletes previously, and is likely a fault with the copyMessages method
of LocalStore.java.
Utilizes a modified version of the ChooseFolder.java Activity that
debuachedsloth contributed in a patch attached to Issue 285 on 16 Feb
2008.
Puts quotes around username and password for IMAP authentication.
Also, if authentication fails, closes the connection so that it will
be retried. Otherwise, there is no way to fix the problem, say, by
changing the password in the Incoming Settings.
Provide two options for each Account:
Compact (which VACUUMs the accounts and prunes recreatable
attachments)
Clear all data (danger!) (which wipes all messages and attachments in
the account, except placeholder deleted messages)
Displays a Toast when the Compact or Clear is queued, and another
Toast with the shrinkage results.
(Also, a small change to increase probability of seeing messages after
a sync, by setting the needsRefresh on all folders when a sync is done.)
Patches were handling uppercase MIME types were submitted by gwillen
in K-9 issue 94 (MimeBodyPart.java and MimeMessage.java)
and
Josh Guilfoyle as part of Android patch 1539 (MimeUtility.java)
Sorry for missing the attribution on the original commit
a red/bold subject. Can be done in the FolderMessageList using the
hotkey G (toggle) or by long-pressing the message to bring up the
message context menu. Can be done while viewing an individual message
by using the hotkey G (toggle). To-do: add a Flag/Unflag option to a
menu in the individual message view.
Add sending the Answered flag to the IMAP server when replying to a
message. This is currently done as soon as the reply is started.
Perhaps it would be better to wait until the reply is sent, but that
would require keeping additional state with the draft. Messages to
which the user has replied are indicated with a white arrow next to
the subject.
To-do: In the MessageView, provide visual indication of Flagged and
Answered states.
Added support for default mailbox path setting if we can't automatically determine what it is.
Fixed a bug exposed by changes relating to a fix for non-relative email paths being returned.
MessageView
Deleting a message in Trash deletes it for real (permanently)
All message operations are allowed on messages in the Outbox. Special
handling for deleting, so that the message is copied to Trash, then
copied asynchronously to the remote Trash.
Add some more items to the hotkey help
Accounts are now set:
Folder display mode = All except 2nd Class
Folder sync mode = Only 1st Class
Only the Inbox is set for:
Folder sync class = 1st Class
All other folders have class set to None for sync and display
Also restored an optimization on opening local folders that I
removed. It is now optimistic, and in the normal case does not have
to make an explicit existence check