Guest User

Untitled

a guest
May 22nd, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.42 KB | None | 0 0
  1. diff --git a/src/com/fsck/k9/controller/MessagingController.java b/src/com/fsck/k9/controller/MessagingController.java
  2. index 32b2589..128d1db 100644
  3. --- a/src/com/fsck/k9/controller/MessagingController.java
  4. +++ b/src/com/fsck/k9/controller/MessagingController.java
  5. @@ -896,14 +896,14 @@ public class MessagingController implements Runnable {
  6. for (Message message : localMessages) {
  7. localUidMap.put(message.getUid(), message);
  8. }
  9. +
  10. + remoteStore = account.getRemoteStore();
  11.  
  12. if (providedRemoteFolder != null) {
  13. if (K9.DEBUG)
  14. Log.v(K9.LOG_TAG, "SYNC: using providedRemoteFolder " + folder);
  15. remoteFolder = providedRemoteFolder;
  16. } else {
  17. - remoteStore = account.getRemoteStore();
  18. -
  19. if (K9.DEBUG)
  20. Log.v(K9.LOG_TAG, "SYNC: About to get remote folder " + folder);
  21.  
  22. @@ -967,6 +967,7 @@ public class MessagingController implements Runnable {
  23.  
  24. if (K9.DEBUG)
  25. Log.v(K9.LOG_TAG, "SYNC: Remote message count for folder " + folder + " is " + remoteMessageCount);
  26. +
  27. final Date earliestDate = account.getEarliestPollDate();
  28.  
  29. if (remoteMessageCount > 0 || syncMode) {
  30. @@ -980,7 +981,7 @@ public class MessagingController implements Runnable {
  31. int remoteEnd = remoteMessageCount;
  32.  
  33. if (K9.DEBUG)
  34. - Log.v(K9.LOG_TAG, "SYNC: About to get messages " + remoteStart + " through " + remoteEnd + " for folder " + folder);
  35. + Log.v(K9.LOG_TAG, "SYNC: About to get messages " + remoteStart + " through " + remoteEnd + " for folder " + remoteFolder.getName());
  36.  
  37. final AtomicInteger headerProgress = new AtomicInteger(0);
  38. for (MessagingListener l : getListeners(listener)) {
  39. @@ -988,28 +989,33 @@ public class MessagingController implements Runnable {
  40. }
  41.  
  42. remoteMessageArray = remoteFolder.getMessages(remoteStart, remoteEnd, earliestDate, null);
  43. -
  44. - int messageCount = remoteMessageArray.length;
  45. -
  46. - for (Message thisMess : remoteMessageArray) {
  47. + for (Message remoteMessage : remoteMessageArray) {
  48. headerProgress.incrementAndGet();
  49. for (MessagingListener l : getListeners(listener)) {
  50. - l.synchronizeMailboxHeadersProgress(account, folder, headerProgress.get(), messageCount);
  51. + l.synchronizeMailboxHeadersProgress(account, folder, headerProgress.get(), remoteMessageArray.length);
  52. }
  53. - Message localMessage = localUidMap.get(thisMess.getUid());
  54. - if (localMessage == null || !localMessage.olderThan(earliestDate)) {
  55. - remoteMessages.add(thisMess);
  56. - remoteUidMap.put(thisMess.getUid(), thisMess);
  57. +
  58. + Message localMessage = localUidMap.get(remoteMessage.getUid());
  59. + if (localMessage == null && !remoteMessage.isSet(Flag.DELETED)) {
  60. + // We don't have the message locally, download it
  61. + remoteMessages.add(remoteMessage);
  62. + } else if (remoteMessage.isSet(Flag.DELETED)) {
  63. + // The remote message was deleted, mark it to be deleted locally.
  64. + remoteUidMap.put(remoteMessage.getUid(), remoteMessage);
  65. + } else {
  66. + remoteUidMap.put(remoteMessage.getUid(), remoteMessage);
  67. + // We already have the message locally, just add any new flags that have been set.
  68. + localMessage.setFlags(remoteMessage.getFlags(), true);
  69. }
  70. }
  71. - if (K9.DEBUG)
  72. - Log.v(K9.LOG_TAG, "SYNC: Got " + remoteUidMap.size() + " messages for folder " + folder);
  73. -
  74. remoteMessageArray = null;
  75. +
  76. + if (K9.DEBUG)
  77. + Log.v(K9.LOG_TAG, "SYNC: Got " + remoteMessages.size() + " messages for folder " + folder);
  78. +
  79. for (MessagingListener l : getListeners(listener)) {
  80. - l.synchronizeMailboxHeadersFinished(account, folder, headerProgress.get(), remoteUidMap.size());
  81. + l.synchronizeMailboxHeadersFinished(account, folder, headerProgress.get(), remoteMessages.size());
  82. }
  83. -
  84. } else if (remoteMessageCount < 0) {
  85. throw new Exception("Message count " + remoteMessageCount + " for folder " + folder);
  86. }
  87. @@ -1017,29 +1023,32 @@ public class MessagingController implements Runnable {
  88. /*
  89. * Remove any messages that are in the local store but no longer on the remote store or are too old
  90. */
  91. - if (account.syncRemoteDeletions()) {
  92. - ArrayList<Message> destroyMessages = new ArrayList<Message>();
  93. - if (remoteFolder.isSyncMode()) {
  94. - for (Message localMessage : localMessages) {
  95. + Boolean syncRemoteDeletes = account.syncRemoteDeletions();
  96. + ArrayList<Message> destroyMessages = new ArrayList<Message>();
  97. + if (syncMode) {
  98. + for (Message localMessage : localMessages) {
  99. + if (localMessage.olderThan(earliestDate)) {
  100. + destroyMessages.add(localMessage);
  101. + } else {
  102. Message remoteMessage = remoteUidMap.get(localMessage.getUid());
  103. - if (remoteMessage != null && remoteMessage.isSet(Flag.DELETED)) {
  104. + if (syncRemoteDeletes && remoteMessage != null && remoteMessage.isSet(Flag.DELETED)) {
  105. destroyMessages.add(localMessage);
  106. }
  107. }
  108. - } else {
  109. - for (Message localMessage : localMessages) {
  110. - if (remoteUidMap.get(localMessage.getUid()) == null) {
  111. - destroyMessages.add(localMessage);
  112. - }
  113. + }
  114. + } else {
  115. + for (Message localMessage : localMessages) {
  116. + if (localMessage.olderThan(earliestDate) ||
  117. + (syncRemoteDeletes && remoteUidMap.get(localMessage.getUid()) == null)) {
  118. + destroyMessages.add(localMessage);
  119. }
  120. }
  121. + }
  122. + localFolder.destroyMessages(destroyMessages.toArray(EMPTY_MESSAGE_ARRAY));
  123.  
  124. - localFolder.destroyMessages(destroyMessages.toArray(EMPTY_MESSAGE_ARRAY));
  125. -
  126. - for (Message destroyMessage : destroyMessages) {
  127. - for (MessagingListener l : getListeners(listener)) {
  128. - l.synchronizeMailboxRemovedMessage(account, folder, destroyMessage);
  129. - }
  130. + for (Message destroyMessage : destroyMessages) {
  131. + for (MessagingListener l : getListeners(listener)) {
  132. + l.synchronizeMailboxRemovedMessage(account, folder, destroyMessage);
  133. }
  134. }
  135. localMessages = null;
Add Comment
Please, Sign In to add comment