diff --git a/swing/src/net/sf/openrocket/gui/dialogs/preferences/GeneralPreferencesPanel.java b/swing/src/net/sf/openrocket/gui/dialogs/preferences/GeneralPreferencesPanel.java index 05c340dab..576328776 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/preferences/GeneralPreferencesPanel.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/preferences/GeneralPreferencesPanel.java @@ -24,8 +24,10 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import net.miginfocom.swing.MigLayout; +import net.sf.openrocket.communication.ReleaseInfo; import net.sf.openrocket.communication.UpdateInfo; import net.sf.openrocket.communication.UpdateInfoRetriever; +import net.sf.openrocket.communication.UpdateInfoRetriever.ReleaseStatus; import net.sf.openrocket.gui.components.DescriptionArea; import net.sf.openrocket.gui.components.StyledLabel; import net.sf.openrocket.gui.components.StyledLabel.Style; @@ -239,7 +241,7 @@ public class GeneralPreferencesPanel extends PreferencesPanel { private void checkForUpdates() { final UpdateInfoRetriever retriever = new UpdateInfoRetriever(); - retriever.start(); + retriever.startFetchUpdateInfo(); // Progress dialog @@ -290,30 +292,47 @@ public class GeneralPreferencesPanel extends PreferencesPanel { // Check result UpdateInfo info = retriever.getUpdateInfo(); + + // Something went wrong if (info == null) { JOptionPane.showMessageDialog(this, //// An error occurred while communicating with the server. trans.get("pref.dlg.lbl.msg1"), //// Unable to retrieve update information trans.get("pref.dlg.lbl.msg2"), JOptionPane.WARNING_MESSAGE, null); - } else if (info.getLatestVersion() == null || - info.getLatestVersion().equals("") || - BuildProperties.getVersion().equalsIgnoreCase(info.getLatestVersion())) { - JOptionPane.showMessageDialog(this, - //// You are running the latest version of OpenRocket. - trans.get("pref.dlg.lbl.msg3"), - //// No updates available - trans.get("pref.dlg.lbl.msg4"), JOptionPane.INFORMATION_MESSAGE, null); - } else { - UpdateInfoDialog infoDialog = new UpdateInfoDialog(info); - infoDialog.setVisible(true); - if (infoDialog.isReminderSelected()) { - preferences.putString(SwingPreferences.LAST_UPDATE, ""); - } else { - preferences.putString(SwingPreferences.LAST_UPDATE, info.getLatestVersion()); - } + return; + } + + // Something went wrong, but we know what went wrong + if (info.getException() != null) { + JOptionPane.showMessageDialog(this, + info.getException().getMessage(), + "Could not check for updates", JOptionPane.WARNING_MESSAGE, null); // TODO: replace by trans + return; + } + + // Nothing went wrong (yay!) + ReleaseStatus status = info.getReleaseStatus(); + ReleaseInfo release = info.getLatestRelease(); + switch (status) { + case LATEST: + JOptionPane.showMessageDialog(this, + //// You are running the latest version of OpenRocket. + String.format(trans.get("update.dlg.latestVersion"), BuildProperties.getVersion()), + //// No updates available + trans.get("update.dlg.latestVersion.title"), JOptionPane.INFORMATION_MESSAGE, null); + break; + case NEWER: + JOptionPane.showMessageDialog(this, + //// You are running the latest version of OpenRocket. + String.format("
%s", 400, String.format("You are either running a test/unofficial release of OpenRocket, or you have a time machine and are running an official release from the future.\n\nYour version: %s\nLatest official release: %s", + BuildProperties.getVersion(), release.getReleaseName())), // TODO: trans + //// No updates available + "Newer version", JOptionPane.INFORMATION_MESSAGE, null); // TODO: trans + break; + case OLDER: + UpdateInfoDialog infoDialog = new UpdateInfoDialog(info); + infoDialog.setVisible(true); } - } - }