private void configureSyncConfigWithExpungePolicy(ExpungePolicy expungePolicy) { syncConfig = syncConfig.copy( expungePolicy, syncConfig.getEarliestPollDate(), syncConfig.getSyncRemoteDeletions(), syncConfig.getMaximumAutoDownloadMessageSize(), syncConfig.getDefaultVisibleLimit(), syncConfig.getSyncFlags()); }
private void configureSyncConfig() { syncConfig = new SyncConfig( ExpungePolicy.MANUALLY, null, true, MAXIMUM_SMALL_MESSAGE_SIZE, DEFAULT_VISIBLE_LIMIT, SYNC_FLAGS); }
private void configureSyncConfigWithSyncRemoteDeletions(boolean syncRemoteDeletions) { syncConfig = syncConfig.copy( syncConfig.getExpungePolicy(), syncConfig.getEarliestPollDate(), syncRemoteDeletions, syncConfig.getMaximumAutoDownloadMessageSize(), syncConfig.getDefaultVisibleLimit(), syncConfig.getSyncFlags()); }
visibleLimit = syncConfig.getDefaultVisibleLimit(); final Date earliestDate = syncConfig.getEarliestPollDate(); long earliestTimestamp = earliestDate != null ? earliestDate.getTime() : 0L; if (syncConfig.getSyncRemoteDeletions()) { List<String> destroyMessageUids = new ArrayList<>(); for (String localMessageUid : localUidMap.keySet()) {
if (syncConfig.getExpungePolicy() == ExpungePolicy.ON_POLL) { Timber.d("SYNC: Expunging folder %s:%s", accountName, folder); remoteFolder.expunge(); visibleLimit = syncConfig.getDefaultVisibleLimit(); final Date earliestDate = syncConfig.getEarliestPollDate(); long earliestTimestamp = earliestDate != null ? earliestDate.getTime() : 0L; if (syncConfig.getSyncRemoteDeletions()) { List<String> destroyMessageUids = new ArrayList<>(); for (String localMessageUid : localUidMap.keySet()) {
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; } }
final String folder = remoteFolder.getServerId(); final Date earliestDate = syncConfig.getEarliestPollDate(); remoteFolder.fetch(unsyncedMessages, fp, new MessageRetrievalListener<T>() {
@Override public void messageFinished(T message, int number, int ofTotal) { try { if (message.isSet(Flag.DELETED) || message.olderThan(earliestDate)) { if (message.isSet(Flag.DELETED)) { Timber.v("Newly downloaded message %s:%s:%s was marked deleted on server, " + "skipping", accountName, folder, message.getUid()); } else { Timber.d("Newly downloaded message %s is older than %s, skipping", message.getUid(), earliestDate); } progress.incrementAndGet(); //TODO: This might be the source of poll count errors in the UI. Is todo always the same as ofTotal listener.syncProgress(folder, progress.get(), todo); return; } if (syncConfig.getMaximumAutoDownloadMessageSize() > 0 && message.getSize() > syncConfig.getMaximumAutoDownloadMessageSize()) { largeMessages.add(message); } else { smallMessages.add(message); } } catch (Exception e) { Timber.e(e, "Error while storing downloaded message."); } }
visibleLimit = syncConfig.getDefaultVisibleLimit(); final Date earliestDate = syncConfig.getEarliestPollDate(); long earliestTimestamp = earliestDate != null ? earliestDate.getTime() : 0L; if (syncConfig.getSyncRemoteDeletions()) { List<String> destroyMessageUids = new ArrayList<>(); for (String localMessageUid : localUidMap.keySet()) {
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; }
final String folder = remoteFolder.getServerId(); final Date earliestDate = syncConfig.getEarliestPollDate(); remoteFolder.fetch(unsyncedMessages, fp, new MessageRetrievalListener<T>() {
@Override public void messageFinished(T message, int number, int ofTotal) { try { if (message.isSet(Flag.DELETED) || message.olderThan(earliestDate)) { if (message.isSet(Flag.DELETED)) { Timber.v("Newly downloaded message %s:%s:%s was marked deleted on server, " + "skipping", accountName, folder, message.getUid()); } else { Timber.d("Newly downloaded message %s is older than %s, skipping", message.getUid(), earliestDate); } progress.incrementAndGet(); //TODO: This might be the source of poll count errors in the UI. Is todo always the same as ofTotal listener.syncProgress(folder, progress.get(), todo); return; } if (syncConfig.getMaximumAutoDownloadMessageSize() > 0 && message.getSize() > syncConfig.getMaximumAutoDownloadMessageSize()) { largeMessages.add(message); } else { smallMessages.add(message); } } catch (Exception e) { Timber.e(e, "Error while storing downloaded message."); } }
private void configureSyncConfigWithSyncRemoteDeletionsAndEarliestPollDate(Date earliestPollDate) { syncConfig = syncConfig.copy( syncConfig.getExpungePolicy(), earliestPollDate, true, syncConfig.getMaximumAutoDownloadMessageSize(), syncConfig.getDefaultVisibleLimit(), syncConfig.getSyncFlags()); } }
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; } }
final String folder = remoteFolder.getServerId(); final Date earliestDate = syncConfig.getEarliestPollDate(); remoteFolder.fetch(unsyncedMessages, fp, new MessageRetrievalListener<T>() {
@Override public void messageFinished(T message, int number, int ofTotal) { try { if (message.isSet(Flag.DELETED) || message.olderThan(earliestDate)) { if (message.isSet(Flag.DELETED)) { Timber.v("Newly downloaded message %s:%s:%s was marked deleted on server, " + "skipping", accountName, folder, message.getUid()); } else { Timber.d("Newly downloaded message %s is older than %s, skipping", message.getUid(), earliestDate); } progress.incrementAndGet(); //TODO: This might be the source of poll count errors in the UI. Is todo always the same as ofTotal listener.syncProgress(folder, progress.get(), todo); return; } if (syncConfig.getMaximumAutoDownloadMessageSize() > 0 && message.getSize() > syncConfig.getMaximumAutoDownloadMessageSize()) { largeMessages.add(message); } else { smallMessages.add(message); } } catch (Exception e) { Timber.e(e, "Error while storing downloaded message."); } }
private SyncConfig createSyncConfig(Account account) { return new SyncConfig( account.getExpungePolicy().toBackendExpungePolicy(), account.getEarliestPollDate(), account.isSyncRemoteDeletions(), account.getMaximumAutoDownloadMessageSize(), K9.DEFAULT_VISIBLE_LIMIT, SYNC_FLAGS); }
final String folder = remoteFolder.getServerId(); final Date earliestDate = syncConfig.getEarliestPollDate();
if (syncConfig.getMaximumAutoDownloadMessageSize() == 0 || message.getSize() < syncConfig.getMaximumAutoDownloadMessageSize()) { completeMessage = true;
boolean purgeToVisibleLimit, final SyncListener listener) throws MessagingException { final Date earliestDate = syncConfig.getEarliestPollDate(); Date downloadStarted = new Date(); // now