diff options
Diffstat (limited to 'src/jake2/qcommon')
-rw-r--r-- | src/jake2/qcommon/Q2DataDialog.java | 3 | ||||
-rw-r--r-- | src/jake2/qcommon/Q2DataTool.java | 191 | ||||
-rw-r--r-- | src/jake2/qcommon/Qcommon.java | 39 |
3 files changed, 214 insertions, 19 deletions
diff --git a/src/jake2/qcommon/Q2DataDialog.java b/src/jake2/qcommon/Q2DataDialog.java index ffb5842..9e3b318 100644 --- a/src/jake2/qcommon/Q2DataDialog.java +++ b/src/jake2/qcommon/Q2DataDialog.java @@ -309,9 +309,6 @@ public class Q2DataDialog extends javax.swing.JDialog { } - /* (non-Javadoc) - * @see java.awt.Component#paint(java.awt.Graphics) - */ public void paint(Graphics g) { g.drawImage(image, 0, 0, null); } diff --git a/src/jake2/qcommon/Q2DataTool.java b/src/jake2/qcommon/Q2DataTool.java new file mode 100644 index 0000000..b12acfc --- /dev/null +++ b/src/jake2/qcommon/Q2DataTool.java @@ -0,0 +1,191 @@ +/* + * Q2DataDialog.java + * Copyright (C) 2003 + */ +package jake2.qcommon; + +import java.io.*; +import java.net.URL; +import java.net.URLConnection; +import java.util.Enumeration; +import java.util.Vector; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +public class Q2DataTool { + static final String home = System.getProperty("user.home"); + static final String sep = System.getProperty("file.separator"); + static final String dataDir = home + sep + "Jake2"; + static final String baseq2Dir = dataDir + sep + "baseq2"; + + private Vector<String> mirrorNames = new Vector<String>(); + private Vector<String> mirrorLinks = new Vector<String>(); + private byte[] buf = new byte[8192]; + + public void testQ2Data() { + initMirrors(); + for(int i=0; !isAvail() && i<mirrorNames.size(); i++) { + try { + install(i); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + void destroy() { + + } + + void setStatus(String text) { + System.err.println(text); + System.err.println(); + } + + boolean isAvail() { + Cvar.Set("cddir", baseq2Dir); + FS.setCDDir(); + return null != FS.LoadFile("pics/colormap.pcx"); + } + + void initMirrors() { + InputStream in = getClass().getResourceAsStream("/mirrors"); + BufferedReader r = new BufferedReader(new InputStreamReader(in)); + try { + while (true) { + String name = r.readLine(); + String value = r.readLine(); + if (name == null || value == null) break; + mirrorNames.add(name); + mirrorLinks.add(value); + } + } catch (Exception e) {} + finally { + try { + r.close(); + } catch (Exception e1) {} + try { + in.close(); + } catch (Exception e1) {} + } + } + + void install(int mirrorIdx) { + final String mirrorName = mirrorNames.get(mirrorIdx); + final String mirror = mirrorLinks.get(mirrorIdx); + InputStream in = null; + OutputStream out = null; + File outFile = null; + + setStatus("downloading from "+mirrorName+": <"+mirror+">"); + + File dir = null; + try { + dir = new File(dataDir); + dir.mkdirs(); + } + catch (Exception e) {} + try { + if (!dir.isDirectory() || !dir.canWrite()) { + setStatus("can't write to " + dataDir); + return; + } + } + catch (Exception e) { + setStatus(e.getMessage()); + return; + } + + try { + URL url = new URL(mirror); + URLConnection conn = url.openConnection(); + // int length = conn.getContentLength(); + + in = conn.getInputStream(); + + outFile = File.createTempFile("Jake2Data", ".zip"); + outFile.deleteOnExit(); + out = new FileOutputStream(outFile); + + copyStream(in, out); + } catch (Exception e) { + setStatus(e.getMessage()); + return; + } finally { + try { + in.close(); + } catch (Exception e) {} + try { + out.close(); + } catch (Exception e) {} + } + + try { + installData(outFile.getCanonicalPath()); + } catch (Exception e) { + setStatus(e.getMessage()); + return; + } + + + try { + if (outFile != null) outFile.delete(); + } catch (Exception e) {} + + setStatus("installation successful from "+mirrorName+": <"+mirror+">"); + } + + + void installData(String filename) throws Exception { + InputStream in = null; + OutputStream out = null; + try { + ZipFile f = new ZipFile(filename); + Enumeration<? extends ZipEntry> e = f.entries(); + while (e.hasMoreElements()) { + ZipEntry entry = (ZipEntry)e.nextElement(); + String name = entry.getName(); + int i; + if ((i = name.indexOf("/baseq2")) > -1 && name.indexOf(".dll") == -1) { + name = dataDir + name.substring(i); + File outFile = new File(name); + if (entry.isDirectory()) { + outFile.mkdirs(); + } else { + setStatus("installing " + outFile.getName()); + outFile.getParentFile().mkdirs(); + out = new FileOutputStream(outFile); + in = f.getInputStream(entry); + copyStream(in, out); + } + } + } + } catch (Exception e) { + throw e; + } finally { + try {in.close();} catch (Exception e1) {} + try {out.close();} catch (Exception e1) {} + } + } + + void copyStream(InputStream in, OutputStream out) throws Exception { + try { + // int c = 0; + int l; + while ((l = in.read(buf)) > 0) { + out.write(buf, 0, l); + // c += l; + } + } catch (Exception e) { + throw e; + } finally { + try { + in.close(); + } catch (Exception e) {} + try { + out.close(); + } catch (Exception e) {} + } + } + +} diff --git a/src/jake2/qcommon/Qcommon.java b/src/jake2/qcommon/Qcommon.java index bd4ca88..79f6f29 100644 --- a/src/jake2/qcommon/Qcommon.java +++ b/src/jake2/qcommon/Qcommon.java @@ -74,21 +74,24 @@ public final class Qcommon extends Globals { Cbuf.AddEarlyCommands(false); Cbuf.Execute(); - if (Globals.dedicated.value != 1.0f) - Jake2.Q2Dialog.setStatus("initializing filesystem..."); + if (Globals.dedicated.value != 1.0f) { + Jake2.q2DataTool.setStatus("initializing filesystem..."); + } FS.InitFilesystem(); - if (Globals.dedicated.value != 1.0f) - Jake2.Q2Dialog.setStatus("loading config..."); + if (Globals.dedicated.value != 1.0f) { + Jake2.q2DataTool.setStatus("loading config..."); + } reconfigure(false); FS.setCDDir(); // use cddir from config.cfg FS.markBaseSearchPaths(); // mark the default search paths - - if (Globals.dedicated.value != 1.0f) - Jake2.Q2Dialog.testQ2Data(); // test for valid baseq2 + + if (Globals.dedicated.value != 1.0f) { + Jake2.q2DataTool.testQ2Data(); // test for valid baseq2 + } reconfigure(true); // reload default.cfg and config.cfg @@ -114,18 +117,21 @@ public final class Qcommon extends Globals { Cvar.Get("version", s, CVAR_SERVERINFO | CVAR_NOSET); - if (Globals.dedicated.value != 1.0f) - Jake2.Q2Dialog.setStatus("initializing network subsystem..."); + if (Globals.dedicated.value != 1.0f) { + Jake2.q2DataTool.setStatus("initializing network subsystem..."); + } NET.Init(); //ok Netchan.Netchan_Init(); //ok - if (Globals.dedicated.value != 1.0f) - Jake2.Q2Dialog.setStatus("initializing server subsystem..."); + if (Globals.dedicated.value != 1.0f) { + Jake2.q2DataTool.setStatus("initializing server subsystem..."); + } SV_MAIN.SV_Init(); //ok - if (Globals.dedicated.value != 1.0f) - Jake2.Q2Dialog.setStatus("initializing client subsystem..."); + if (Globals.dedicated.value != 1.0f) { + Jake2.q2DataTool.setStatus("initializing client subsystem..."); + } CL.Init(); @@ -148,9 +154,10 @@ public final class Qcommon extends Globals { // save config when configuration is completed CL.WriteConfiguration(); - - if (Globals.dedicated.value != 1.0f) - Jake2.Q2Dialog.dispose(); + + if (Globals.dedicated.value != 1.0f) { + Jake2.q2DataTool.destroy(); + } } catch (longjmpException e) { Sys.Error("Error during initialization"); |