package org.pokenet.thin;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import org.pokenet.thin.libs.CheckSums;
/**
* Generates the update file
* @author Sienide
*
*/
public class UpdateCreator {
public static HashMap<String, String> m_files = new HashMap<String, String>();
public static String UPDATEURL = "http://pokeglobal.sourceforge.net/pokenet/";
public static void main(String [] args) {
/* Create the revision number */
int revision = 1;
try {
URL u = new URL(UPDATEURL + "updates.txt");
BufferedReader in = new BufferedReader(
new InputStreamReader(
u.openStream()));
revision = Integer.parseInt(in.readLine());
revision++;
in.close();
} catch (Exception e) {
revision = 1;
}
CheckSums s;
try {
/* Create checksum for client.jar */
s = new CheckSums();
System.out.println("Generating checksums");
m_files.put("./client.jar", s.getSHA1Checksum("client.jar"));
/* Create checksum for native libs */
File f = new File("./lib/native/");
String [] dir = f.list();
for(int i = 0; i < dir.length; i++) {
f = new File("./lib/native/" + dir[i]);
if(f.isFile()) {
m_files.put(f.getPath(), s.getSHA1Checksum(f.getPath()));
}
}
/* Create checksum for res */
f = new File("./res/");
dir = f.list();
for(int i = 0; i < dir.length; i++) {
f = new File("./res/" + dir[i]);
if(f.isFile()) {
m_files.put(f.getPath(), s.getSHA1Checksum(f.getPath()));
} else if(f.isDirectory()) {
scanDirectory(f.getPath());
}
}
/* Create updates.txt */
System.out.println("Generating updates.txt");
PrintWriter p = new PrintWriter(new File("updates.txt"));
p.println(revision);
Iterator<String> it = m_files.keySet().iterator();
while(it.hasNext()) {
String file = it.next();
String checksum = m_files.get(file);
file = file.substring(2).replace('\\', '/');
p.println(checksum + " " + file.replace(" ","%20"));
}
p.flush();
p.close();
System.out.println("DONE!");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Allows recursive scanning of directories
* @param directory
* @throws Exception
*/
private static void scanDirectory(String directory) throws Exception {
if(directory.contains(".svn"))
return;
File f = new File(directory);
String [] list = f.list();
CheckSums s = new CheckSums();
for(int i = 0; i < list.length; i++) {
f = new File(directory + "/" + list[i]);
if(f.isFile()) {
m_files.put(f.getPath(), s.getSHA1Checksum(f.getPath()));
} else if(f.isDirectory()) {
scanDirectory(f.getPath());
}
}
}
}