1 package org.columba.mail.pop3.command; 17 18 import org.columba.api.command.ICommandReference; 19 import org.columba.api.command.IWorkerStatusController; 20 import org.columba.core.command.Command; 21 import org.columba.core.command.CommandProcessor; 22 import org.columba.core.command.CompoundCommand; 23 import org.columba.core.filter.Filter; 24 import org.columba.core.filter.FilterList; 25 import org.columba.core.filter.IFilter; 26 import org.columba.core.filter.IFilterList; 27 import org.columba.mail.command.IMailFolderCommandReference; 28 import org.columba.mail.command.MailFolderCommandReference; 29 import org.columba.mail.config.AccountItem; 30 import org.columba.mail.filter.FilterCompoundCommand; 31 import org.columba.mail.folder.IMailbox; 32 import org.columba.mail.folder.RootFolder; 33 import org.columba.mail.folder.command.MarkMessageCommand; 34 import org.columba.mail.folder.command.MoveMessageCommand; 35 import org.columba.mail.gui.tree.FolderTreeModel; 36 import org.columba.mail.mailchecking.MailCheckingManager; 37 import org.columba.mail.message.IColumbaMessage; 38 import org.columba.mail.spam.command.CommandHelper; 39 import org.columba.mail.spam.command.ScoreMessageCommand; 40 import org.columba.ristretto.io.SourceInputStream; 41 42 52 public class AddPOP3MessageCommand extends Command { 53 54 private IMailbox inboxFolder; 55 56 60 public AddPOP3MessageCommand(ICommandReference reference) { 61 super(reference); 62 } 63 64 65 public void execute(IWorkerStatusController worker) throws Exception { 66 IMailFolderCommandReference r = (IMailFolderCommandReference) getReference(); 67 68 inboxFolder = (IMailbox) r.getSourceFolder(); 69 70 IColumbaMessage message = (IColumbaMessage) r.getMessage(); 71 72 SourceInputStream messageStream = new SourceInputStream(message 74 .getSource()); 75 Object uid = inboxFolder.addMessage(messageStream); 76 messageStream.close(); 77 78 r.setSourceFolder(inboxFolder); 80 r.setUids(new Object [] { uid }); 81 r.setMarkVariant(MarkMessageCommand.MARK_AS_RECENT); 82 new MarkMessageCommand(r).execute(worker); 83 84 85 86 boolean messageWasMoved = applySpamFilter(uid, worker); 88 89 if (messageWasMoved == false) { 90 applyFilters(uid); 92 } 93 } 94 95 104 private boolean applySpamFilter(Object uid, IWorkerStatusController worker) 105 throws Exception { 106 AccountItem item = CommandHelper.retrieveAccountItem(inboxFolder, uid); 108 if ( item == null ) return false; 109 110 if (!item.getSpamItem().isEnabled()) { 112 return false; 113 } 114 115 IMailFolderCommandReference r = new MailFolderCommandReference( 117 inboxFolder, new Object [] { uid }); 118 119 new ScoreMessageCommand(r).execute(worker); 121 122 boolean spam = ((Boolean ) inboxFolder.getAttribute(uid, "columba.spam")) 124 .booleanValue(); 125 if (spam == false) 126 return false; 127 128 if (item.getSpamItem().isMoveIncomingJunkMessagesEnabled()) { 129 if (item.getSpamItem().isIncomingTrashSelected()) { 130 IMailbox trash = (IMailbox) ((RootFolder) inboxFolder 132 .getRootFolder()).getTrashFolder(); 133 134 MailFolderCommandReference ref2 = new MailFolderCommandReference( 136 inboxFolder, trash, new Object [] { uid }); 137 138 CommandProcessor.getInstance().addOp( 139 new MoveMessageCommand(ref2)); 140 } else { 141 IMailbox destFolder = (IMailbox) FolderTreeModel 144 .getInstance() 145 .getFolder(item.getSpamItem().getIncomingCustomFolder()); 146 147 MailFolderCommandReference ref2 = new MailFolderCommandReference( 149 inboxFolder, destFolder, new Object [] { uid }); 150 151 CommandProcessor.getInstance().addOp( 152 new MoveMessageCommand(ref2)); 153 154 } 155 156 return true; 157 } 158 159 return false; 160 } 161 162 168 private void applyFilters(Object uid) throws Exception { 169 IFilterList list = inboxFolder.getFilterList(); 170 171 for (int j = 0; j < list.count(); j++) { 172 IFilter filter = list.get(j); 173 174 Object [] result = inboxFolder.searchMessages(filter, 175 new Object [] { uid }); 176 177 if (result.length != 0) { 178 CompoundCommand command = new FilterCompoundCommand(filter, 179 inboxFolder, result); 180 181 CommandProcessor.getInstance().addOp(command); 182 } 183 } 184 } 185 186 } | Popular Tags |