package com.fsck.k9.controller;
import java.util.List;
import java.util.Map;
import com.fsck.k9.Account;
import com.fsck.k9.mail.Flag;
import com.fsck.k9.mail.MessagingException;
public class MessagingControllerCommands {
static final String COMMAND_APPEND = "append";
static final String COMMAND_MARK_ALL_AS_READ = "mark_all_as_read";
static final String COMMAND_SET_FLAG = "set_flag";
static final String COMMAND_EXPUNGE = "expunge";
static final String COMMAND_MOVE_OR_COPY = "move_or_copy";
static final String COMMAND_EMPTY_TRASH = "empty_trash";
public abstract static class PendingCommand {
public long databaseId;
PendingCommand() { }
public abstract String getCommandName();
public abstract void execute(MessagingController controller, Account account) throws MessagingException;
}
public static class PendingMoveOrCopy extends PendingCommand {
public final String srcFolder;
public final String destFolder;
public final boolean isCopy;
public final List<String> uids;
public final Map<String, String> newUidMap;
public static PendingMoveOrCopy create(String srcFolder, String destFolder, boolean isCopy,
Map<String, String> uidMap) {
return new PendingMoveOrCopy(srcFolder, destFolder, isCopy, null, uidMap);
}
public static PendingMoveOrCopy create(String srcFolder, String destFolder, boolean isCopy, List<String> uids) {
return new PendingMoveOrCopy(srcFolder, destFolder, isCopy, uids, null);
}
private PendingMoveOrCopy(String srcFolder, String destFolder, boolean isCopy, List<String> uids,
Map<String, String> newUidMap) {
this.srcFolder = srcFolder;
this.destFolder = destFolder;
this.isCopy = isCopy;
this.uids = uids;
this.newUidMap = newUidMap;
}
@Override
public String getCommandName() {
return COMMAND_MOVE_OR_COPY;
}
@Override
public void execute(MessagingController controller, Account account) throws MessagingException {
controller.processPendingMoveOrCopy(this, account);
}
}
public static class PendingEmptyTrash extends PendingCommand {
public static PendingEmptyTrash create() {
return new PendingEmptyTrash();
}
@Override
public String getCommandName() {
return COMMAND_EMPTY_TRASH;
}
@Override
public void execute(MessagingController controller, Account account) throws MessagingException {
controller.processPendingEmptyTrash(account);
}
}
public static class PendingSetFlag extends PendingCommand {
public final String folder;
public final boolean newState;
public final Flag flag;
public final List<String> uids;
public static PendingSetFlag create(String folder, boolean newState, Flag flag, List<String> uids) {
return new PendingSetFlag(folder, newState, flag, uids);
}
private PendingSetFlag(String folder, boolean newState, Flag flag, List<String> uids) {
this.folder = folder;
this.newState = newState;
this.flag = flag;
this.uids = uids;
}
@Override
public String getCommandName() {
return COMMAND_SET_FLAG;
}
@Override
public void execute(MessagingController controller, Account account) throws MessagingException {
controller.processPendingSetFlag(this, account);
}
}
public static class PendingAppend extends PendingCommand {
public final String folder;
public final String uid;
public static PendingAppend create(String folderName, String uid) {
return new PendingAppend(folderName, uid);
}
private PendingAppend(String folder, String uid) {
this.folder = folder;
this.uid = uid;
}
@Override
public String getCommandName() {
return COMMAND_APPEND;
}
@Override
public void execute(MessagingController controller, Account account) throws MessagingException {
controller.processPendingAppend(this, account);
}
}
public static class PendingMarkAllAsRead extends PendingCommand {
public final String folder;
public static PendingMarkAllAsRead create(String folder) {
return new PendingMarkAllAsRead(folder);
}
private PendingMarkAllAsRead(String folder) {
this.folder = folder;
}
@Override
public String getCommandName() {
return COMMAND_MARK_ALL_AS_READ;
}
@Override
public void execute(MessagingController controller, Account account) throws MessagingException {
controller.processPendingMarkAllAsRead(this, account);
}
}
public static class PendingExpunge extends PendingCommand {
public final String folder;
public static PendingExpunge create(String folderName) {
return new PendingExpunge(folderName);
}
private PendingExpunge(String folder) {
this.folder = folder;
}
@Override
public String getCommandName() {
return COMMAND_EXPUNGE;
}
@Override
public void execute(MessagingController controller, Account account) throws MessagingException {
controller.processPendingExpunge(this, account);
}
}
}