mirror of
https://github.com/processing/processing4.git
synced 2026-02-02 13:21:07 +01:00
156 lines
4.3 KiB
Java
156 lines
4.3 KiB
Java
import java.io.*;
|
|
import java.net.*;
|
|
import java.util.*;
|
|
|
|
|
|
public class PdeUpdater {
|
|
PdeUpdater() {
|
|
Properties properties = new Properties();
|
|
try {
|
|
properties.load(new FileInputStream("lib/pde.properties"));
|
|
} catch (Exception e) {
|
|
System.err.println("Error reading pde.properties");
|
|
e.printStackTrace();
|
|
System.exit(1);
|
|
}
|
|
|
|
// 'enabled' no longer valid because
|
|
// this is a separate updater application
|
|
boolean updateEnabled = true;
|
|
//(new Boolean(properties.getProperty("update.enabled",
|
|
// "false"))).booleanValue();
|
|
|
|
// check for updates from the server, if enabled
|
|
//if (getBoolean("update.enabled", false)) {
|
|
if (updateEnabled) {
|
|
// open the update file to get the latest version
|
|
long lastUpdate = 0;
|
|
try {
|
|
DataInputStream dis =
|
|
new DataInputStream(new FileInputStream("lib/version"));
|
|
lastUpdate = dis.readLong();
|
|
//System.out.println("pde.jar timestamp is " + lastUpdate);
|
|
} catch (IOException e) { }
|
|
|
|
//String baseUrl = get("update.url");
|
|
String baseUrl = properties.getProperty("update.url");
|
|
|
|
try {
|
|
URL url = new URL(baseUrl + "version");
|
|
URLConnection conn = url.openConnection();
|
|
//conn.connect();
|
|
|
|
//System.out.println("date of last update" + conn.getDate());
|
|
long newDate = conn.getLastModified();
|
|
//System.out.println("server timestamp is " + newDate);
|
|
//System.out.println((newDate - lastUpdate) + "ms newer");
|
|
if (newDate > lastUpdate) {
|
|
System.out.println("new update available");
|
|
|
|
DataOutputStream vos =
|
|
new DataOutputStream(new FileOutputStream("lib/version"));
|
|
//new DataOutputStream(new FileOutputStream("lib/version.update"));
|
|
vos.writeLong(newDate);
|
|
vos.flush();
|
|
vos.close();
|
|
|
|
url = new URL(baseUrl + "pde.jar");
|
|
conn = url.openConnection();
|
|
|
|
// move the old pde.jar file out of the way
|
|
//File pdeJar = new File("lib/pde.jar");
|
|
//pdeJar.renameTo("lib/pde.old.jar");
|
|
|
|
// download the new pde.jar file
|
|
//FileOutputStream os = new FileOutputStream("lib/pde.jar.update");
|
|
FileOutputStream os = new FileOutputStream("lib/pde.jar");
|
|
//Object object = conn.getContent();
|
|
//System.out.println(object);
|
|
InputStream is = conn.getInputStream();
|
|
copyStream(is, os);
|
|
os.close();
|
|
|
|
// if everything copied ok, rename new/old files
|
|
// this probably needs to be way more bulletproof
|
|
/*
|
|
File file = new File("lib/version");
|
|
if (file.exists())
|
|
System.out.println(file.renameTo(new File("lib/version.old")));
|
|
file = new File("lib/version.update");
|
|
System.out.println(file.renameTo(new File("lib/version")));
|
|
|
|
file = new File("lib/pde.jar");
|
|
file.delete();
|
|
//System.out.println(file.renameTo(new File("lib/pde.jar.old")));
|
|
file = new File("lib/pde.jar.update");
|
|
System.out.println(file.renameTo(new File("lib/pde.jar")));
|
|
*/
|
|
|
|
// restart or relaunch
|
|
//System.out.println("done copying new version, restart");
|
|
//System.exit(0);
|
|
|
|
}
|
|
|
|
/*
|
|
try {
|
|
Class c = Class.forName("PdeApplication");
|
|
Object o = c.newInstance();
|
|
//PdeApplication.main(null);
|
|
} catch (Exception e) {
|
|
System.err.println("update failed");
|
|
e.printStackTrace();
|
|
}
|
|
*/
|
|
// mac mrj is not smart enough to exit the applicaiton here
|
|
System.exit(0);
|
|
|
|
} catch (IOException e1) {
|
|
e1.printStackTrace();
|
|
|
|
//} catch (MalformedURLException e2) {
|
|
//e2.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
static public void copyStream(InputStream input, OutputStream output
|
|
/*int padding, long length*/)
|
|
throws IOException {
|
|
byte[] buffer = new byte[4096];
|
|
int count;
|
|
int amount;
|
|
|
|
int length = Integer.MAX_VALUE;
|
|
// if length is not actually known, the function will still break
|
|
// in the correct spot, so just set to some enormous value
|
|
//if (length == -1) {
|
|
//length = Integer.MAX_VALUE;
|
|
//}
|
|
//if (padding != 0) {
|
|
//input.skip((int) padding);
|
|
//}
|
|
|
|
while (true) {
|
|
amount = (length < 4096) ? (int) length : 4096;
|
|
//System.err.print(amount + " ");
|
|
count = input.read(buffer, 0, amount);
|
|
//System.out.println("got " + count);
|
|
if (count == -1)
|
|
break;
|
|
|
|
output.write(buffer, 0, count);
|
|
length -= count; // used to be amount... bug?
|
|
if (length == 0)
|
|
break;
|
|
}
|
|
output.flush();
|
|
}
|
|
|
|
|
|
static public void main(String args[]) {
|
|
new PdeUpdater();
|
|
}
|
|
}
|