package com.fsck.k9.mail.store.imap;
import java.util.ArrayList;
import java.util.List;
import com.fsck.k9.mail.K9MailLib;
import com.fsck.k9.mail.PushReceiver;
import com.fsck.k9.mail.Pusher;
import timber.log.Timber;
class ImapPusher implements Pusher {
private final ImapStore store;
private final PushReceiver pushReceiver;
private final List<ImapFolderPusher> folderPushers = new ArrayList<>();
private long lastRefresh = -1;
public ImapPusher(ImapStore store, PushReceiver pushReceiver) {
this.store = store;
this.pushReceiver = pushReceiver;
}
@Override
public void start(List<String> folderNames) {
synchronized (folderPushers) {
stop();
setLastRefresh(currentTimeMillis());
for (String folderName : folderNames) {
ImapFolderPusher pusher = createImapFolderPusher(folderName);
folderPushers.add(pusher);
pusher.start();
}
}
}
@Override
public void refresh() {
synchronized (folderPushers) {
for (ImapFolderPusher folderPusher : folderPushers) {
try {
folderPusher.refresh();
} catch (Exception e) {
Timber.e(e, "Got exception while refreshing for %s", folderPusher.getName());
}
}
}
}
@Override
public void stop() {
if (K9MailLib.isDebug()) {
Timber.i("Requested stop of IMAP pusher");
}
synchronized (folderPushers) {
for (ImapFolderPusher folderPusher : folderPushers) {
try {
if (K9MailLib.isDebug()) {
Timber.i("Requesting stop of IMAP folderPusher %s", folderPusher.getName());
}
folderPusher.stop();
} catch (Exception e) {
Timber.e(e, "Got exception while stopping %s", folderPusher.getName());
}
}
folderPushers.clear();
}
}
@Override
public int getRefreshInterval() {
return (store.getStoreConfig().getIdleRefreshMinutes() * 60 * 1000);
}
@Override
public long getLastRefresh() {
return lastRefresh;
}
@Override
public void setLastRefresh(long lastRefresh) {
this.lastRefresh = lastRefresh;
}
ImapFolderPusher createImapFolderPusher(String folderName) {
return new ImapFolderPusher(store, folderName, pushReceiver);
}
long currentTimeMillis() {
return System.currentTimeMillis();
}
}