add AppRunner.p3dFilename etc

This commit is contained in:
David Rose 2011-12-05 06:42:03 +00:00
parent 19adb4cd99
commit 35551fed85
6 changed files with 56 additions and 6 deletions

View File

@ -111,6 +111,8 @@ class AppRunner(DirectObject):
self.packedAppEnvironmentInitialized = False
self.gotWindow = False
self.gotP3DFilename = False
self.p3dFilename = None
self.p3dUrl = None
self.started = False
self.windowOpened = False
self.windowPrc = None
@ -872,7 +874,7 @@ class AppRunner(DirectObject):
initAppForGui()
def setP3DFilename(self, p3dFilename, tokens, argv, instanceId,
interactiveConsole, p3dOffset = 0):
interactiveConsole, p3dOffset, p3dUrl):
""" Called by the browser to specify the p3d file that
contains the application itself, along with the web tokens
and/or command-line arguments. Once this method has been
@ -913,6 +915,7 @@ class AppRunner(DirectObject):
raise ArgumentError, "No such file: %s" % (p3dFilename)
fname.makeAbsolute()
fname.setBinary()
mf = Multifile()
if p3dOffset == 0:
if not mf.openRead(fname):
@ -976,6 +979,13 @@ class AppRunner(DirectObject):
self.loadMultifilePrcFiles(mf, self.multifileRoot)
self.gotP3DFilename = True
self.p3dFilename = fname
if p3dUrl:
# The url from which the p3d file was downloaded is
# provided if available. It is only for documentation
# purposes; the actual p3d file has already been
# downloaded to p3dFilename.
self.p3dUrl = PandaModules.URLSpec(p3dUrl)
# Send this call to the main thread; don't call it directly.
messenger.send('AppRunner_startIfReady', taskChain = 'default')

View File

@ -16,8 +16,8 @@
////////////////////////////////////////////////////////////////////
// Function: P3DFileParams::get_p3d_filename
// Access: Public
// Description: Returns the p3d filename that was passed to the
// constructor.
// Description: Returns the filename that was passed to
// set_p3d_filename().
////////////////////////////////////////////////////////////////////
inline const string &P3DFileParams::
get_p3d_filename() const {
@ -35,6 +35,16 @@ get_p3d_offset() const {
return _p3d_offset;
}
////////////////////////////////////////////////////////////////////
// Function: P3DFileParams::get_p3d_url
// Access: Public
// Description: Returns the string that was passed to set_p3d_url().
////////////////////////////////////////////////////////////////////
inline const string &P3DFileParams::
get_p3d_url() const {
return _p3d_url;
}
////////////////////////////////////////////////////////////////////
// Function: P3DFileParams::get_num_tokens
// Access: Public

View File

@ -33,6 +33,7 @@ P3DFileParams::
P3DFileParams(const P3DFileParams &copy) :
_p3d_filename(copy._p3d_filename),
_p3d_offset(copy._p3d_offset),
_p3d_url(copy._p3d_url),
_tokens(copy._tokens),
_args(copy._args)
{
@ -47,6 +48,7 @@ void P3DFileParams::
operator = (const P3DFileParams &other) {
_p3d_filename = other._p3d_filename;
_p3d_offset = other._p3d_offset;
_p3d_url = other._p3d_url;
_tokens = other._tokens;
_args = other._args;
}
@ -62,7 +64,7 @@ set_p3d_filename(const string &p3d_filename) {
}
////////////////////////////////////////////////////////////////////
// Function: P3DFileParams::set_p3d_filename
// Function: P3DFileParams::set_p3d_offset
// Access: Public
// Description: Specifies the location in the file where
// the p3d file data starts.
@ -72,6 +74,18 @@ set_p3d_offset(const int &p3d_offset) {
_p3d_offset = p3d_offset;
}
////////////////////////////////////////////////////////////////////
// Function: P3DFileParams::set_p3d_url
// Access: Public
// Description: Specifies the original URL that hosted the p3d file,
// if any. This is for documentation purposes only; it
// is communicated to the child Panda3D process.
////////////////////////////////////////////////////////////////////
void P3DFileParams::
set_p3d_url(const string &p3d_url) {
_p3d_url = p3d_url;
}
////////////////////////////////////////////////////////////////////
// Function: P3DFileParams::set_tokens
// Access: Public
@ -179,6 +193,7 @@ make_xml() {
xfparams->SetAttribute("p3d_filename", _p3d_filename);
xfparams->SetAttribute("p3d_offset", _p3d_offset);
xfparams->SetAttribute("p3d_url", _p3d_url);
Tokens::const_iterator ti;
for (ti = _tokens.begin(); ti != _tokens.end(); ++ti) {

View File

@ -32,11 +32,13 @@ public:
void set_p3d_filename(const string &p3d_filename);
void set_p3d_offset(const int &p3d_offset);
void set_p3d_url(const string &p3d_url);
void set_tokens(const P3D_token tokens[], size_t num_tokens);
void set_args(int argc, const char *argv[]);
inline const string &get_p3d_filename() const;
inline int get_p3d_offset() const;
inline const string &get_p3d_url() const;
string lookup_token(const string &keyword) const;
int lookup_token_int(const string &keyword) const;
bool has_token(const string &keyword) const;
@ -58,6 +60,7 @@ private:
string _p3d_filename;
int _p3d_offset;
string _p3d_url;
Tokens _tokens;
Args _args;
};

View File

@ -228,6 +228,8 @@ P3DInstance(P3D_request_ready_func *func,
_main_object->set_string_property("coreapiTimestampString", timestamp_string);
_main_object->set_string_property("coreapiVersionString", inst_mgr->get_coreapi_set_ver());
_main_object->set_bool_property("trustedEnvironment", (int)inst_mgr->get_trusted_environment());
_main_object->set_bool_property("consoleEnvironment", (int)inst_mgr->get_console_environment());
// We'll start off with the "download" image displayed in the splash
// window (when it opens), until we get stuff downloaded.
@ -409,6 +411,7 @@ set_p3d_url(const string &p3d_url) {
set_failed();
return;
}
_fparams.set_p3d_url(p3d_url);
// Save the last part of the URL as the p3d_basename, for reporting
// purposes or whatever.
@ -452,6 +455,8 @@ set_p3d_url(const string &p3d_url) {
////////////////////////////////////////////////////////////////////
int P3DInstance::
make_p3d_stream(const string &p3d_url) {
_fparams.set_p3d_url(p3d_url);
// Save the last part of the URL as the p3d_basename, for reporting
// purposes or whatever.
determine_p3d_basename(p3d_url);

View File

@ -1324,6 +1324,12 @@ set_p3d_filename(P3DCInstance *inst, TiXmlElement *xfparams) {
int p3d_offset = 0;
xfparams->Attribute("p3d_offset", &p3d_offset);
string p3d_url;
const char *p3d_url_c = xfparams->Attribute("p3d_url");
if (p3d_url_c != NULL) {
p3d_url = p3d_url_c;
}
PyObject *token_list = PyList_New(0);
TiXmlElement *xtoken = xfparams->FirstChildElement("token");
while (xtoken != NULL) {
@ -1363,8 +1369,9 @@ set_p3d_filename(P3DCInstance *inst, TiXmlElement *xfparams) {
}
PyObject *result = PyObject_CallMethod
(_runner, (char *)"setP3DFilename", (char *)"sOOiii", p3d_filename.c_str(),
token_list, arg_list, inst->get_instance_id(), _interactive_console, p3d_offset);
(_runner, (char *)"setP3DFilename", (char *)"sOOiiis", p3d_filename.c_str(),
token_list, arg_list, inst->get_instance_id(), _interactive_console, p3d_offset,
p3d_url.c_str());
Py_DECREF(token_list);
Py_DECREF(arg_list);