Don't allow the resource bundles to attempt to access their resource jar
files until they are known to be safely updated and ready to go. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@2185 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: ResourceBundle.java,v 1.7 2003/01/14 02:51:40 mdb Exp $
|
// $Id: ResourceBundle.java,v 1.8 2003/01/18 19:56:45 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.resource;
|
package com.threerings.resource;
|
||||||
|
|
||||||
@@ -32,7 +32,6 @@ public class ResourceBundle
|
|||||||
public ResourceBundle (File source)
|
public ResourceBundle (File source)
|
||||||
{
|
{
|
||||||
_source = source;
|
_source = source;
|
||||||
_sourceLastMod = source.lastModified();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,6 +43,16 @@ public class ResourceBundle
|
|||||||
return _source;
|
return _source;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by the resource manager once it has ensured that our
|
||||||
|
* resource jar file is up to date and ready for reading.
|
||||||
|
*/
|
||||||
|
public void sourceIsReady ()
|
||||||
|
{
|
||||||
|
// make a note of our source's last modification time
|
||||||
|
_sourceLastMod = _source.lastModified();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetches the named resource from this bundle. The path should be
|
* Fetches the named resource from this bundle. The path should be
|
||||||
* specified as a relative, platform independent path (forward
|
* specified as a relative, platform independent path (forward
|
||||||
@@ -79,7 +88,9 @@ public class ResourceBundle
|
|||||||
public File getResourceFile (String path)
|
public File getResourceFile (String path)
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
resolveJarFile();
|
if (resolveJarFile()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// compute the path to our temporary file
|
// compute the path to our temporary file
|
||||||
String tpath = StringUtil.md5hex(_source.getPath() + "%" + path);
|
String tpath = StringUtil.md5hex(_source.getPath() + "%" + path);
|
||||||
@@ -93,6 +104,7 @@ public class ResourceBundle
|
|||||||
// make sure said resource exists in the first place
|
// make sure said resource exists in the first place
|
||||||
JarEntry entry = _jarSource.getJarEntry(path);
|
JarEntry entry = _jarSource.getJarEntry(path);
|
||||||
if (entry == null) {
|
if (entry == null) {
|
||||||
|
// Log.info("Couldn't locate " + path + " in " + _jarSource + ".");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,7 +128,9 @@ public class ResourceBundle
|
|||||||
public boolean containsResource (String path)
|
public boolean containsResource (String path)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
resolveJarFile();
|
if (resolveJarFile()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return (_jarSource.getJarEntry(path) != null);
|
return (_jarSource.getJarEntry(path) != null);
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
return false;
|
return false;
|
||||||
@@ -143,14 +157,25 @@ public class ResourceBundle
|
|||||||
* antics until and unless doing so is required, and because the
|
* antics until and unless doing so is required, and because the
|
||||||
* resource manager would like to be able to create bundles before the
|
* resource manager would like to be able to create bundles before the
|
||||||
* associated files have been fully downloaded.
|
* associated files have been fully downloaded.
|
||||||
|
*
|
||||||
|
* @return true if the jar file could not yet be resolved because we
|
||||||
|
* haven't yet heard from the resource manager that it is ready for us
|
||||||
|
* to access, false if all is cool.
|
||||||
*/
|
*/
|
||||||
protected void resolveJarFile ()
|
protected boolean resolveJarFile ()
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
|
// if we don't yet have our resource bundle's last mod time, we
|
||||||
|
// have not yet been notified that it is ready
|
||||||
|
if (_sourceLastMod == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (_jarSource == null) {
|
if (_jarSource == null) {
|
||||||
_jarSource = new JarFile(_source);
|
_jarSource = new JarFile(_source);
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
throw new NestableIOException(
|
throw new NestableIOException(
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: ResourceManager.java,v 1.20 2003/01/16 22:50:29 mdb Exp $
|
// $Id: ResourceManager.java,v 1.21 2003/01/18 19:56:45 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.resource;
|
package com.threerings.resource;
|
||||||
|
|
||||||
@@ -18,6 +18,7 @@ import java.net.URLConnection;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
@@ -249,6 +250,7 @@ public class ResourceManager
|
|||||||
// wake things up as the download is finished
|
// wake things up as the download is finished
|
||||||
lock.notify();
|
lock.notify();
|
||||||
}
|
}
|
||||||
|
bundlesDownloaded();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -295,6 +297,9 @@ public class ResourceManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void downloadProgress (int percent, long remaining) {
|
public void downloadProgress (int percent, long remaining) {
|
||||||
|
if (percent == 100) {
|
||||||
|
bundlesDownloaded();
|
||||||
|
}
|
||||||
obs.downloadProgress(percent, remaining);
|
obs.downloadProgress(percent, remaining);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,6 +309,22 @@ public class ResourceManager
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when our resource bundle downloads have completed.
|
||||||
|
*/
|
||||||
|
protected void bundlesDownloaded ()
|
||||||
|
{
|
||||||
|
// let our bundles know that it's ok for them to access their
|
||||||
|
// resource files
|
||||||
|
Iterator iter = _sets.values().iterator();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
ResourceBundle[] bundles = (ResourceBundle[])iter.next();
|
||||||
|
for (int ii = 0; ii < bundles.length; ii++) {
|
||||||
|
bundles[ii].sourceIsReady();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads up the most recent version of the resource manager
|
* Loads up the most recent version of the resource manager
|
||||||
* configuration.
|
* configuration.
|
||||||
|
|||||||
Reference in New Issue
Block a user