Ignore:
Timestamp:
2013-12-24T20:26:51+01:00 (10 years ago)
Author:
Don-vip
Message:

Ask user to change proxy settings when proxy errors occur at startup (useful when a laptop is often used between two locations with different proxy settings)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/MainApplication.java

    r6471 r6523  
    77import gnu.getopt.LongOpt;
    88
     9import java.awt.Dimension;
    910import java.awt.Image;
    1011import java.awt.Toolkit;
     
    2829
    2930import javax.swing.JFrame;
     31import javax.swing.JOptionPane;
    3032import javax.swing.RepaintManager;
    3133import javax.swing.SwingUtilities;
     
    3335import org.jdesktop.swinghelper.debug.CheckThreadViolationRepaintManager;
    3436import org.openstreetmap.josm.Main;
     37import org.openstreetmap.josm.actions.PreferencesAction;
    3538import org.openstreetmap.josm.data.AutosaveTask;
    3639import org.openstreetmap.josm.data.CustomConfigurator;
    37 import org.openstreetmap.josm.data.Preferences;
    3840import org.openstreetmap.josm.data.Version;
    3941import org.openstreetmap.josm.gui.download.DownloadDialog;
    4042import org.openstreetmap.josm.gui.preferences.server.OAuthAccessTokenHolder;
     43import org.openstreetmap.josm.gui.preferences.server.ProxyPreference;
    4144import org.openstreetmap.josm.gui.progress.ProgressMonitor;
    4245import org.openstreetmap.josm.gui.util.GuiHelper;
     
    340343        DefaultAuthenticator.createInstance();
    341344        Authenticator.setDefault(DefaultAuthenticator.getInstance());
    342         ProxySelector.setDefault(new DefaultProxySelector(ProxySelector.getDefault()));
     345        DefaultProxySelector proxySelector = new DefaultProxySelector(ProxySelector.getDefault());
     346        ProxySelector.setDefault(proxySelector);
    343347        OAuthAccessTokenHolder.getInstance().init(Main.pref, CredentialsManager.getInstance());
    344348
     
    407411        }
    408412
    409         final Map<Option, Collection<String>> args_final = args;
    410 
    411         SwingUtilities.invokeLater(new Runnable() {
    412             @Override
    413             public void run() {
    414                 if (AutosaveTask.PROP_AUTOSAVE_ENABLED.get()) {
    415                     AutosaveTask autosaveTask = new AutosaveTask();
    416                     List<File> unsavedLayerFiles = autosaveTask.getUnsavedLayersFiles();
    417                     if (!unsavedLayerFiles.isEmpty()) {
    418                         ExtendedDialog dialog = new ExtendedDialog(
    419                                 Main.parent,
    420                                 tr("Unsaved osm data"),
    421                                 new String[] {tr("Restore"), tr("Cancel"), tr("Discard")}
    422                                 );
    423                         dialog.setContent(
    424                                 trn("JOSM found {0} unsaved osm data layer. ",
    425                                         "JOSM found {0} unsaved osm data layers. ", unsavedLayerFiles.size(), unsavedLayerFiles.size()) +
    426                                         tr("It looks like JOSM crashed last time. Would you like to restore the data?"));
    427                         dialog.setButtonIcons(new String[] {"ok", "cancel", "dialogs/delete"});
    428                         int selection = dialog.showDialog().getValue();
    429                         if (selection == 1) {
    430                             autosaveTask.recoverUnsavedLayers();
    431                         } else if (selection == 3) {
    432                             autosaveTask.dicardUnsavedLayers();
    433                         }
    434                     }
    435                     autosaveTask.schedule();
    436                 }
    437 
    438                 postConstructorProcessCmdLine(args_final);
    439 
    440                 DownloadDialog.autostartIfNeeded();
    441             }
    442         });
     413        SwingUtilities.invokeLater(new GuiFinalizationWorker(args, proxySelector));
    443414
    444415        if (RemoteControl.PROP_REMOTECONTROL_ENABLED.get()) {
     
    456427        }
    457428    }
     429
     430    private static class GuiFinalizationWorker implements Runnable {
     431
     432        private final Map<Option, Collection<String>> args;
     433        private final DefaultProxySelector proxySelector;
     434
     435        public GuiFinalizationWorker(Map<Option, Collection<String>> args, DefaultProxySelector proxySelector) {
     436            this.args = args;
     437            this.proxySelector = proxySelector;
     438        }
     439
     440        @Override
     441        public void run() {
     442
     443            // Handle proxy errors early to inform user he should change settings to be able to use JOSM correctly
     444            handleProxyErrors();
     445
     446            // Restore autosave layers after crash and start autosave thread
     447            handleAutosave();
     448
     449            // Handle command line instructions
     450            postConstructorProcessCmdLine(args);
     451
     452            // Show download dialog if autostart is enabled
     453            DownloadDialog.autostartIfNeeded();
     454        }
     455
     456        private void handleAutosave() {
     457            if (AutosaveTask.PROP_AUTOSAVE_ENABLED.get()) {
     458                AutosaveTask autosaveTask = new AutosaveTask();
     459                List<File> unsavedLayerFiles = autosaveTask.getUnsavedLayersFiles();
     460                if (!unsavedLayerFiles.isEmpty()) {
     461                    ExtendedDialog dialog = new ExtendedDialog(
     462                            Main.parent,
     463                            tr("Unsaved osm data"),
     464                            new String[] {tr("Restore"), tr("Cancel"), tr("Discard")}
     465                            );
     466                    dialog.setContent(
     467                            trn("JOSM found {0} unsaved osm data layer. ",
     468                                    "JOSM found {0} unsaved osm data layers. ", unsavedLayerFiles.size(), unsavedLayerFiles.size()) +
     469                                    tr("It looks like JOSM crashed last time. Would you like to restore the data?"));
     470                    dialog.setButtonIcons(new String[] {"ok", "cancel", "dialogs/delete"});
     471                    int selection = dialog.showDialog().getValue();
     472                    if (selection == 1) {
     473                        autosaveTask.recoverUnsavedLayers();
     474                    } else if (selection == 3) {
     475                        autosaveTask.dicardUnsavedLayers();
     476                    }
     477                }
     478                autosaveTask.schedule();
     479            }
     480        }
     481
     482        private static String getHtmlList(Collection<String> set) {
     483            StringBuilder sb = new StringBuilder("<ul>");
     484            for (String s : set) {
     485                sb.append("<li>"+s+"</li>");
     486            }
     487            return sb.append("</ul>").toString();
     488        }
     489
     490        private void handleProxyErrors() {
     491            if (proxySelector.hasErrors()) {
     492                ExtendedDialog ed = new ExtendedDialog(
     493                        Main.parent, tr("Proxy errors occured"),
     494                        new String[]{tr("Change proxy settings"), tr("Cancel")});
     495                ed.setButtonIcons(new String[]{"dialogs/settings.png", "cancel.png"}).setCancelButton(2);
     496                ed.setMinimumSize(new Dimension(460, 260));
     497                ed.setIcon(JOptionPane.WARNING_MESSAGE);
     498                ed.setContent(tr("JOSM tried to access the following resources:")+
     499                        "<br>"+getHtmlList(proxySelector.getErrorResources())+
     500                        tr("but <b>failed</b> to do so, because of the following proxy errors:")+
     501                        "<br>"+getHtmlList(proxySelector.getErrorMessages())+
     502                        tr("Would you like to change your proxy settings now ?")
     503                        );
     504
     505                if (ed.showDialog().getValue() == 1) {
     506                    PreferencesAction.forPreferenceSubTab(null, null, ProxyPreference.class).run();
     507                }
     508            }
     509        }
     510    }
    458511}
Note: See TracChangeset for help on using the changeset viewer.