FetchProfile fp, final SyncListener listener) throws MessagingException { final String folder = remoteFolder.getServerId(); remoteFolder.fetch(unsyncedMessages, fp, new MessageRetrievalListener<T>() { @Override
void expungeMessages(@NotNull String folderServerId, @NotNull List<String> messageServerIds) throws MessagingException { Folder remoteFolder = imapStore.getFolder(folderServerId); try { if (!remoteFolder.exists()) { return; } remoteFolder.open(Folder.OPEN_MODE_RW); if (remoteFolder.getMode() != Folder.OPEN_MODE_RW) { return; } remoteFolder.expungeUids(messageServerIds); } finally { remoteFolder.close(); } } }
@Override public void setFlag(Flag flag, boolean set) throws MessagingException { super.setFlag(flag, set); mFolder.setFlags(Collections.singletonList(this), Collections.singleton(flag), set); }
void expunge(@NotNull String folderServerId) throws MessagingException { Timber.d("processPendingExpunge: folder = %s", folderServerId); Folder remoteFolder = imapStore.getFolder(folderServerId); try { if (!remoteFolder.exists()) { return; } remoteFolder.open(Folder.OPEN_MODE_RW); if (remoteFolder.getMode() != Folder.OPEN_MODE_RW) { return; } remoteFolder.expunge(); Timber.d("processPendingExpunge: complete for folder = %s", folderServerId); } finally { remoteFolder.close(); } }
@Override public String toString() { return getServerId(); }
remoteFolder.open(Folder.OPEN_MODE_RO); int remoteMessageCount = remoteFolder.getMessageCount(); remoteFolder.getMessages(remoteStart, remoteMessageCount, earliestDate, null); remoteFolder.close();
) throws MessagingException { final String folder = remoteFolder.getServerId(); if (remoteFolder.supportsFetchingFlags()) { Timber.d("SYNC: About to sync flags for %d remote messages for folder %s", syncFlagMessages.size(), folder); remoteFolder.fetch(undeletedMessages, fp, null); for (Message remoteMessage : syncFlagMessages) { boolean messageChanged = syncFlags(syncConfig, backendFolder, remoteMessage);
if (folder.getServerId().equals(account.getOutboxFolder())) { continue; folder.open(Folder.OPEN_MODE_RW); Folder.FolderClass fDisplayClass = folder.getDisplayClass(); Folder.FolderClass fPushClass = folder.getPushClass(); Timber.i("Starting pusher for %s:%s", account.getDescription(), folder.getServerId()); names.add(folder.getServerId());
private Folder createFakeFolder() { Folder folder = mock(Folder.class); when(folder.getServerId()).thenReturn(FOLDER_SERVER_ID); when(folder.getName()).thenReturn(FOLDER_NAME); return folder; } }
final MessagingListener listener) { Timber.v("Folder %s was last synced @ %tc", folder.getServerId(), folder.getLastChecked()); if (!ignoreLastCheckedTime && folder.getLastChecked() > System.currentTimeMillis() - accountInterval) { Timber.v("Not syncing folder %s, previously synced @ %tc which would be too recent for the account " + "period", folder.getServerId(), folder.getLastChecked()); return; putBackground("sync" + folder.getServerId(), null, new Runnable() { @Override public void run() {
Timber.d("Only syncing messages after %s", earliestDate); final String folder = remoteFolder.getServerId(); if (remoteFolder.supportsFetchingFlags()) { fp.add(FetchProfile.Item.FLAGS);
remoteFolder.expunge(); remoteFolder.open(Folder.OPEN_MODE_RO); int remoteMessageCount = remoteFolder.getMessageCount(); remoteFolder.getMessages(remoteStart, remoteMessageCount, earliestDate, null);
private boolean messagesPendingSend(final Account account) { Folder localFolder = null; try { localFolder = localStoreProvider.getInstance(account).getFolder( account.getOutboxFolder()); if (!localFolder.exists()) { return false; } localFolder.open(Folder.OPEN_MODE_RW); if (localFolder.getMessageCount() > 0) { return true; } } catch (Exception e) { Timber.e(e, "Exception while checking for unsent messages"); } finally { closeFolder(localFolder); } return false; }
Timber.d("Only syncing messages after %s", earliestDate); final String folder = remoteFolder.getServerId(); String newPushState = remoteFolder.getNewPushState(updatedPushState, message); if (newPushState != null) { updatedPushState = newPushState;
LocalStore localStore = localStoreProvider.getInstance(account); localFolder = localStore.getFolder(folderServerId); localFolder.open(Folder.OPEN_MODE_RW); localFolder.setFlags(messages, Collections.singleton(flag), newState); int unreadMessageCount = localFolder.getUnreadMessageCount(); for (MessagingListener l : getListeners()) { l.folderStatusChanged(account, folderServerId, unreadMessageCount);
private static void closeFolder(Folder f) { if (f != null) { f.close(); } }
folder.open(Folder.OPEN_MODE_RW); Folder.FolderClass fDisplayClass = folder.getDisplayClass(); Folder.FolderClass fSyncClass = folder.getSyncClass();
private void downloadSaneBody(Folder remoteFolder, BackendFolder backendFolder, Message message) throws MessagingException { /* * The provider was unable to get the structure of the message, so * we'll download a reasonable portion of the messge and mark it as * incomplete so the entire thing can be downloaded later if the user * wishes to download it. */ FetchProfile fp = new FetchProfile(); fp.add(FetchProfile.Item.BODY_SANE); /* * TODO a good optimization here would be to make sure that all Stores set * the proper size after this fetch and compare the before and after size. If * they equal we can mark this SYNCHRONIZED instead of PARTIALLY_SYNCHRONIZED */ remoteFolder.fetch(Collections.singletonList(message), fp, null); // Store the updated message locally backendFolder.savePartialMessage(message); }
LocalStore localStore = localStoreProvider.getInstance(account); localFolder = localStore.getFolder(folderServerId); localFolder.open(Folder.OPEN_MODE_RW); Message message = localFolder.getMessage(uid); if (message != null) { setFlag(account, folderServerId, Collections.singletonList(message), flag, newState);
private void updateMoreMessages(Folder remoteFolder, BackendFolder backendFolder, Date earliestDate, int remoteStart) throws MessagingException, IOException { if (remoteStart == 1) { backendFolder.setMoreMessages(MoreMessages.FALSE); } else { boolean moreMessagesAvailable = remoteFolder.areMoreMessagesAvailable(remoteStart, earliestDate); MoreMessages newMoreMessages = (moreMessagesAvailable) ? MoreMessages.TRUE : MoreMessages.FALSE; backendFolder.setMoreMessages(newMoreMessages); } } }