package magic.ui.widget.alerter; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import magic.data.GeneralConfig; import magic.ui.helpers.UrlHelper; import magic.data.json.NewVersionJsonParser; import magic.ui.ScreenController; import magic.translate.MText; @SuppressWarnings("serial") public class NewVersionAlertButton extends AlertButton { // translatable strings private static final String _S1 = "Version %s has been released."; private static final String _S2 = "Open download page"; private static final String _S3 = "Don't remind me again"; private static final String _S4 = "Cancel"; private static final String _S5 = "New version alert"; private static final String _S6 = "New version released (%s)"; private String newVersion = ""; private static boolean hasChecked = false; @Override protected AbstractAction getAlertAction() { return new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { setVisible(false); String[] buttons = {MText.get(_S2), MText.get(_S3), MText.get(_S4)}; int rc = JOptionPane.showOptionDialog(ScreenController.getFrame(), MText.get(_S1, newVersion), MText.get(_S5), 0, JOptionPane.INFORMATION_MESSAGE, null, buttons, buttons[0]); if (rc == 0) { UrlHelper.openURL(UrlHelper.URL_HOMEPAGE); // don't display alert again until next restart. newVersion = ""; } else if (rc == 1) { // suppress alert for this release. final GeneralConfig config = GeneralConfig.getInstance(); config.setIgnoredVersionAlert(newVersion); config.save(); setVisible(false); } else { setVisible(true); } } }; } @Override protected String getAlertCaption() { assert !SwingUtilities.isEventDispatchThread(); // Only download json once at startup. if (!hasChecked) { newVersion = NewVersionJsonParser.getLatestVersion(); hasChecked = true; } if (isNewVersionAvailable()) { return MText.get(_S6, newVersion); } else { return ""; } } private boolean isNewVersionAvailable() { final String ignoredVersion = GeneralConfig.getInstance().getIgnoredVersionAlert(); return !newVersion.isEmpty() && !ignoredVersion.equals(newVersion); } }