From 1c2871a389e8cc5714faeb212836c159c3a1b43b Mon Sep 17 00:00:00 2001 From: 4pr0n Date: Sat, 5 Apr 2014 16:57:54 -0700 Subject: [PATCH] Prettying the updater UI Doesn't freeze on "check for updates". Pop-up confirmation dialog. --- pom.xml | 2 +- .../com/rarchives/ripme/ui/MainWindow.java | 39 +++++++++++++------ .../com/rarchives/ripme/ui/UpdateUtils.java | 38 ++++++++++++++---- 3 files changed, 59 insertions(+), 20 deletions(-) diff --git a/pom.xml b/pom.xml index e838effd..0e0229f6 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.rarchives.ripme ripme jar - 1.0.3 + 1.0.4 ripme http://rip.rarchives.com diff --git a/src/main/java/com/rarchives/ripme/ui/MainWindow.java b/src/main/java/com/rarchives/ripme/ui/MainWindow.java index 49a8b42e..191a718b 100644 --- a/src/main/java/com/rarchives/ripme/ui/MainWindow.java +++ b/src/main/java/com/rarchives/ripme/ui/MainWindow.java @@ -19,6 +19,7 @@ import java.net.URL; import javax.swing.DefaultListModel; import javax.swing.JButton; +import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; @@ -80,10 +81,13 @@ public class MainWindow implements Runnable, RipStatusHandler { private static JPanel configurationPanel; private static JButton configUpdateButton; private static JLabel configUpdateLabel; + private static JTextField configTimeoutText; + private static JTextField configThreadsText; + private static JCheckBox configOverwriteCheckbox; // TODO Configuration components public MainWindow() { - mainFrame = new JFrame(WINDOW_TITLE); + mainFrame = new JFrame(WINDOW_TITLE + " v" + UpdateUtils.getThisJarVersion()); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //mainFrame.setPreferredSize(new Dimension(400, 180)); //mainFrame.setResizable(false); @@ -196,15 +200,23 @@ public class MainWindow implements Runnable, RipStatusHandler { configurationPanel.setVisible(false); configurationPanel.setPreferredSize(new Dimension(300, 250)); // TODO Configuration components - JLabel configLabel = new JLabel("Version: " + UpdateUtils.getThisJarVersion()); configUpdateButton = new JButton("Check for updates"); - configUpdateLabel = new JLabel(""); - gbc.gridy = 0; configurationPanel.add(configLabel, gbc); - gbc.gridy = 1; configurationPanel.add(configUpdateButton, gbc); - gbc.ipady = 50; - gbc.gridy = 2; configurationPanel.add(configUpdateLabel, gbc); - gbc.ipady = 10; - + configUpdateLabel = new JLabel("Current version: " + UpdateUtils.getThisJarVersion(), JLabel.RIGHT); + JLabel configTimeoutLabel = new JLabel("Timeout (in milliseconds):", JLabel.RIGHT); + JLabel configThreadsLabel = new JLabel("Maximum download threads:", JLabel.RIGHT); + configTimeoutText = new JTextField(Integer.toString(Utils.getConfigInteger("download.timeout", 60000))); + configThreadsText = new JTextField(Integer.toString(Utils.getConfigInteger("threads.size", 3))); + configOverwriteCheckbox = new JCheckBox("Overwrite existing files?", Utils.getConfigBoolean("file.overwrite", false)); + configOverwriteCheckbox.setHorizontalAlignment(JCheckBox.RIGHT); + configOverwriteCheckbox.setHorizontalTextPosition(JCheckBox.LEFT); + gbc.gridy = 0; gbc.gridx = 0; configurationPanel.add(configUpdateLabel, gbc); + gbc.gridx = 1; configurationPanel.add(configUpdateButton, gbc); + gbc.gridy = 1; gbc.gridx = 0; configurationPanel.add(configTimeoutLabel, gbc); + gbc.gridx = 1; configurationPanel.add(configTimeoutText, gbc); + gbc.gridy = 2; gbc.gridx = 0; configurationPanel.add(configThreadsLabel, gbc); + gbc.gridx = 1; configurationPanel.add(configThreadsText, gbc); + gbc.gridy = 3; gbc.gridx = 0; configurationPanel.add(configOverwriteCheckbox, gbc); + gbc.gridy = 0; pane.add(ripPanel, gbc); gbc.gridy = 1; pane.add(statusPanel, gbc); gbc.gridy = 2; pane.add(progressPanel, gbc); @@ -295,12 +307,17 @@ public class MainWindow implements Runnable, RipStatusHandler { configUpdateButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { - UpdateUtils.updateProgram(configUpdateLabel); + Thread t = new Thread() { + @Override + public void run() { + UpdateUtils.updateProgram(configUpdateLabel); + } + }; + t.start(); } }); } - private void appendLog(final String text, final Color color) { SimpleAttributeSet sas = new SimpleAttributeSet(); StyleConstants.setForeground(sas, color); diff --git a/src/main/java/com/rarchives/ripme/ui/UpdateUtils.java b/src/main/java/com/rarchives/ripme/ui/UpdateUtils.java index 587c70f5..f971a5e9 100644 --- a/src/main/java/com/rarchives/ripme/ui/UpdateUtils.java +++ b/src/main/java/com/rarchives/ripme/ui/UpdateUtils.java @@ -5,6 +5,7 @@ import java.io.FileOutputStream; import java.io.IOException; import javax.swing.JLabel; +import javax.swing.JOptionPane; import org.apache.log4j.Logger; import org.json.JSONArray; @@ -16,7 +17,7 @@ import org.jsoup.nodes.Document; public class UpdateUtils { private static final Logger logger = Logger.getLogger(UpdateUtils.class); - private static final String DEFAULT_VERSION = "100.0.0"; + private static final String DEFAULT_VERSION = "1.0.4"; private static final String updateJsonURL = "http://rarchives.com/ripme.json"; private static final String updateJarURL = "http://rarchives.com/ripme.jar"; private static final String mainFileName = "ripme.jar"; @@ -32,7 +33,7 @@ public class UpdateUtils { } public static void updateProgram(JLabel configUpdateLabel) { - configUpdateLabel.setText("Checking for update...:"); + configUpdateLabel.setText("Checking for update..."); Document doc = null; try { @@ -40,32 +41,53 @@ public class UpdateUtils { .ignoreContentType(true) .get(); } catch (IOException e) { - configUpdateLabel.setText("Error while fetching update: " + e.getMessage()); logger.error("Error while fetching update: ", e); + JOptionPane.showMessageDialog(null, + "Error while fetching update: " + e.getMessage() + "", + "RipMe Updater", + JOptionPane.ERROR_MESSAGE); return; + } finally { + configUpdateLabel.setText("Current version: " + getThisJarVersion()); } String jsonString = doc.body().html().replaceAll(""", "\""); JSONObject json = new JSONObject(jsonString); JSONArray jsonChangeList = json.getJSONArray("changeList"); - configUpdateLabel.setText("Most recent changes:"); + StringBuilder changeList = new StringBuilder(); for (int i = 0; i < jsonChangeList.length(); i++) { String change = jsonChangeList.getString(i); - configUpdateLabel.setText(configUpdateLabel.getText() + "
+ " + change); + changeList.append("
+ " + change); } String latestVersion = json.getString("latestVersion"); if (UpdateUtils.isNewerVersion(latestVersion)) { - configUpdateLabel.setText("Newer version found!

" + configUpdateLabel.getText() + ""); + int result = JOptionPane.showConfirmDialog( + null, + "New version (" + latestVersion + ") is available!" + + "

Recent changes:" + changeList.toString() + + "

Do you want to download and run the newest version?", + "RipMe Updater", + JOptionPane.YES_NO_OPTION); + if (result != JOptionPane.YES_OPTION) { + configUpdateLabel.setText("Current Version: " + getThisJarVersion() + + "
Latest version: " + latestVersion + ""); + return; + } + configUpdateLabel.setText("Downloading new version..."); logger.info("New version found, downloading..."); try { UpdateUtils.downloadJarAndReplace(updateJarURL); } catch (IOException e) { - configUpdateLabel.setText("Error while updating: " + e.getMessage()); + JOptionPane.showMessageDialog(null, + "Error while updating: " + e.getMessage(), + "RipMe Updater", + JOptionPane.ERROR_MESSAGE); + configUpdateLabel.setText(""); logger.error("Error while updating: ", e); return; } } else { - configUpdateLabel.setText("Running latest version: " + UpdateUtils.getThisJarVersion()); + configUpdateLabel.setText("v" + UpdateUtils.getThisJarVersion() + " is the latest version"); logger.info("Running latest version: " + UpdateUtils.getThisJarVersion()); } }