Browse Source

avoid hangup when installing packages

David Rose 15 years ago
parent
commit
eabeb00298
2 changed files with 26 additions and 0 deletions
  1. 25 0
      direct/src/plugin/p3dInstance.cxx
  2. 1 0
      direct/src/plugin/p3dInstance.h

+ 25 - 0
direct/src/plugin/p3dInstance.cxx

@@ -153,6 +153,7 @@ P3DInstance(P3D_request_ready_func *func,
   _download_package_index = 0;
   _download_package_index = 0;
   _total_download_size = 0;
   _total_download_size = 0;
   _total_downloaded = 0;
   _total_downloaded = 0;
+  _packages_specified = false;
   _download_started = false;
   _download_started = false;
   _download_complete = false;
   _download_complete = false;
   _instance_started = false;
   _instance_started = false;
@@ -1114,6 +1115,11 @@ remove_package(P3DPackage *package) {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 bool P3DInstance::
 bool P3DInstance::
 get_packages_info_ready() const {
 get_packages_info_ready() const {
+  if (!_packages_specified) {
+    // We haven't even specified the full set of required packages yet.
+    return false;
+  }
+
   Packages::const_iterator pi;
   Packages::const_iterator pi;
   for (pi = _packages.begin(); pi != _packages.end(); ++pi) {
   for (pi = _packages.begin(); pi != _packages.end(); ++pi) {
     if (!(*pi)->get_info_ready()) {
     if (!(*pi)->get_info_ready()) {
@@ -2074,6 +2080,8 @@ scan_app_desc_file(TiXmlDocument *doc) {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 void P3DInstance::
 void P3DInstance::
 add_packages() {
 add_packages() {
+  assert(!_packages_specified);
+
   P3DInstanceManager *inst_mgr = P3DInstanceManager::get_global_ptr();
   P3DInstanceManager *inst_mgr = P3DInstanceManager::get_global_ptr();
 
 
   TiXmlElement *xrequires = _xpackage->FirstChildElement("requires");
   TiXmlElement *xrequires = _xpackage->FirstChildElement("requires");
@@ -2091,6 +2099,23 @@ add_packages() {
 
 
     xrequires = xrequires->NextSiblingElement("requires");
     xrequires = xrequires->NextSiblingElement("requires");
   }
   }
+
+  _packages_specified = true;
+  if (get_packages_info_ready()) {
+    // All packages are ready to go.  Let's start some download
+    // action.
+    _downloading_packages.clear();
+    _total_download_size = 0;
+    Packages::const_iterator pi;
+    for (pi = _packages.begin(); pi != _packages.end(); ++pi) {
+      P3DPackage *package = (*pi);
+      if (package->get_info_ready() && !package->get_ready()) {
+        _downloading_packages.push_back(package);
+        _total_download_size += package->get_download_size();
+      }
+    }
+    ready_to_install();
+  }
 }
 }
 
 
 
 

+ 1 - 0
direct/src/plugin/p3dInstance.h

@@ -349,6 +349,7 @@ private:
   int _download_package_index;
   int _download_package_index;
   size_t _total_download_size;
   size_t _total_download_size;
   size_t _total_downloaded;
   size_t _total_downloaded;
+  bool _packages_specified;
   bool _download_started;
   bool _download_started;
   bool _download_complete;
   bool _download_complete;
   bool _instance_started;
   bool _instance_started;