package com.kescoode.xmail.domain; import android.content.Context; import com.fsck.k9.mail.Folder; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.Store; import com.kescoode.adk.log.Logger; import com.kescoode.xmail.db.FolderDao; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * 本地接收服务器的映射业务对象 * * @author Kesco Lin */ public class LocalStore extends Store { private final Context context; private final Account account; private List<LocalFolder> folders = null; public LocalStore(Context context, Account account) { this.context = context; this.account = account; } public void syncRemote(List<? extends Folder> remotes) { FolderDao dao = new FolderDao(context); folders = new ArrayList<>(); for (Folder remote : remotes) { try { remote.open(Folder.OPEN_MODE_RO); LocalFolder folder = new LocalFolder(context, account, remote); remote.close(); dao.insertFolder2DB(folder); folders.add(folder); } catch (MessagingException e) { Logger.e("Error in get infomation from Folder %s", remote.getName()); } } } @Override public LocalFolder getFolder(String name) { for (LocalFolder folder : folders) { if (folder.getName().equals(name)) { return folder; } } return null; } @Override public List<? extends Folder> getPersonalNamespaces(boolean forceListAll) throws MessagingException { /* 数据库查询会有点慢,这个请求要放在异步线程上做 */ FolderDao dao = new FolderDao(context); folders = new ArrayList<>(Arrays.asList(dao.selectFoldersFromDB(account))); return folders; } @Override public void checkSettings() throws MessagingException { if (folders == null) { /* 初始化 */ getPersonalNamespaces(true); } } @Override public boolean isMoveCapable() { return true; } @Override public boolean isCopyCapable() { return true; } }