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
|
ripme.log
|
||||||
rips/
|
rips/
|
||||||
.history
|
.history
|
||||||
|
ripme.jar.update
|
||||||
|
4
pom.xml
4
pom.xml
@ -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>
|
||||||
|
@ -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 {
|
||||||
|
@ -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();
|
||||||
|
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;
|
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
|
# Download threads to use per ripper
|
||||||
threads.size = 5
|
threads.size = 5
|
||||||
|
|
||||||
|
@ -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>();
|
||||||
|
Loading…
Reference in New Issue
Block a user