1 package org.columba.mail.smtp.command; 19 20 import java.io.IOException ; 21 22 import javax.swing.JOptionPane ; 23 24 import org.columba.api.command.ICommandReference; 25 import org.columba.api.command.IWorkerStatusChangeListener; 26 import org.columba.api.command.IWorkerStatusController; 27 import org.columba.api.command.WorkerStatusChangedEvent; 28 import org.columba.core.command.Command; 29 import org.columba.core.command.CommandProcessor; 30 import org.columba.core.command.Worker; 31 import org.columba.core.gui.frame.FrameManager; 32 import org.columba.mail.command.ComposerCommandReference; 33 import org.columba.mail.command.IMailFolderCommandReference; 34 import org.columba.mail.composer.MessageComposer; 35 import org.columba.mail.composer.SendableMessage; 36 import org.columba.mail.config.AccountItem; 37 import org.columba.mail.folder.IMailbox; 38 import org.columba.mail.folder.command.MarkMessageCommand; 39 import org.columba.mail.gui.composer.ComposerController; 40 import org.columba.mail.gui.composer.ComposerModel; 41 import org.columba.mail.gui.composer.command.SaveMessageCommand; 42 import org.columba.mail.gui.tree.FolderTreeModel; 43 import org.columba.mail.gui.util.SendMessageDialog; 44 import org.columba.mail.pgp.CancelledException; 45 import org.columba.mail.smtp.SMTPServer; 46 import org.columba.mail.util.MailResourceLoader; 47 import org.columba.ristretto.message.Flags; 48 import org.waffel.jscf.JSCFException; 49 50 62 public class SendMessageCommand extends Command { 63 private SendMessageDialog sendMessageDialog; 64 65 private boolean showComposer = false; 66 67 private ComposerController composerController; 68 69 75 public SendMessageCommand(ICommandReference reference) { 76 super(reference); 77 } 78 79 80 81 86 private boolean validArguments(ComposerCommandReference reference) { 87 88 90 96 97 return true; 120 121 } 122 123 126 public void execute(IWorkerStatusController worker) throws Exception { 127 128 ComposerCommandReference r = (ComposerCommandReference) getReference(); 129 130 if (!validArguments(r)) 131 return; 132 133 worker.setDisplayText(MailResourceLoader.getString("statusbar", 135 "message", "send_message_compose")); 136 137 composerController = r.getComposerController(); 140 141 if (composerController.getView().getFrame() != null) { 143 composerController.getView().getFrame().setVisible(false); 144 } 145 146 sendMessageDialog = new SendMessageDialog(worker); 147 148 ComposerModel model = ((ComposerModel) composerController.getModel()); 149 150 AccountItem item = model.getAccountItem(); 151 152 IMailbox sentFolder = (IMailbox) FolderTreeModel.getInstance() 154 .getFolder(item.getSpecialFoldersItem().get("sent")); 155 156 SendableMessage message = null; 158 159 try { 160 message = new MessageComposer(model).compose(worker, r 162 .isAppendSignature()); 163 164 } catch (JSCFException e1) { 165 if (e1 instanceof CancelledException) { 166 showComposer = true; 169 170 return; 171 } else { 172 JOptionPane.showMessageDialog(FrameManager.getInstance() 173 .getActiveFrame(), e1.getMessage()); 174 175 showComposer = true; 177 178 return; 179 } 180 } 181 182 worker.setDisplayText(MailResourceLoader.getString("statusbar", 184 "message", "send_message_connect")); 185 186 final SMTPServer server = new SMTPServer(item); 188 189 try { 191 worker.setDisplayText(MailResourceLoader.getString("statusbar", 193 "message", "send_message")); 194 195 IWorkerStatusChangeListener listener = new IWorkerStatusChangeListener() { 196 public void workerStatusChanged(WorkerStatusChangedEvent e) { 197 if (e.getSource().cancelled()) { 198 try { 199 server.dropConnection(); 200 } catch (IOException e1) { 201 } 202 } 203 204 } 205 }; 206 207 worker.addWorkerStatusChangeListener(listener); 209 210 server.sendMessage(message, worker); 212 213 worker.removeWorkerStatusChangeListener(listener); 215 216 if (worker.cancelled()) { 217 showComposer = true; 218 return; 219 } 220 221 Flags flags = new Flags(); 223 flags.setSeen(true); 224 message.getHeader().setFlags(flags); 225 226 ComposerCommandReference ref = new ComposerCommandReference( 228 composerController, sentFolder); 229 ref.setMessage(message); 230 231 SaveMessageCommand c = new SaveMessageCommand(ref); 232 233 CommandProcessor.getInstance().addOp(c); 234 235 IMailFolderCommandReference ref2 = model.getSourceReference(); 239 if (ref2 != null 240 && ((IMailbox) ref2.getSourceFolder()).exists(ref2 241 .getUids()[0])) { 242 ref2.setMarkVariant(MarkMessageCommand.MARK_AS_ANSWERED); 244 MarkMessageCommand c1 = new MarkMessageCommand(ref2); 245 CommandProcessor.getInstance().addOp(c1); 246 } 247 248 worker.setDisplayText(MailResourceLoader.getString("statusbar", 250 "message", "send_message_closing")); 251 252 server.closeConnection(); 254 255 worker.setDisplayText(MailResourceLoader.getString("statusbar", 257 "message", "send_message_success")); 258 } catch (Exception e) { 264 266 showComposer = true; 268 269 throw e; 270 } 271 } 272 273 public void updateGUI() throws Exception { 274 275 if (sendMessageDialog != null) { 277 sendMessageDialog.setVisible(false); 279 } 280 281 if (showComposer == true 282 && composerController.getView().getFrame() != null) { 283 composerController.getView().getFrame().setVisible(true); 285 composerController.getView().getFrame().requestFocus(); 286 } else { 287 composerController.setPromptOnDialogClosing(false); 289 composerController.fireClosed(); 291 } 292 } 293 } | Popular Tags |