mirror of
https://github.com/processing/processing4.git
synced 2026-02-03 13:49:18 +01:00
remove double thread crap (make mac happy), fix full screen for mrj, auto-updater code
This commit is contained in:
153
processing/app/PdeUpdater.java
Normal file
153
processing/app/PdeUpdater.java
Normal file
@@ -0,0 +1,153 @@
|
||||
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();
|
||||
}
|
||||
*/
|
||||
|
||||
} 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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user