Can update script in configuration
Downloads latest jar from rarchives, saves, executes.
This commit is contained in:
parent
04de8d7a09
commit
048e53058a
1
.gitignore
vendored
1
.gitignore
vendored
@ -3,3 +3,4 @@
|
||||
ripme.log
|
||||
rips/
|
||||
.history
|
||||
ripme.jar.update
|
||||
|
4
pom.xml
4
pom.xml
@ -4,7 +4,7 @@
|
||||
<groupId>com.rarchives.ripme</groupId>
|
||||
<artifactId>ripme</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>1.0</version>
|
||||
<version>1.0.2-beta1</version>
|
||||
<name>ripme</name>
|
||||
<url>http://rip.rarchives.com</url>
|
||||
<properties>
|
||||
@ -52,6 +52,8 @@
|
||||
<archive>
|
||||
<manifest>
|
||||
<mainClass>com.rarchives.ripme.App</mainClass>
|
||||
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
|
||||
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
|
||||
</manifest>
|
||||
<manifestEntries>
|
||||
<Class-Path>./config</Class-Path>
|
||||
|
@ -17,7 +17,6 @@ import org.jsoup.Jsoup;
|
||||
import org.jsoup.nodes.Document;
|
||||
|
||||
import com.rarchives.ripme.ripper.AbstractRipper;
|
||||
import com.rarchives.ripme.ui.RipStatusMessage.STATUS;
|
||||
import com.rarchives.ripme.utils.Utils;
|
||||
|
||||
public class TwitterRipper extends AbstractRipper {
|
||||
|
@ -78,6 +78,8 @@ public class MainWindow implements Runnable, RipStatusHandler {
|
||||
// Configuration
|
||||
private static JButton optionConfiguration;
|
||||
private static JPanel configurationPanel;
|
||||
private static JButton configUpdateButton;
|
||||
private static JLabel configUpdateLabel;
|
||||
// TODO Configuration components
|
||||
|
||||
public MainWindow() {
|
||||
@ -188,13 +190,22 @@ public class MainWindow implements Runnable, RipStatusHandler {
|
||||
gbc.gridx = 2; historyButtonPanel.add(historyButtonRerip, gbc);
|
||||
gbc.gridy = 1; gbc.gridx = 0;
|
||||
historyPanel.add(historyButtonPanel, gbc);
|
||||
|
||||
|
||||
configurationPanel = new JPanel(new GridBagLayout());
|
||||
configurationPanel.setBorder(emptyBorder);
|
||||
configurationPanel.setVisible(false);
|
||||
configurationPanel.setPreferredSize(new Dimension(300, 250));
|
||||
// TODO Configuration components
|
||||
|
||||
JLabel configLabel = new JLabel("Version: " + Utils.getConfigInteger("version.major", 0) + "." + Utils.getConfigInteger("version.minor", 0) + "." + Utils.getConfigInteger("version.build", 0));
|
||||
configurationPanel.add(configLabel);
|
||||
configUpdateButton = new JButton("Check for updates");
|
||||
configUpdateLabel = new JLabel("");
|
||||
gbc.ipady = 0;
|
||||
gbc.gridy = 1;
|
||||
configurationPanel.add(configUpdateButton, gbc);
|
||||
gbc.gridy = 2;
|
||||
configurationPanel.add(configUpdateLabel, gbc);
|
||||
|
||||
gbc.gridy = 0; pane.add(ripPanel, gbc);
|
||||
gbc.gridy = 1; pane.add(statusPanel, gbc);
|
||||
gbc.gridy = 2; pane.add(progressPanel, gbc);
|
||||
@ -282,8 +293,15 @@ public class MainWindow implements Runnable, RipStatusHandler {
|
||||
new Thread(ripAllThread).start();
|
||||
}
|
||||
});
|
||||
configUpdateButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent arg0) {
|
||||
UpdateUtils.updateProgram(configUpdateLabel);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private void appendLog(final String text, final Color color) {
|
||||
SimpleAttributeSet sas = new SimpleAttributeSet();
|
||||
StyleConstants.setForeground(sas, color);
|
||||
|
117
src/main/java/com/rarchives/ripme/ui/UpdateUtils.java
Normal file
117
src/main/java/com/rarchives/ripme/ui/UpdateUtils.java
Normal file
@ -0,0 +1,117 @@
|
||||
package com.rarchives.ripme.ui;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.swing.JLabel;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.jsoup.Connection.Response;
|
||||
import org.jsoup.Jsoup;
|
||||
import org.jsoup.nodes.Document;
|
||||
|
||||
public class UpdateUtils {
|
||||
|
||||
private static final String DEFAULT_VERSION = "1.0.0";
|
||||
private static final String updateJsonURL = "http://rarchives.com/ripme.json";
|
||||
private static final String updateJarURL = "http://rarchives.com/ripme.jar";
|
||||
|
||||
public static void updateProgram(JLabel configUpdateLabel) {
|
||||
configUpdateLabel.setText("Checking for update...:");
|
||||
|
||||
Document doc = null;
|
||||
try {
|
||||
doc = Jsoup.connect(UpdateUtils.updateJsonURL)
|
||||
.ignoreContentType(true)
|
||||
.get();
|
||||
} catch (IOException e) {
|
||||
configUpdateLabel.setText("Error while fetching update: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
String jsonString = doc.body().html().replaceAll(""", "\"");
|
||||
JSONObject json = new JSONObject(jsonString);
|
||||
JSONArray jsonChangeList = json.getJSONArray("changeList");
|
||||
configUpdateLabel.setText("Most recent changes:");
|
||||
for (int i = 0; i < jsonChangeList.length(); i++) {
|
||||
String change = jsonChangeList.getString(i);
|
||||
configUpdateLabel.setText(configUpdateLabel.getText() + "<br> + " + change);
|
||||
}
|
||||
|
||||
String latestVersion = json.getString("latestVersion");
|
||||
if (UpdateUtils.isNewerVersion(latestVersion)) {
|
||||
configUpdateLabel.setText("<html>Newer version found! <br><br>" + configUpdateLabel.getText() + "</html>");
|
||||
try {
|
||||
UpdateUtils.downloadJarAndReplace(updateJarURL);
|
||||
} catch (IOException e) {
|
||||
configUpdateLabel.setText("Error while updating: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
configUpdateLabel.setText("Running latest version: " + UpdateUtils.getThisJarVersion());
|
||||
}
|
||||
}
|
||||
|
||||
private static void downloadJarAndReplace(String updateJarURL)
|
||||
throws IOException {
|
||||
String newFile = "ripme.jar.update";
|
||||
Response response;
|
||||
response = Jsoup.connect(updateJarURL)
|
||||
.ignoreContentType(true)
|
||||
.timeout(60000)
|
||||
.maxBodySize(1024 * 1024 * 100)
|
||||
.execute();
|
||||
FileOutputStream out = new FileOutputStream(newFile);
|
||||
out.write(response.bodyAsBytes());
|
||||
out.close();
|
||||
Runtime.getRuntime().exec(new String[] {"java", "-jar", newFile});
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
private static String getThisJarVersion() {
|
||||
String thisVersion = UpdateUtils.class.getPackage().getImplementationVersion();
|
||||
if (thisVersion == null) {
|
||||
// Version is null if we're not running from the JAR
|
||||
thisVersion = DEFAULT_VERSION; ; // Super-high version number
|
||||
}
|
||||
return thisVersion;
|
||||
}
|
||||
|
||||
private static boolean isNewerVersion(String latestVersion) {
|
||||
int[] oldVersions = versionStringToInt(getThisJarVersion());
|
||||
int[] newVersions = versionStringToInt(latestVersion);
|
||||
if (oldVersions.length < newVersions.length) {
|
||||
System.err.println("Calculated: " + oldVersions + " < " + latestVersion);
|
||||
return true;
|
||||
}
|
||||
|
||||
for (int i = 0; i < oldVersions.length; i++) {
|
||||
System.err.println("Calculating: " + newVersions[i] + " <> " + oldVersions[i]);
|
||||
if (newVersions[i] > oldVersions[i]) {
|
||||
return true;
|
||||
}
|
||||
else if (newVersions[i] < oldVersions[i]) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// At this point, the version numbers are exactly the same.
|
||||
// Assume any additional changes to the version text means a new version
|
||||
return !(latestVersion.equals(getThisJarVersion()));
|
||||
}
|
||||
|
||||
private static int[] versionStringToInt(String version) {
|
||||
String strippedVersion = version.split("-")[0];
|
||||
String[] strVersions = strippedVersion.split("\\.");
|
||||
int[] intVersions = new int[strVersions.length];
|
||||
for (int i = 0; i < strVersions.length; i++) {
|
||||
intVersions[i] = Integer.parseInt(strVersions[i]);
|
||||
}
|
||||
return intVersions;
|
||||
}
|
||||
}
|
@ -180,4 +180,10 @@ public class Utils {
|
||||
}
|
||||
return classes;
|
||||
}
|
||||
|
||||
public static String getBuildVersion() {
|
||||
return getConfigInteger("version.major", 0)
|
||||
+ "." + getConfigInteger("version.minor", 0)
|
||||
+ "." + getConfigInteger("version.build", 0);
|
||||
}
|
||||
}
|
@ -1,3 +1,4 @@
|
||||
|
||||
# Download threads to use per ripper
|
||||
threads.size = 5
|
||||
|
||||
|
@ -10,7 +10,7 @@ import com.rarchives.ripme.ripper.rippers.RedditRipper;
|
||||
public class RedditRipperTest extends RippersTest {
|
||||
|
||||
public void testRedditAlbums() throws IOException {
|
||||
if (false && !DOWNLOAD_CONTENT) {
|
||||
if (!DOWNLOAD_CONTENT) {
|
||||
return;
|
||||
}
|
||||
List<URL> contentURLs = new ArrayList<URL>();
|
||||
|
Loading…
Reference in New Issue
Block a user