Added support for a "check_unpacked" flag that causes resources to be
unpacked on initial install (even though the resources are already validated).
This commit is contained in:
@@ -1063,9 +1063,11 @@ public class Application
|
|||||||
*
|
*
|
||||||
* @param alreadyValid if non-null a 1 element array that will have the number of "already
|
* @param alreadyValid if non-null a 1 element array that will have the number of "already
|
||||||
* validated" resources filled in.
|
* validated" resources filled in.
|
||||||
|
* @param unpacked a set to populate with unpacked resources.
|
||||||
*/
|
*/
|
||||||
public List<Resource> verifyResources (ProgressObserver obs, int[] alreadyValid)
|
public List<Resource> verifyResources (
|
||||||
throws InterruptedException
|
ProgressObserver obs, int[] alreadyValid, Set<Resource> unpacked)
|
||||||
|
throws InterruptedException
|
||||||
{
|
{
|
||||||
List<Resource> rsrcs = getAllResources();
|
List<Resource> rsrcs = getAllResources();
|
||||||
List<Resource> failures = new ArrayList<Resource>();
|
List<Resource> failures = new ArrayList<Resource>();
|
||||||
@@ -1095,11 +1097,16 @@ public class Application
|
|||||||
try {
|
try {
|
||||||
if (_digest.validateResource(rsrc, mpobs)) {
|
if (_digest.validateResource(rsrc, mpobs)) {
|
||||||
// unpack this resource if appropriate
|
// unpack this resource if appropriate
|
||||||
if (noUnpack || !rsrc.shouldUnpack() || rsrc.unpack()) {
|
if (noUnpack || !rsrc.shouldUnpack()) {
|
||||||
// finally note that this resource is kosher
|
// finally note that this resource is kosher
|
||||||
rsrc.markAsValid();
|
rsrc.markAsValid();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (rsrc.unpack()) {
|
||||||
|
unpacked.add(rsrc);
|
||||||
|
rsrc.markAsValid();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
log.info("Failure unpacking resource", "rsrc", rsrc);
|
log.info("Failure unpacking resource", "rsrc", rsrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1116,6 +1123,40 @@ public class Application
|
|||||||
return (failures.size() == 0) ? null : failures;
|
return (failures.size() == 0) ? null : failures;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unpacks the resources that require it (we know that they're valid).
|
||||||
|
*
|
||||||
|
* @param unpacked a set of resources to skip because they're already unpacked.
|
||||||
|
*/
|
||||||
|
public void unpackResources (ProgressObserver obs, Set<Resource> unpacked)
|
||||||
|
throws InterruptedException
|
||||||
|
{
|
||||||
|
List<Resource> rsrcs = getActiveResources();
|
||||||
|
|
||||||
|
// total up the file size of the resources to unpack
|
||||||
|
long totalSize = 0L;
|
||||||
|
for (Iterator<Resource> it = rsrcs.iterator(); it.hasNext(); ) {
|
||||||
|
Resource rsrc = it.next();
|
||||||
|
if (rsrc.shouldUnpack() && !unpacked.contains(rsrc)) {
|
||||||
|
totalSize += rsrc.getLocal().length();
|
||||||
|
} else {
|
||||||
|
it.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MetaProgressObserver mpobs = new MetaProgressObserver(obs, totalSize);
|
||||||
|
for (Resource rsrc : rsrcs) {
|
||||||
|
if (Thread.interrupted()) {
|
||||||
|
throw new InterruptedException("m.applet_stopped");
|
||||||
|
}
|
||||||
|
mpobs.startElement(rsrc.getLocal().length());
|
||||||
|
if (!rsrc.unpack()) {
|
||||||
|
log.info("Failure unpacking resource", "rsrc", rsrc);
|
||||||
|
}
|
||||||
|
mpobs.progress(100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears all validation marker files.
|
* Clears all validation marker files.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -51,10 +51,12 @@ import java.net.URL;
|
|||||||
import java.net.URLConnection;
|
import java.net.URLConnection;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import ca.beq.util.win32.registry.RegistryKey;
|
import ca.beq.util.win32.registry.RegistryKey;
|
||||||
import ca.beq.util.win32.registry.RegistryValue;
|
import ca.beq.util.win32.registry.RegistryValue;
|
||||||
@@ -404,6 +406,9 @@ public abstract class Getdown extends Thread
|
|||||||
// time through
|
// time through
|
||||||
int[] alreadyValid = new int[1];
|
int[] alreadyValid = new int[1];
|
||||||
|
|
||||||
|
// we'll keep track of all the resources we unpack
|
||||||
|
Set<Resource> unpacked = new HashSet<Resource>();
|
||||||
|
|
||||||
for (int ii = 0; ii < MAX_LOOPS; ii++) {
|
for (int ii = 0; ii < MAX_LOOPS; ii++) {
|
||||||
// if we aren't running in a JVM that meets our version requirements, either
|
// if we aren't running in a JVM that meets our version requirements, either
|
||||||
// complain or attempt to download and install the appropriate version
|
// complain or attempt to download and install the appropriate version
|
||||||
@@ -431,9 +436,22 @@ public abstract class Getdown extends Thread
|
|||||||
|
|
||||||
// now verify our resources...
|
// now verify our resources...
|
||||||
setStatus("m.validating", -1, -1L, false);
|
setStatus("m.validating", -1, -1L, false);
|
||||||
List<Resource> failures = _app.verifyResources(_progobs, alreadyValid);
|
List<Resource> failures = _app.verifyResources(_progobs, alreadyValid, unpacked);
|
||||||
if (failures == null) {
|
if (failures == null) {
|
||||||
log.info("Resources verified.");
|
log.info("Resources verified.");
|
||||||
|
|
||||||
|
// if we were downloaded in full from another service (say, Steam), we may
|
||||||
|
// not have unpacked all of our resources yet
|
||||||
|
if (Boolean.getBoolean("check_unpacked")) {
|
||||||
|
File ufile = _app.getLocalPath("unpacked.dat");
|
||||||
|
if (!ufile.exists()) {
|
||||||
|
log.info("Performing initial unpack.");
|
||||||
|
setStatus("m.validating", -1, -1L, true);
|
||||||
|
_app.unpackResources(_progobs, unpacked);
|
||||||
|
ufile.createNewFile();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Only launch if we aren't in silent mode. Some mystery program starting out
|
// Only launch if we aren't in silent mode. Some mystery program starting out
|
||||||
// of the blue would be disconcerting.
|
// of the blue would be disconcerting.
|
||||||
if (!_silent || _launchInSilent) {
|
if (!_silent || _launchInSilent) {
|
||||||
|
|||||||
Reference in New Issue
Block a user