1 package org.columba.mail.main; 17 18 import java.awt.BorderLayout ; 19 import java.util.logging.Logger ; 20 21 import javax.swing.JCheckBox ; 22 import javax.swing.JOptionPane ; 23 import javax.swing.JPanel ; 24 25 import org.apache.commons.cli.CommandLine; 26 import org.apache.commons.cli.Option; 27 import org.apache.commons.cli.OptionBuilder; 28 import org.columa.core.config.IDefaultItem; 29 import org.columba.api.plugin.PluginLoadingFailedException; 30 import org.columba.core.backgroundtask.BackgroundTaskManager; 31 import org.columba.core.component.api.IComponentPlugin; 32 import org.columba.core.config.DefaultItem; 33 import org.columba.core.connectionstate.ConnectionStateImpl; 34 import org.columba.core.facade.ServiceFacadeRegistry; 35 import org.columba.core.gui.base.MultiLineLabel; 36 import org.columba.core.gui.frame.DefaultContainer; 37 import org.columba.core.gui.frame.FrameManager; 38 import org.columba.core.main.ColumbaCmdLineParser; 39 import org.columba.core.shutdown.ShutdownManager; 40 import org.columba.mail.config.IncomingItem; 41 import org.columba.mail.config.MailConfig; 42 import org.columba.mail.facade.DialogFacade; 43 import org.columba.mail.folder.IMailFolder; 44 import org.columba.mail.folder.virtual.ActivateVirtualFolderCommand; 45 import org.columba.mail.gui.composer.ComposerController; 46 import org.columba.mail.gui.composer.ComposerModel; 47 import org.columba.mail.gui.config.accountwizard.AccountWizardLauncher; 48 import org.columba.mail.gui.tree.FolderTreeModel; 49 import org.columba.mail.nativ.defaultmailclient.SystemDefaultMailClientHandler; 50 import org.columba.mail.parser.MailUrlParser; 51 import org.columba.mail.pgp.MultipartEncryptedRenderer; 52 import org.columba.mail.pgp.MultipartSignedRenderer; 53 import org.columba.mail.shutdown.ClearRecentFlagPlugin; 54 import org.columba.mail.shutdown.SaveAllFoldersPlugin; 55 import org.columba.mail.shutdown.SavePOP3CachePlugin; 56 import org.columba.mail.spam.SaveSpamDBPlugin; 57 import org.columba.mail.util.MailResourceLoader; 58 import org.columba.ristretto.composer.MimeTreeRenderer; 59 import org.columba.ristretto.parser.ParserException; 60 61 66 public class MailMain implements IComponentPlugin { 67 68 private static final Logger LOG = Logger.getLogger("org.columba.mail.main"); 69 70 public MailMain() { 71 } 72 73 76 public void init() { 77 MimeTreeRenderer renderer = MimeTreeRenderer.getInstance(); 79 renderer.addMimePartRenderer(new MultipartSignedRenderer()); 80 renderer.addMimePartRenderer(new MultipartEncryptedRenderer()); 81 82 94 95 96 Runnable plugin = new SaveAllFoldersPlugin(); 97 BackgroundTaskManager.getInstance().register(plugin); 98 99 plugin = new SavePOP3CachePlugin(); 100 BackgroundTaskManager.getInstance().register(plugin); 101 ShutdownManager.getInstance().register(plugin); 102 103 plugin = new SaveSpamDBPlugin(); 104 BackgroundTaskManager.getInstance().register(plugin); 105 ShutdownManager.getInstance().register(plugin); 106 107 plugin = new ClearRecentFlagPlugin(); 108 ShutdownManager.getInstance().register(plugin); 109 110 ServiceFacadeRegistry.getInstance().register( 111 org.columba.mail.facade.IDialogFacade.class, 112 new DialogFacade()); 113 } 114 115 public void registerCommandLineArguments() { 116 ColumbaCmdLineParser parser = ColumbaCmdLineParser.getInstance(); 117 118 Option composeOption = new Option("compose", true, "compose message"); 119 parser.addOption(composeOption); 120 121 Option mailOption = OptionBuilder.create("mail"); 122 mailOption.setOptionalArg(true); 123 124 parser.addOption(mailOption); 125 } 126 127 130 public void handleCommandLineParameters(CommandLine commandLine) { 131 132 if (commandLine.hasOption("mail")) { 133 if (commandLine.getOptionValue("mail") != null) { 135 try { 136 ComposerModel model = new ComposerModel(MailUrlParser 137 .parse(commandLine.getOptionValue("mail"))); 138 139 ComposerController controller = new ComposerController(); 141 new DefaultContainer(controller); 142 143 controller.setComposerModel(model); 144 145 ColumbaCmdLineParser.getInstance().setRestoreLastSession(false); 146 } catch (ParserException e1) { 147 LOG.warning(e1.getLocalizedMessage()); 148 } 149 } else { 150 try { 151 FrameManager.getInstance().openView("ThreePaneMail"); 152 153 ColumbaCmdLineParser.getInstance().setRestoreLastSession(false); 154 } catch (PluginLoadingFailedException e) { 155 LOG.severe(e.getLocalizedMessage()); 156 } 157 } 158 } 159 160 if (commandLine.hasOption("compose")) { 161 String option = commandLine.getOptionValue("compose"); 162 ComposerModel model = new ComposerModel(MessageOptionParser 163 .parse(option)); 164 165 ComposerController controller = new ComposerController(); 166 new DefaultContainer(controller); 167 168 controller.setComposerModel(model); 169 170 ColumbaCmdLineParser.getInstance().setRestoreLastSession(false); 171 } 172 } 173 174 177 public void postStartup() { 178 checkDefaultClient(); 180 181 if (MailConfig.getInstance().getAccountList().count() == 0) { 183 new AccountWizardLauncher().launchWizard(true); 184 } 185 186 if (MailConfig.getInstance().getAccountList().count() > 0) { 188 try { 189 IncomingItem testConnection = MailConfig.getInstance() 190 .getAccountList().getDefaultAccount().getIncomingItem(); 191 ConnectionStateImpl.getInstance().setTestConnection( 192 testConnection.get("host"), 193 testConnection.getInteger("port")); 194 ConnectionStateImpl.getInstance().checkPhysicalState(); 195 } catch (RuntimeException e) { 196 e.printStackTrace(); 197 } 198 } 199 200 ActivateVirtualFolderCommand.activateAll((IMailFolder) FolderTreeModel 202 .getInstance().getRoot()); 203 } 204 205 private void checkDefaultClient() { 206 SystemDefaultMailClientHandler defaultClientHandler = new SystemDefaultMailClientHandler(); 208 IDefaultItem item = new DefaultItem(MailConfig.getInstance().get( 209 "options")); 210 211 boolean checkDefault = item.getBooleanWithDefault( 212 "options/defaultclient", "check", true); 213 214 if (checkDefault 215 && defaultClientHandler.platfromSupportsDefaultMailClient()) { 216 if (!defaultClientHandler.isDefaultMailClient()) { 217 218 JPanel panel = new JPanel (new BorderLayout (0, 10)); 219 220 panel.add(new MultiLineLabel(MailResourceLoader.getString( 221 "dialog", "defaultclient", "make_default")), 222 BorderLayout.NORTH); 223 224 JCheckBox askAgain = new JCheckBox (MailResourceLoader 225 .getString("dialog", "defaultclient", "ask_no_more")); 226 panel.add(askAgain, BorderLayout.CENTER); 227 228 231 while (!(FrameManager.getInstance().getActiveFrame().isDisplayable())) { 234 try { 235 Thread.sleep(100); 236 } catch (InterruptedException e) { 237 LOG.severe(e.getMessage()); 238 } 239 } 240 241 if (!FrameManager.getInstance().getActiveFrame().isValid()) 243 FrameManager.getInstance().getActiveFrame().doLayout(); 244 245 int result = JOptionPane.showConfirmDialog(FrameManager 246 .getInstance().getActiveFrame(), panel, 247 MailResourceLoader.getString("dialog", "defaultclient", 248 "title"), JOptionPane.YES_NO_OPTION); 249 if (result == JOptionPane.OK_OPTION) { 250 defaultClientHandler.setDefaultMailClient(); 251 } 252 253 item.setBoolean("options/defaultclient", "check", !askAgain 254 .isSelected()); 255 } 256 } 257 } 258 259 } | Popular Tags |