Re: Re: Maildir is not visible

Chris Burdess <[email protected]> Wed, 23 May 2007 10:30:22 +0100
Newsgroups gmane.comp.java.classpath.extensions.javamail
Message-ID <[email protected]>
Matej Cepl wrote:
> So, with help from people on comp.lang.java.help I found a solution  
> which
> at least compiles and works somehow. However, not correctly. This  
> is the
> source:
>
>    import java.util.*;
>    import javax.mail.*;
>
>    public class CopyFolder {
>
>       /**
>        * @param args
>        * @throws MessagingException
>        */
>       public static void main(String[] args) throws \
>             MessagingException {
>          String urlStr = "/home/matej/.eclipse/workspace"+
>             "/kmail2tbfolders/examples/";
>          Session session = Session.getInstance(new \
>             Properties());
>          session.setDebug(true);
>          URLName storeURL = new URLName("mbox://"+urlStr); Store  
> mboxStore
>          = session.getStore(storeURL); mboxStore.connect();
>          Folder mboxFolder = mboxStore.getDefaultFolder();  
> mboxFolder =
>          mboxStore.getFolder("test"); mboxFolder.open 
> (Folder.READ_ONLY);
>
>          URLName store2URL = new URLName("maildir://"+
>             urlStr+"/output/");
>          Store maildirStore = session.getStore(store2URL); Folder
>          targetFolder = maildirStore.getDefaultFolder();  
> targetFolder =
>          targetFolder.getFolder("target"); if (!targetFolder.exists 
> ()) {
>             try {
>                targetFolder.create (Folder.HOLDS_MESSAGES);
>             }
>             catch(Exception e) {
>                System.err.println("Cannot create target foldr: "+
>                      e.getLocalizedMessage());
>                throw new RuntimeException(e);
>             }
>          }
>          System.out.println("name of the folder is "+
>             targetFolder.getName());
>          targetFolder.open(Folder.READ_WRITE);
>
>          Message[] messages = mboxFolder.getMessages();
>          System.out.println("There are "+mboxFolder.getMessageCount()+
>                " messages in the source folder");
>          System.out.println("There are "+messages.length+
> 		" messages in the selection");
>          targetFolder.appendMessages(messages); System.out.println 
> ("There
>          are "+targetFolder.getMessageCount()+
>                " messages in the target folder");
>
>          mboxStore.close();
>          maildirStore.close();
>       }
>
>    }
>
> However, when I run it I don't get expected results:
>
> [matej@hubmaier kmail2tbfolders]$ rm -rf examples/output/  
> [matej@hubmaier
> kmail2tbfolders]$ ls -lh examples/ celkem 2,0M
> -rw-rw-rw- 1 matej matej 2,0M kvÄ›  2 20:23 test [matej@hubmaier
> kmail2tbfolders]$ java CopyFolder name of the folder is target
> There are 40 messages in the source folder There are 40 messages in  
> the
> selection There are 0 messages in the target folder [matej@hubmaier
> kmail2tbfolders]$ find examples/output/target/* -type f | wc -l
> 6
> [matej@hubmaier kmail2tbfolders]$
>
> And truly there are only 6 messages in the create maildir folder. Any
> ideas why this doesn't work as expected? I feel so close, and yet I am
> still not there!
>
> Thanks for any reply,

There shouldn't be any actual files in the maildir folder. There  
should just be 3 directories: cur, new, and tmp. The messages should  
have been created in the tmp dir, and then renamed to its final  
location in either cur or new, depending on whether they contain the  
SEEN flag. What patform are you using, perhaps it doesn't implement  
File.renameTo correctly? We could add some validation after the  
renameTo to ensure that the target file was created properly in each  
instance, and bail with an appropriate error message if not.

You should also register a MessageCountListener on the target folder  
to see which messages were actually added. For instance, only  
MimeMessages can be appended to a MaildirFolder.