Can update script in configuration

Downloads latest jar from rarchives, saves, executes.
This commit is contained in:
4pr0n 2014-04-05 01:39:10 -07:00
parent 04de8d7a09
commit 048e53058a
8 changed files with 149 additions and 5 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@
ripme.log ripme.log
rips/ rips/
.history .history
ripme.jar.update

View File

@ -4,7 +4,7 @@
<groupId>com.rarchives.ripme</groupId> <groupId>com.rarchives.ripme</groupId>
<artifactId>ripme</artifactId> <artifactId>ripme</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>
<version>1.0</version> <version>1.0.2-beta1</version>
<name>ripme</name> <name>ripme</name>
<url>http://rip.rarchives.com</url> <url>http://rip.rarchives.com</url>
<properties> <properties>
@ -52,6 +52,8 @@
<archive> <archive>
<manifest> <manifest>
<mainClass>com.rarchives.ripme.App</mainClass> <mainClass>com.rarchives.ripme.App</mainClass>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest> </manifest>
<manifestEntries> <manifestEntries>
<Class-Path>./config</Class-Path> <Class-Path>./config</Class-Path>

View File

@ -17,7 +17,6 @@ import org.jsoup.Jsoup;
import org.jsoup.nodes.Document; import org.jsoup.nodes.Document;
import com.rarchives.ripme.ripper.AbstractRipper; import com.rarchives.ripme.ripper.AbstractRipper;
import com.rarchives.ripme.ui.RipStatusMessage.STATUS;
import com.rarchives.ripme.utils.Utils; import com.rarchives.ripme.utils.Utils;
public class TwitterRipper extends AbstractRipper { public class TwitterRipper extends AbstractRipper {

View File

@ -78,6 +78,8 @@ public class MainWindow implements Runnable, RipStatusHandler {
// Configuration // Configuration
private static JButton optionConfiguration; private static JButton optionConfiguration;
private static JPanel configurationPanel; private static JPanel configurationPanel;
private static JButton configUpdateButton;
private static JLabel configUpdateLabel;
// TODO Configuration components // TODO Configuration components
public MainWindow() { public MainWindow() {
@ -194,6 +196,15 @@ public class MainWindow implements Runnable, RipStatusHandler {
configurationPanel.setVisible(false); configurationPanel.setVisible(false);
configurationPanel.setPreferredSize(new Dimension(300, 250)); configurationPanel.setPreferredSize(new Dimension(300, 250));
// TODO Configuration components // 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 = 0; pane.add(ripPanel, gbc);
gbc.gridy = 1; pane.add(statusPanel, gbc); gbc.gridy = 1; pane.add(statusPanel, gbc);
@ -282,7 +293,14 @@ public class MainWindow implements Runnable, RipStatusHandler {
new Thread(ripAllThread).start(); 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) { private void appendLog(final String text, final Color color) {
SimpleAttributeSet sas = new SimpleAttributeSet(); SimpleAttributeSet sas = new SimpleAttributeSet();

View 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("&quot;", "\"");
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;
}
}

View File

@ -180,4 +180,10 @@ public class Utils {
} }
return classes; return classes;
} }
public static String getBuildVersion() {
return getConfigInteger("version.major", 0)
+ "." + getConfigInteger("version.minor", 0)
+ "." + getConfigInteger("version.build", 0);
}
} }

View File

@ -1,3 +1,4 @@
# Download threads to use per ripper # Download threads to use per ripper
threads.size = 5 threads.size = 5

View File

@ -10,7 +10,7 @@ import com.rarchives.ripme.ripper.rippers.RedditRipper;
public class RedditRipperTest extends RippersTest { public class RedditRipperTest extends RippersTest {
public void testRedditAlbums() throws IOException { public void testRedditAlbums() throws IOException {
if (false && !DOWNLOAD_CONTENT) { if (!DOWNLOAD_CONTENT) {
return; return;
} }
List<URL> contentURLs = new ArrayList<URL>(); List<URL> contentURLs = new ArrayList<URL>();