David Rose vor 16 Jahren
Ursprung
Commit
c6120c1ec1
1 geänderte Dateien mit 26 neuen und 2 gelöschten Zeilen
  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.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 direct.stdpy import file, glob
 from direct.task.TaskManagerGlobal import taskMgr
@@ -503,6 +503,7 @@ class AppRunner(DirectObject):
 
         if not hasattr(PandaModules, 'TiXmlDocument'):
             return
+        from pandac.PandaModules import TiXmlDocument
 
         filename = Filename(self.rootDir, self.ConfigBasename)
         doc = TiXmlDocument(filename.toOsSpecific())
@@ -516,7 +517,30 @@ class AppRunner(DirectObject):
                 self.maxDiskUsage = int(maxDiskUsage or '')
             except ValueError:
                 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):
         """ Checks the total disk space used by all packages, and