/** * */ package fr.cedrik.email.fs.maildir; import java.io.File; import java.io.IOException; import java.util.List; import com.sun.mail.imap.protocol.BASE64MailboxEncoder; import fr.cedrik.email.FoldersList; import fr.cedrik.inotes.Folder; /** * @author Cédrik LIME */ public class MH extends MailDirPP implements fr.cedrik.email.MainRunner.Main { public MH() throws IOException { super(); } /** * @param args */ public static void main(String[] args) throws IOException { new MH().run(args, null); } /** * @param args */ @Override public void _main(String[] args) throws IOException { main(args); } @Override protected void help() { System.out.println("Usage: "+MH.class.getSimpleName()+" <out_dir>"); } @Override protected boolean prepareDestinationObjects(String baseName, String extension) { String dirName = baseName; try { this.writer = new MHWriter(new File(dirName)); } catch (IOException e) { return false; } return true; } @Override protected String computeMaildirFolderName(Folder folder, FoldersList folders) { if (folder.isInbox()) { return baseMailDir.getPath(); } else { // compute MailDir++ full folder name and encode each segment List<Folder> foldersChain = folders.getFoldersChain(folder); StringBuilder result = new StringBuilder(); for (Folder parent : foldersChain) { result.append(encodeFolderName(parent.getName())); result.append(File.separatorChar); } result.deleteCharAt(result.length() - 1); // remove trailing '/' return new File(baseMailDir, result.toString()).getPath(); } } /** * @see RFC2060 5.1.3. Mailbox International Naming Convention + special treatment for '/' */ @Override protected String encodeFolderName(String folderName) { return BASE64MailboxEncoder.encode(folderName).replace("/", "&AC8-"); } }