Browse Source

writeConfigXml

David Rose 16 years ago
parent
commit
c6120c1ec1
1 changed files with 26 additions and 2 deletions
  1. 26 2
      direct/src/p3d/AppRunner.py

+ 26 - 2
direct/src/p3d/AppRunner.py

@@ -33,7 +33,7 @@ else:
     from direct.showbase import VFSImporter
     from direct.showbase import VFSImporter
 
 
 from direct.showbase.DirectObject import DirectObject
 from direct.showbase.DirectObject import DirectObject
-from pandac.PandaModules import VirtualFileSystem, Filename, Multifile, loadPrcFileData, unloadPrcFile, getModelPath, Thread, WindowProperties, ExecutionEnvironment, PandaSystem, Notify, StreamWriter, ConfigVariableString, initAppForGui, TiXmlDocument
+from pandac.PandaModules import VirtualFileSystem, Filename, Multifile, loadPrcFileData, unloadPrcFile, getModelPath, Thread, WindowProperties, ExecutionEnvironment, PandaSystem, Notify, StreamWriter, ConfigVariableString, initAppForGui
 from pandac import PandaModules
 from pandac import PandaModules
 from direct.stdpy import file, glob
 from direct.stdpy import file, glob
 from direct.task.TaskManagerGlobal import taskMgr
 from direct.task.TaskManagerGlobal import taskMgr
@@ -503,6 +503,7 @@ class AppRunner(DirectObject):
 
 
         if not hasattr(PandaModules, 'TiXmlDocument'):
         if not hasattr(PandaModules, 'TiXmlDocument'):
             return
             return
+        from pandac.PandaModules import TiXmlDocument
 
 
         filename = Filename(self.rootDir, self.ConfigBasename)
         filename = Filename(self.rootDir, self.ConfigBasename)
         doc = TiXmlDocument(filename.toOsSpecific())
         doc = TiXmlDocument(filename.toOsSpecific())
@@ -516,7 +517,30 @@ class AppRunner(DirectObject):
                 self.maxDiskUsage = int(maxDiskUsage or '')
                 self.maxDiskUsage = int(maxDiskUsage or '')
             except ValueError:
             except ValueError:
                 pass
                 pass
-            
+
+    def writeConfigXml(self):
+        """ Rewrites the config.xml to the root directory.  This isn't
+        called automatically; an application may call this after
+        adjusting some parameters (such as self.maxDiskUsage). """
+
+        from pandac.PandaModules import TiXmlDocument, TiXmlDeclaration, TiXmlElement
+
+        filename = Filename(self.rootDir, self.ConfigBasename)
+        doc = TiXmlDocument(filename.toOsSpecific())
+        decl = TiXmlDeclaration("1.0", "utf-8", "")
+        doc.InsertEndChild(decl)
+
+        xconfig = TiXmlElement('config')
+        xconfig.SetAttribute('max_disk_usage', str(self.maxDiskUsage))
+        doc.InsertEndChild(xconfig)
+
+        # Write the file to a temporary filename, then atomically move
+        # it to its actual filename, to avoid race conditions when
+        # updating this file.
+        tfile = Filename.temporary(self.rootDir.cStr(), '.xml')
+        if doc.SaveFile(tfile.toOsSpecific()):
+            tfile.renameTo(filename)
+        
 
 
     def checkDiskUsage(self):
     def checkDiskUsage(self):
         """ Checks the total disk space used by all packages, and
         """ Checks the total disk space used by all packages, and