@Override public String toString() { return getServerId(); }
@Override public int hashCode() { final int MULTIPLIER = 31; int result = 1; result = MULTIPLIER * result + (mFolder != null ? mFolder.getServerId().hashCode() : 0); result = MULTIPLIER * result + mUid.hashCode(); return result; }
@Override public Map<String, String> copyMessages(List<? extends Message> messages, Folder folder) throws MessagingException { moveOrCopyMessages(messages, folder.getServerId(), false); return null; }
@Override public Map<String, String> moveMessages(List<? extends Message> messages, Folder folder) throws MessagingException { moveOrCopyMessages(messages, folder.getServerId(), true); return null; }
@Override public boolean equals(Object o) { if (o == null || !(o instanceof Message)) { return false; } Message other = (Message)o; return (getUid().equals(other.getUid()) && getFolder().getServerId().equals(other.getFolder().getServerId())); }
public void syncFolder(Folder folder) { Timber.v("syncFolder(%s)", folder.getServerId()); final CountDownLatch latch = new CountDownLatch(1); controller.synchronizeMailbox(account, folder.getServerId(), new SimpleMessagingListener() { @Override public void synchronizeMailboxFinished(Account account, String folderServerId, int totalMessagesInMailbox, int numNewMessages) { latch.countDown(); } @Override public void synchronizeMailboxFailed(Account account, String folderServerId, String message) { latch.countDown(); } }, folder); Timber.v("syncFolder(%s) about to await latch release", folder.getServerId()); try { latch.await(); Timber.v("syncFolder(%s) got latch release", folder.getServerId()); } catch (Exception e) { Timber.e(e, "Interrupted while awaiting latch release"); } }
private Set<String> extractFolderNames(List<? extends Folder> folders) { Set<String> folderNames = new HashSet<>(folders.size()); for (Folder folder : folders) { folderNames.add(folder.getServerId()); } return folderNames; }
private void notifySynchronizeMailboxFailed(Account account, Folder localFolder, Exception exception) { String folderServerId = localFolder.getServerId(); String errorMessage = getRootCauseMessage(exception); for (MessagingListener listener : getListeners()) { listener.synchronizeMailboxFailed(account, folderServerId, errorMessage); } }
private Folder createFakeFolder() { Folder folder = mock(Folder.class); when(folder.getServerId()).thenReturn(FOLDER_SERVER_ID); when(folder.getName()).thenReturn(FOLDER_NAME); return folder; } }
@Override public void run() { LocalFolder tLocalFolder = null; try { // In case multiple Commands get enqueued, don't run more than // once final LocalStore localStore = localStoreProvider.getInstance(account); tLocalFolder = localStore.getFolder(folder.getServerId()); tLocalFolder.open(Folder.OPEN_MODE_RW); if (!ignoreLastCheckedTime && tLocalFolder.getLastChecked() > (System.currentTimeMillis() - accountInterval)) { Timber.v("Not running Command for folder %s, previously synced @ %tc which would " + "be too recent for the account period", folder.getServerId(), folder.getLastChecked()); return; } showFetchingMailNotificationIfNecessary(account, folder); try { synchronizeMailboxSynchronous(account, folder.getServerId(), listener, null); } finally { clearFetchingMailNotificationIfNecessary(account); } } catch (Exception e) { Timber.e(e, "Exception while processing folder %s:%s", account.getDescription(), folder.getServerId()); } finally { closeFolder(tLocalFolder); } } }
final MessagingListener listener) { Timber.v("Folder %s was last synced @ %tc", folder.getServerId(), folder.getLastChecked()); "period", folder.getServerId(), folder.getLastChecked()); return; putBackground("sync" + folder.getServerId(), null, new Runnable() { @Override public void run() {
FetchProfile fp, final SyncListener listener) throws MessagingException { final String folder = remoteFolder.getServerId();
FetchProfile fp, final SyncListener listener) throws MessagingException { final String folder = remoteFolder.getServerId();
private void refreshLocalMessageFlags( SyncConfig syncConfig, final Folder remoteFolder, final BackendFolder backendFolder, List<Message> syncFlagMessages, final AtomicInteger progress, final int todo, SyncListener listener ) throws MessagingException { final String folder = remoteFolder.getServerId(); Timber.d("SYNC: About to sync flags for %d remote messages for folder %s", syncFlagMessages.size(), folder); FetchProfile fp = new FetchProfile(); fp.add(FetchProfile.Item.FLAGS); List<Message> undeletedMessages = new LinkedList<>(); for (Message message : syncFlagMessages) { if (!message.isSet(Flag.DELETED)) { undeletedMessages.add(message); } } remoteFolder.fetch(undeletedMessages, fp, null); for (Message remoteMessage : syncFlagMessages) { boolean messageChanged = syncFlags(syncConfig, backendFolder, remoteMessage); if (messageChanged) { listener.syncFlagChanged(folder, remoteMessage.getUid()); } progress.incrementAndGet(); listener.syncProgress(folder, progress.get(), todo); } }
final Long lastUid, final SyncListener listener) throws MessagingException { final String folder = remoteFolder.getServerId();
) 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);
) 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);
public void showFetchingMailNotification(Account account, Folder folder) { String accountName = account.getDescription(); String folderServerId = folder.getServerId(); String folderName = folder.getName(); String tickerText = resourceProvider.checkingMailTicker(accountName, folderName); String title = resourceProvider.checkingMailTitle(); //TODO: Use format string from resources String text = accountName + resourceProvider.checkingMailSeparator() + folderName; int notificationId = NotificationIds.getFetchingMailNotificationId(account); PendingIntent showMessageListPendingIntent = actionBuilder.createViewFolderPendingIntent( account, folderServerId, notificationId); NotificationCompat.Builder builder = notificationHelper.createNotificationBuilder(account, NotificationChannelManager.ChannelType.MISCELLANEOUS) .setSmallIcon(resourceProvider.getIconCheckingMail()) .setWhen(System.currentTimeMillis()) .setOngoing(true) .setTicker(tickerText) .setContentTitle(title) .setContentText(text) .setContentIntent(showMessageListPendingIntent) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setCategory(NotificationCompat.CATEGORY_SERVICE); if (NOTIFICATION_LED_WHILE_SYNCING) { notificationHelper.configureNotification(builder, null, null, account.getNotificationSetting().getLedColor(), NOTIFICATION_LED_BLINK_FAST, true); } getNotificationManager().notify(notificationId, builder.build()); }
FetchProfile fp, SyncListener listener) throws MessagingException { final String folder = remoteFolder.getServerId();
FetchProfile fp, SyncListener listener) throws MessagingException { final String folder = remoteFolder.getServerId();