@Test public void sync_withAccountSetToSyncRemoteDeletions_shouldDeleteLocalCopiesOfDeletedMessages() { messageCountInRemoteFolder(0); configureSyncConfigWithSyncRemoteDeletions(true); when(backendFolder.getAllMessagesAndEffectiveDates()).thenReturn(Collections.singletonMap(MESSAGE_UID1, 0L)); imapSync.sync(FOLDER_NAME, syncConfig, listener, remoteFolder); verify(backendFolder).destroyMessages(messageListCaptor.capture()); assertEquals(MESSAGE_UID1, messageListCaptor.getValue().get(0)); }
boolean messagePresentLocally = backendFolder.isMessagePresent(messageServerId); backendFolder.saveCompleteMessage(message); } else { backendFolder.savePartialMessage(message); Set<Flag> messageFlags = backendFolder.getMessageFlags(messageServerId); if (!messageFlags.contains(Flag.DELETED)) { Timber.v("Message with uid %s is present in the local store", messageServerId); String newPushState = remoteFolder.getNewPushState(backendFolder.getPushState(), message); if (newPushState != null) { backendFolder.setPushState(newPushState);
private boolean syncFlags(SyncConfig syncConfig, BackendFolder backendFolder, Message remoteMessage) { String messageServerId = remoteMessage.getUid(); if (!backendFolder.isMessagePresent(messageServerId)) { return false; } Set<Flag> localMessageFlags = backendFolder.getMessageFlags(messageServerId); if (localMessageFlags.contains(Flag.DELETED)) { return false; } boolean messageChanged = false; if (remoteMessage.isSet(Flag.DELETED)) { if (syncConfig.getSyncRemoteDeletions()) { backendFolder.setMessageFlag(messageServerId, Flag.DELETED, true); messageChanged = true; } } else { for (Flag flag : syncConfig.getSyncFlags()) { if (remoteMessage.isSet(flag) != localMessageFlags.contains(flag)) { backendFolder.setMessageFlag(messageServerId, flag, remoteMessage.isSet(flag)); messageChanged = true; } } } return messageChanged; } }
boolean messagePresentLocally = backendFolder.isMessagePresent(messageServerId); if (!messagePresentLocally) { if (!flagSyncOnly) { Set<Flag> messageFlags = backendFolder.getMessageFlags(messageServerId); if (!messageFlags.contains(Flag.DELETED)) { Timber.v("Message with uid %s is present in the local store", messageServerId); String newPushState = remoteFolder.getNewPushState(backendFolder.getPushState(), message); if (newPushState != null) { backendFolder.setPushState(newPushState);
String folderName = backendFolder.getName(); Map<String, Long> localUidMap = backendFolder.getAllMessagesAndEffectiveDates(); int visibleLimit = backendFolder.getVisibleLimit(); MoreMessages moreMessages = backendFolder.getMoreMessages(); if (syncConfig.getSyncRemoteDeletions()) { List<String> destroyMessageUids = new ArrayList<>(); moreMessages = MoreMessages.UNKNOWN; backendFolder.destroyMessages(destroyMessageUids); for (String uid : destroyMessageUids) { listener.syncRemovedMessage(folder, uid); int unreadMessageCount = backendFolder.getUnreadMessageCount(); listener.folderStatusChanged(folder, unreadMessageCount); backendFolder.setLastChecked(System.currentTimeMillis()); backendFolder.setStatus(null); if (backendFolder != null) { try { backendFolder.setStatus(rootMessage); backendFolder.setLastChecked(System.currentTimeMillis()); } catch (Exception e1) { Timber.e(e1, "Could not set last checked on folder %s:%s", accountName, folder);
final List<Message> smallMessages = new ArrayList<>(); if (!unsyncedMessages.isEmpty()) { int visibleLimit = backendFolder.getVisibleLimit(); int listSize = unsyncedMessages.size(); backendFolder.purgeToVisibleLimit(new MessageRemovalListener() { @Override public void messageRemoved(Message message) { Date oldestMessageTime = backendFolder.getOldestMessageDate(); oldestMessageTime.after(backendFolder.getLatestOldMessageSeenTime())) { backendFolder.setLatestOldMessageSeenTime(oldestMessageTime);
if (!unsyncedMessages.isEmpty()) { Collections.sort(unsyncedMessages, new UidReverseComparator()); int visibleLimit = backendFolder.getVisibleLimit(); int listSize = unsyncedMessages.size(); todo, fp, listener); String updatedPushState = backendFolder.getPushState(); for (Message message : unsyncedMessages) { String newPushState = remoteFolder.getNewPushState(updatedPushState, message); backendFolder.setPushState(updatedPushState); backendFolder.purgeToVisibleLimit(new MessageRemovalListener() { @Override public void messageRemoved(Message message) {
@Test public void sync_withAccountSetNotToSyncRemoteDeletions_shouldNotDeleteLocalCopiesOfMessages() { messageCountInRemoteFolder(0); configureSyncConfigWithSyncRemoteDeletions(false); imapSync.sync(FOLDER_NAME, syncConfig, listener, remoteFolder); verify(backendFolder, never()).destroyMessages(messageListCaptor.capture()); }
Set<Flag> flags = backendFolder.getMessageFlags(messageServerId);
String folderName = backendFolder.getName(); Map<String, Long> localUidMap = backendFolder.getAllMessagesAndEffectiveDates(); int visibleLimit = backendFolder.getVisibleLimit(); MoreMessages moreMessages = backendFolder.getMoreMessages(); if (syncConfig.getSyncRemoteDeletions()) { List<String> destroyMessageUids = new ArrayList<>(); moreMessages = MoreMessages.UNKNOWN; backendFolder.destroyMessages(destroyMessageUids); for (String uid : destroyMessageUids) { listener.syncRemovedMessage(folder, uid); int unreadMessageCount = backendFolder.getUnreadMessageCount(); listener.folderStatusChanged(folder, unreadMessageCount); backendFolder.setLastChecked(System.currentTimeMillis()); backendFolder.setStatus(null); if (backendFolder != null) { try { backendFolder.setStatus(rootMessage); backendFolder.setLastChecked(System.currentTimeMillis()); } catch (Exception e1) { Timber.e(e1, "Could not set last checked on folder %s:%s", accountName, folder);
final List<Message> smallMessages = new ArrayList<>(); if (!unsyncedMessages.isEmpty()) { int visibleLimit = backendFolder.getVisibleLimit(); int listSize = unsyncedMessages.size(); backendFolder.purgeToVisibleLimit(new MessageRemovalListener() { @Override public void messageRemoved(Message message) { Date oldestMessageTime = backendFolder.getOldestMessageDate(); oldestMessageTime.after(backendFolder.getLatestOldMessageSeenTime())) { backendFolder.setLatestOldMessageSeenTime(oldestMessageTime);
private boolean syncFlags(SyncConfig syncConfig, BackendFolder backendFolder, Message remoteMessage) { String messageServerId = remoteMessage.getUid(); if (!backendFolder.isMessagePresent(messageServerId)) { return false; } Set<Flag> localMessageFlags = backendFolder.getMessageFlags(messageServerId); if (localMessageFlags.contains(Flag.DELETED)) { return false; } boolean messageChanged = false; if (remoteMessage.isSet(Flag.DELETED)) { if (syncConfig.getSyncRemoteDeletions()) { backendFolder.setMessageFlag(messageServerId, Flag.DELETED, true); messageChanged = true; } } else { for (Flag flag : syncConfig.getSyncFlags()) { if (remoteMessage.isSet(flag) != localMessageFlags.contains(flag)) { backendFolder.setMessageFlag(messageServerId, flag, remoteMessage.isSet(flag)); messageChanged = true; } } } return messageChanged; }
@Test public void sync_withAccountSetToSyncRemoteDeletions_shouldNotDeleteLocalCopiesOfExistingMessagesAfterEarliestPollDate() throws Exception { messageCountInRemoteFolder(1); Date dateOfEarliestPoll = new Date(); Message remoteMessage = messageOnServer(); configureSyncConfigWithSyncRemoteDeletionsAndEarliestPollDate(dateOfEarliestPoll); when(remoteMessage.olderThan(dateOfEarliestPoll)).thenReturn(false); imapSync.sync(FOLDER_NAME, syncConfig, listener, remoteFolder); verify(backendFolder, never()).destroyMessages(messageListCaptor.capture()); }
Set<Flag> flags = backendFolder.getMessageFlags(messageServerId);
Timber.v("SYNC: About to get local folder %s", folder); backendFolder = backendStorage.getFolder(folder); String folderName = backendFolder.getName(); Long lastUid = backendFolder.getLastUid(); Map<String, Long> localUidMap = backendFolder.getAllMessagesAndEffectiveDates(); int visibleLimit = backendFolder.getVisibleLimit(); MoreMessages moreMessages = backendFolder.getMoreMessages(); if (syncConfig.getSyncRemoteDeletions()) { List<String> destroyMessageUids = new ArrayList<>(); backendFolder.destroyMessages(destroyMessageUids); for (String uid : destroyMessageUids) { listener.syncRemovedMessage(folder, uid); int unreadMessageCount = backendFolder.getUnreadMessageCount(); listener.folderStatusChanged(folder, unreadMessageCount); backendFolder.setLastChecked(System.currentTimeMillis()); backendFolder.setStatus(null); if (backendFolder != null) { try { backendFolder.setStatus(rootMessage); backendFolder.setLastChecked(System.currentTimeMillis()); } catch (Exception e1) {
boolean messagePresentLocally = backendFolder.isMessagePresent(messageServerId); backendFolder.saveCompleteMessage(message); } else { backendFolder.savePartialMessage(message); Set<Flag> messageFlags = backendFolder.getMessageFlags(messageServerId); if (!messageFlags.contains(Flag.DELETED)) { Timber.v("Message with uid %s is present in the local store", messageServerId); String newPushState = remoteFolder.getNewPushState(backendFolder.getPushState(), message); if (newPushState != null) { backendFolder.setPushState(newPushState);
private boolean syncFlags(SyncConfig syncConfig, BackendFolder backendFolder, Message remoteMessage) { String messageServerId = remoteMessage.getUid(); if (!backendFolder.isMessagePresent(messageServerId)) { return false; } Set<Flag> localMessageFlags = backendFolder.getMessageFlags(messageServerId); if (localMessageFlags.contains(Flag.DELETED)) { return false; } boolean messageChanged = false; if (remoteMessage.isSet(Flag.DELETED)) { if (syncConfig.getSyncRemoteDeletions()) { backendFolder.setMessageFlag(messageServerId, Flag.DELETED, true); messageChanged = true; } } else { for (Flag flag : syncConfig.getSyncFlags()) { if (remoteMessage.isSet(flag) != localMessageFlags.contains(flag)) { backendFolder.setMessageFlag(messageServerId, flag, remoteMessage.isSet(flag)); messageChanged = true; } } } return messageChanged; } }
@Test public void sync_withAccountSetToSyncRemoteDeletions_shouldDeleteLocalCopiesOfExistingMessagesBeforeEarliestPollDate() throws Exception { messageCountInRemoteFolder(1); Message remoteMessage = messageOnServer(); Date dateOfEarliestPoll = new Date(); configureSyncConfigWithSyncRemoteDeletionsAndEarliestPollDate(dateOfEarliestPoll); when(remoteMessage.olderThan(dateOfEarliestPoll)).thenReturn(true); when(backendFolder.getAllMessagesAndEffectiveDates()).thenReturn(Collections.singletonMap(MESSAGE_UID1, 0L)); imapSync.sync(FOLDER_NAME, syncConfig, listener, remoteFolder); verify(backendFolder).destroyMessages(messageListCaptor.capture()); assertEquals(MESSAGE_UID1, messageListCaptor.getValue().get(0)); }
Set<Flag> flags = backendFolder.getMessageFlags(messageServerId);