forked from magefree/mage
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Renamed mage-updater-client to Mage.Updater
- Loading branch information
magenoxx
committed
May 11, 2012
1 parent
9a24b1d
commit d4eee79
Showing
4 changed files
with
216 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" | ||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
<parent> | ||
<artifactId>mage-root</artifactId> | ||
<groupId>org.mage</groupId> | ||
<version>0.8.5</version> | ||
</parent> | ||
<modelVersion>4.0.0</modelVersion> | ||
|
||
<groupId>org.mage</groupId> | ||
<artifactId>mage-updater</artifactId> | ||
<name>Mage Updater</name> | ||
|
||
<build> | ||
<plugins> | ||
<plugin> | ||
<groupId>org.apache.maven.plugins</groupId> | ||
<artifactId>maven-jar-plugin</artifactId> | ||
<configuration> | ||
<archive> | ||
<manifest> | ||
<mainClass>com.magefree.update.Main</mainClass> | ||
</manifest> | ||
</archive> | ||
</configuration> | ||
</plugin> | ||
</plugins> | ||
</build> | ||
</project> |
37 changes: 37 additions & 0 deletions
37
Mage.Updater/src/main/java/com/magefree/update/ChechsumHelper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package com.magefree.update; | ||
|
||
import java.io.FileInputStream; | ||
import java.io.InputStream; | ||
import java.security.MessageDigest; | ||
|
||
public class ChechsumHelper { | ||
public static byte[] createChecksum(String filename) throws | ||
Exception | ||
{ | ||
InputStream fis = new FileInputStream(filename); | ||
|
||
byte[] buffer = new byte[1024]; | ||
MessageDigest complete = MessageDigest.getInstance("SHA1"); | ||
int numRead; | ||
do { | ||
numRead = fis.read(buffer); | ||
if (numRead > 0) { | ||
complete.update(buffer, 0, numRead); | ||
} | ||
} while (numRead != -1); | ||
fis.close(); | ||
return complete.digest(); | ||
} | ||
|
||
// see this How-to for a faster way to convert | ||
// a byte array to a HEX string | ||
public static String getSHA1Checksum(String filename) throws Exception { | ||
byte[] b = createChecksum(filename); | ||
String result = ""; | ||
for (int i=0; i < b.length; i++) { | ||
result += | ||
Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 ); | ||
} | ||
return result; | ||
} | ||
} |
147 changes: 147 additions & 0 deletions
147
Mage.Updater/src/main/java/com/magefree/update/Main.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
package com.magefree.update; | ||
|
||
import java.io.*; | ||
import java.net.HttpURLConnection; | ||
import java.net.URL; | ||
import java.net.URLConnection; | ||
import java.util.ArrayList; | ||
import java.util.HashMap; | ||
import java.util.List; | ||
import java.util.Scanner; | ||
|
||
public class Main { | ||
private final static String URL_PREFIX = "http://download.magefree.com/update/"; | ||
|
||
public static void main(String[] args) throws Exception { | ||
Main m = new Main(); | ||
HashMap<String, String> local = m.readLocalData(); | ||
HashMap<String, String> remote = m.downloadAndParseUpdateData(); | ||
List<String> downloadList = m.findUpdated(local, remote); | ||
downloadList.addAll(m.findNew(local, remote)); | ||
m.downloadAndUpdate(downloadList); | ||
m.removeFiles(m.findRemoved(local, remote)); | ||
} | ||
|
||
public HashMap<String, String> readLocalData() throws Exception { | ||
HashMap<String, String> result = new HashMap<String, String>(); | ||
for (File f : findJars()) { | ||
result.put(f.getPath().replaceAll("\\\\", "/"), ChechsumHelper.getSHA1Checksum(f.getPath())); | ||
} | ||
return result; | ||
} | ||
|
||
public List<File> findJars() throws Exception { | ||
ArrayList<File> result = new ArrayList<File>(); | ||
result.addAll(findJarsInDir("mage-client/lib")); | ||
result.addAll(findJarsInDir("mage-client/plugins")); | ||
result.addAll(findJarsInDir("mage-server/lib")); | ||
result.addAll(findJarsInDir("mage-server/plugins")); | ||
return result; | ||
} | ||
|
||
public List<File> findJarsInDir(String dir) { | ||
ArrayList<File> result = new ArrayList<File>(); | ||
File directory = new File(dir); | ||
if (directory.exists() && directory.isDirectory()) { | ||
for (File jar : directory.listFiles(new FilenameFilter() { | ||
@Override | ||
public boolean accept(File dir, String name) { | ||
return name.endsWith(".jar"); | ||
} | ||
})) { | ||
result.add(jar); | ||
} | ||
} | ||
return result; | ||
} | ||
|
||
public HashMap<String, String> downloadAndParseUpdateData() throws Exception { | ||
HashMap<String, String> result = new HashMap<String, String>(); | ||
URL url = new URL(URL_PREFIX + "update-data.txt"); | ||
URLConnection urlConnection = url.openConnection(); | ||
urlConnection.connect(); | ||
Scanner scanner = new Scanner(urlConnection.getInputStream()); | ||
while (scanner.hasNextLine()) { | ||
String[] lines = scanner.nextLine().split(" "); | ||
if (lines.length == 2) { | ||
result.put(lines[1], lines[0]); | ||
System.out.println("jar " + lines[1] + ", checksum " + lines[0]); | ||
} | ||
} | ||
return result; | ||
} | ||
|
||
public List<String> findUpdated(HashMap<String, String> local, HashMap<String, String> remote) { | ||
ArrayList<String> result = new ArrayList<String>(); | ||
for (String remoteFile : remote.keySet()) { | ||
if (local.containsKey(remoteFile)) { | ||
if (!local.get(remoteFile).equals(remote.get(remoteFile))) { | ||
System.out.println("jar need to be updated - " + remoteFile); | ||
result.add(remoteFile); | ||
} | ||
} | ||
} | ||
return result; | ||
} | ||
|
||
public List<String> findNew(HashMap<String, String> local, HashMap<String, String> remote) { | ||
ArrayList<String> result = new ArrayList<String>(); | ||
for (String remoteFile : remote.keySet()) { | ||
if (!local.containsKey(remoteFile)) { | ||
System.out.println("new jar found - " + remoteFile); | ||
result.add(remoteFile); | ||
} | ||
} | ||
return result; | ||
} | ||
|
||
public List<String> findRemoved(HashMap<String, String> local, HashMap<String, String> remote) { | ||
ArrayList<String> result = new ArrayList<String>(); | ||
for (String localFile : local.keySet()) { | ||
if (!remote.containsKey(localFile)) { | ||
System.out.println("deleted jar found - " + localFile); | ||
result.add(localFile); | ||
} | ||
} | ||
return result; | ||
} | ||
|
||
public void downloadAndUpdate(List<String> downloadList) throws IOException { | ||
for (String filename : downloadList) { | ||
URL url = new URL(URL_PREFIX + filename); | ||
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); | ||
urlConnection.connect(); | ||
if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { | ||
System.out.println("downloading " + filename); | ||
try { | ||
InputStream in = urlConnection.getInputStream(); | ||
File f = new File(filename); | ||
if (!f.exists()) | ||
f.getParentFile().mkdirs(); | ||
FileOutputStream out = new FileOutputStream(filename); | ||
byte[] buf = new byte[4 * 1024]; | ||
int bytesRead; | ||
while ((bytesRead = in.read(buf)) != -1) { | ||
out.write(buf, 0, bytesRead); | ||
} | ||
} catch (IOException e) { | ||
System.out.println("i/o exception - " + e.getMessage()); | ||
} | ||
|
||
} else { | ||
System.out.println(filename + " error status : " + urlConnection.getResponseMessage()); | ||
} | ||
} | ||
} | ||
|
||
public void removeFiles(List<String> files) { | ||
for (String filename : files) { | ||
File f = new File(filename); | ||
if (f.exists()) { | ||
f.delete(); | ||
} else { | ||
System.out.println("ERROR. File was found but currently not found"); | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters