Simplify logic.
Make sure that either messages are fetched or a sync is initiated, and there can be no situation where neither happens. Change-Id: I73ec2482a5a86c54309634f434b7d8fd77d7c079
This commit is contained in:
parent
c59103c933
commit
b9532055e2
@ -2770,9 +2770,9 @@ public class ImapService extends Service {
|
||||
// the changes just perform a full sync
|
||||
final long timeSinceLastFullSync = SystemClock.elapsedRealtime() -
|
||||
mailbox.mLastFullSyncTime;
|
||||
final boolean fullSync = timeSinceLastFullSync >= FULL_SYNC_INTERVAL_MILLIS
|
||||
final boolean forceSync = timeSinceLastFullSync >= FULL_SYNC_INTERVAL_MILLIS
|
||||
|| timeSinceLastFullSync < 0;
|
||||
if (fullSync) {
|
||||
if (forceSync) {
|
||||
needSync = true;
|
||||
fetchMessages.clear();
|
||||
|
||||
@ -2788,31 +2788,33 @@ public class ImapService extends Service {
|
||||
+ ": need sync " + needSync + ", " + msgToFetchSize + " fetch messages");
|
||||
}
|
||||
|
||||
boolean syncRequested = false;
|
||||
try {
|
||||
// Sync fetch messages only if we are not going to perform a full sync
|
||||
if (msgToFetchSize > 0 && msgToFetchSize < MAX_MESSAGES_TO_FETCH && !needSync) {
|
||||
processImapFetchChanges(context, account, mailbox, fetchMessages);
|
||||
if (msgToFetchSize > 0) {
|
||||
if (!needSync && msgToFetchSize <= MAX_MESSAGES_TO_FETCH) {
|
||||
try {
|
||||
processImapFetchChanges(context, account, mailbox, fetchMessages);
|
||||
} catch (MessagingException ex) {
|
||||
LogUtils.w(LOG_TAG,
|
||||
"Failed to process imap idle changes for mailbox " + mailbox.mId);
|
||||
needSync = true;
|
||||
}
|
||||
} else {
|
||||
needSync = true;
|
||||
}
|
||||
if (needSync || msgToFetchSize > MAX_MESSAGES_TO_FETCH) {
|
||||
// With idle we fetched as much as possible. If as resync is required, then
|
||||
// if should be a full sync
|
||||
requestSync(context, account, mailbox.mId, true);
|
||||
syncRequested = true;
|
||||
}
|
||||
} catch (MessagingException ex) {
|
||||
LogUtils.w(LOG_TAG, "Failed to process imap idle changes for mailbox " + mailbox.mId);
|
||||
}
|
||||
|
||||
// In case no sync happens, re-add idle status
|
||||
try {
|
||||
if (!syncRequested && account.getSyncInterval() == Account.CHECK_INTERVAL_PUSH) {
|
||||
final ImapIdleFolderHolder holder = ImapIdleFolderHolder.getInstance();
|
||||
holder.registerMailboxForIdle(context, account, mailbox);
|
||||
if (needSync) {
|
||||
requestSync(context, account, mailbox.mId, true);
|
||||
} else {
|
||||
// In case no sync happens, re-add idle status
|
||||
try {
|
||||
if (account.getSyncInterval() == Account.CHECK_INTERVAL_PUSH) {
|
||||
final ImapIdleFolderHolder holder = ImapIdleFolderHolder.getInstance();
|
||||
holder.registerMailboxForIdle(context, account, mailbox);
|
||||
}
|
||||
} catch (MessagingException ex) {
|
||||
LogUtils.w(LOG_TAG, "Failed to readd imap idle after no sync " +
|
||||
"for mailbox " + mailbox.mId);
|
||||
}
|
||||
} catch (MessagingException ex) {
|
||||
LogUtils.w(LOG_TAG, "Failed to readd imap idle after no sync " +
|
||||
"for mailbox " + mailbox.mId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user