pymoul-svn Mailing List for pyMoul (Page 2)
Status: Alpha
                
                Brought to you by:
                
                    tiran
                    
                
            You can subscribe to this list here.
| 2007 | 
          Jan
           (89)  | 
        
        
        
        
          Feb
           (108)  | 
        
        
        
        
          Mar
           (62)  | 
        
        
        
        
          Apr
           (8)  | 
        
        
        
        
          May
           (9)  | 
        
        
        
        
          Jun
           (2)  | 
        
        
        
        
          Jul
           | 
        
        
        
        
          Aug
           | 
        
        
        
        
          Sep
           | 
        
        
        
        
          Oct
           | 
        
        
        
        
          Nov
           | 
        
        
        
        
          Dec
           | 
        
      
|---|
| 
     
      
      
      From: <ti...@us...> - 2007-03-21 12:33:29
      
     
   | 
Revision: 274
          http://pymoul.svn.sourceforge.net/pymoul/?rev=274&view=rev
Author:   tiran
Date:     2007-03-21 05:33:30 -0700 (Wed, 21 Mar 2007)
Log Message:
-----------
Branched pymoul/trunk r269 to branches/before_no_crypt_20070321
Added Paths:
-----------
    pymoul/branches/before_no_crypt_20070321/
Copied: pymoul/branches/before_no_crypt_20070321 (from rev 273, pymoul/trunk)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-21 12:28:35
      
     
   | 
Revision: 273
          http://pymoul.svn.sourceforge.net/pymoul/?rev=273&view=rev
Author:   tiran
Date:     2007-03-21 05:28:30 -0700 (Wed, 21 Mar 2007)
Log Message:
-----------
grrr ... I thought that .../UruLive Preferences/... was wrong
Also fixed the getMoulInstallDir search function. Now it should detect MOUL in /Applications and ~/Applications
Modified Paths:
--------------
    pymoul/trunk/src/moul/osdependent/darwin/__init__.py
Modified: pymoul/trunk/src/moul/osdependent/darwin/__init__.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/darwin/__init__.py	2007-03-20 18:59:01 UTC (rev 272)
+++ pymoul/trunk/src/moul/osdependent/darwin/__init__.py	2007-03-21 12:28:30 UTC (rev 273)
@@ -31,7 +31,7 @@
 LOG.warning('Mac/Darwin support is experimental')
 
 HOME = os.path.expanduser('~')
-MOUL_DIR = "%s/Library/Preferences/UruLive/Preferences/p_drive/My Documents/Uru Live" % HOME
+MOUL_DIR = "%s/Library/Preferences/UruLive Preferences/p_drive/My Documents/Uru Live" % HOME
 APP_PATH = "Uru Live.app/Contents/Resources/Game.app/Contents/Resources/transgaming/c_drive/Program Files/Uru Live/"
 APP_NAME = "Uru Live.app"
 EXEC_NAME = "???" # XXX
@@ -59,7 +59,7 @@
     """Get path to MOUL install dir
     """
     for path in LOCATIONS:
-        if os.path.isfile(os.path.join(path, EXEC_NAME)):
+        if os.path.isfile(os.path.join(path, UPDATER)):
             LOG.info("Uru directory found: %s" % path)
             return path
     LOG.warning("Uru directory NOT found! Search path was: \n %s" % 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-20 18:59:09
      
     
   | 
Revision: 272
          http://pymoul.svn.sourceforge.net/pymoul/?rev=272&view=rev
Author:   tiran
Date:     2007-03-20 11:59:01 -0700 (Tue, 20 Mar 2007)
Log Message:
-----------
More mkdir fixes
Modified Paths:
--------------
    pymoul/trunk/src/moul/file/plasmalog.py
Modified: pymoul/trunk/src/moul/file/plasmalog.py
===================================================================
--- pymoul/trunk/src/moul/file/plasmalog.py	2007-03-20 17:42:38 UTC (rev 271)
+++ pymoul/trunk/src/moul/file/plasmalog.py	2007-03-20 18:59:01 UTC (rev 272)
@@ -58,14 +58,15 @@
 
         if not os.path.isdir(self._srcdir):
             LOG.warning("%s is not a directory" % self._srcdir)
-        if not self.isPlasmaLogDir():
-            self._ispldir = False
-            LOG.warning("%s is not a plasma log directory" % self._srcdir)
         else:
-            self._ispldir = True
-        if not os.path.isdir(self._destdir):
-            LOG.info("Creating chatlog directory %s" % self._destdir)
-            os.mkdir(self._destdir)
+            if not self.isPlasmaLogDir():
+                self._ispldir = False
+                LOG.warning("%s is not a plasma log directory" % self._srcdir)
+            else:
+                self._ispldir = True
+            if not os.path.isdir(self._destdir):
+                LOG.info("Creating chatlog directory %s" % self._destdir)
+                os.mkdir(self._destdir)
 
     def setZip(self, boolean):
         """Set ZIP flag
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-20 17:45:30
      
     
   | 
Revision: 271
          http://pymoul.svn.sourceforge.net/pymoul/?rev=271&view=rev
Author:   tiran
Date:     2007-03-20 10:42:38 -0700 (Tue, 20 Mar 2007)
Log Message:
-----------
Workaround for new semantic of createTree
Modified Paths:
--------------
    pymoul/trunk/src/moul/file/directory.py
    pymoul/trunk/src/moul/file/tests/test_directory.py
Modified: pymoul/trunk/src/moul/file/directory.py
===================================================================
--- pymoul/trunk/src/moul/file/directory.py	2007-03-20 17:37:52 UTC (rev 270)
+++ pymoul/trunk/src/moul/file/directory.py	2007-03-20 17:42:38 UTC (rev 271)
@@ -210,7 +210,7 @@
         """
         created = []
         if not self.exists():
-            raise OSError("Basepath doesn't exist") # XXX
+            raise OSError("Basepath %s doesn't exist" % self._basepath) # XXX
             os.mkdir(self._basepath)
             created.append(self._basepath)
         for key in self._dirmapping:
Modified: pymoul/trunk/src/moul/file/tests/test_directory.py
===================================================================
--- pymoul/trunk/src/moul/file/tests/test_directory.py	2007-03-20 17:37:52 UTC (rev 270)
+++ pymoul/trunk/src/moul/file/tests/test_directory.py	2007-03-20 17:42:38 UTC (rev 271)
@@ -69,6 +69,7 @@
         self.failIf(self.urudir.factory('audioini').exists())
         self.failIf(self.urudir.factory('graphicsini').exists())
 
+        os.mkdir(tmpdir) # XXX
         self.urudir.createTree()
         self.failUnless(self.urudir.exists())
         self.urudir.initializeFactories()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-20 17:45:27
      
     
   | 
Revision: 270
          http://pymoul.svn.sourceforge.net/pymoul/?rev=270&view=rev
Author:   tiran
Date:     2007-03-20 10:37:52 -0700 (Tue, 20 Mar 2007)
Log Message:
-----------
Infrastructure update (xxxreport, languages ...)
Modified Paths:
--------------
    pymoul/trunk/Makefile.in
    pymoul/trunk/doc/TODO.txt
    pymoul/trunk/doc/XXXreport.html
    pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts
    pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts
    pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts
    pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts
    pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts
Modified: pymoul/trunk/Makefile.in
===================================================================
--- pymoul/trunk/Makefile.in	2007-03-20 17:19:45 UTC (rev 269)
+++ pymoul/trunk/Makefile.in	2007-03-20 17:37:52 UTC (rev 270)
@@ -67,6 +67,7 @@
 clean:
 	find . \( -name '*.o' -o -name '*~' -o -name '*.so' -o -name '*.py[cod]' -o -name '*.dll' \) -exec rm -f {} \;
 	rm -rf build
+	rm -rf doc/html
 
 realclean: clean
 	rm -f TAGS
@@ -102,3 +103,5 @@
 serverlist:
 	 PYTHONPATH="src" $(PYTHON) src/moul/server/serverlist.py
 
+infrastructure: clean inplace ui languages xxxreport propset fixlineendings doc_html serverlist
+
Modified: pymoul/trunk/doc/TODO.txt
===================================================================
--- pymoul/trunk/doc/TODO.txt	2007-03-20 17:19:45 UTC (rev 269)
+++ pymoul/trunk/doc/TODO.txt	2007-03-20 17:37:52 UTC (rev 270)
@@ -12,7 +12,8 @@
  * connect QThread.terminate() slots with its parents close/destroy signal
    handler
  * clean documents/journal/localization naming
- * table model for PING tab
+ * Redesign mkdir/makedirs of data directory
+ * show meaningful error message when a directory is missing
 
 future
 ------
Modified: pymoul/trunk/doc/XXXreport.html
===================================================================
--- pymoul/trunk/doc/XXXreport.html	2007-03-20 17:19:45 UTC (rev 269)
+++ pymoul/trunk/doc/XXXreport.html	2007-03-20 17:37:52 UTC (rev 270)
@@ -3,11 +3,11 @@
 
 <body>
 <h1>pyMoul - Developer report tools: XXX/TODO/FIXME comments</h1>
-<p>Generated on Mon, 12 Mar 2007 11:58:47 CET, based on Zope 3's XXX report</p>
+<p>Generated on Tue, 20 Mar 2007 18:33:33 CET, based on Zope 3's XXX report</p>
 <hr>
 <h3>Summary</h3>
 <p>
- There are currently 88 XXX/TODO/FIXME comments.
+ There are currently 98 XXX/TODO/FIXME comments.
 </p>
 <hr/>
 <h3>Listing</h3>
@@ -27,10 +27,14 @@
 base-691-                from zope.tales.tales import TALESTracebackSupplement
 base-692-                from zope.pagetemplate.pagetemplate \
 base-693-                        import PageTemplateTracebackSupplement
-</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/chatlog.py.svn-base:216</b><br/><pre>        # TODO: inefficient, compare list with directory content
-base-217-        if not os.path.isdir(self._archivedir):
-base-218-            LOG.warning("%s is not a directory" % self._archivedir)
-base-219-            return
+</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/chatlog.py.svn-base:106</b><br/><pre>                return False # XXX ???
+base-107-        return True
+base-108-
+base-109-    def findLogs(self):
+</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/chatlog.py.svn-base:217</b><br/><pre>        # TODO: inefficient, compare list with directory content
+base-218-        if not os.path.isdir(self._archivedir):
+base-219-            LOG.warning("%s is not a directory" % self._archivedir)
+base-220-            return
 </pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:112</b><br/><pre>        # XXX use struct
 base-113-        if header is None:
 base-114-            fd = self._fd
@@ -39,10 +43,10 @@
 base-128-        if size is None:
 base-129-            size = self.getFileSize()
 base-130-        leading = 4* [None]
-</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:267</b><br/><pre>                    # XXX: move checks to copy method!
-base-268-                    if not os.path.isfile(fixed):
-base-269-                        self._tocheck.append((ki, fixed))
-base-270-                        continue
+</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:268</b><br/><pre>                    # XXX: move checks to copy method!
+base-269-                    if not os.path.isfile(fixed):
+base-270-                        self._tocheck.append((ki, fixed))
+base-271-                        continue
 </pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:157</b><br/><pre>    # TODO: write me
 base-158-    pass
 base-159-
@@ -59,6 +63,14 @@
 base-60-        return len([name for name in os.listdir(path)
 base-61-                    if os.path.isfile(os.path.join(path, name))])
 base-62-
+</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/directory.py.svn-base:202</b><br/><pre>        #os.makedirs(path) # XXX
+base-203-        return path
+base-204-
+base-205-    def createTree(self):
+</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/directory.py.svn-base:213</b><br/><pre>            raise OSError("Basepath doesn't exist") # XXX
+base-214-            os.mkdir(self._basepath)
+base-215-            created.append(self._basepath)
+base-216-        for key in self._dirmapping:
 </pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:105</b><br/><pre>        # TODO: more
 base-106-
 base-107-    def test_publicapi_create(self):
@@ -91,7 +103,11 @@
         fd = open(os.path.join(path, fname), 'wb')
         fd.write('dummy')
         fd.close()
-</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:216</b><br/><pre>        # TODO: inefficient, compare list with directory content
+</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:106</b><br/><pre>                return False # XXX ???
+        return True
+
+    def findLogs(self):
+</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:217</b><br/><pre>        # TODO: inefficient, compare list with directory content
         if not os.path.isdir(self._archivedir):
             LOG.warning("%s is not a directory" % self._archivedir)
             return
@@ -103,7 +119,7 @@
         if size is None:
             size = self.getFileSize()
         leading = 4* [None]
-</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:267</b><br/><pre>                    # XXX: move checks to copy method!
+</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:268</b><br/><pre>                    # XXX: move checks to copy method!
                     if not os.path.isfile(fixed):
                         self._tocheck.append((ki, fixed))
                         continue
@@ -123,6 +139,14 @@
         return len([name for name in os.listdir(path)
                     if os.path.isfile(os.path.join(path, name))])
 
+</pre></li><li><b>File: utilities/../src/moul/file/directory.py:202</b><br/><pre>        #os.makedirs(path) # XXX
+        return path
+
+    def createTree(self):
+</pre></li><li><b>File: utilities/../src/moul/file/directory.py:213</b><br/><pre>            raise OSError("Basepath doesn't exist") # XXX
+            os.mkdir(self._basepath)
+            created.append(self._basepath)
+        for key in self._dirmapping:
 </pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:74</b><br/><pre>    # XXX: dos format
 base-75-    return data.replace("\r\n", "\n")
 base-76-
@@ -186,38 +210,38 @@
 base-290-        del self._kiimage_progressbar
 base-291-        self.pb_kiimage_repair.setEnabled(True)
 base-292-        mb = qtutils.infoMB(self,
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:478</b><br/><pre>        # TODO: thread safety!
-base-479-        self.servers = servers
-base-480-        if not self.isRunning():
-base-481-            self.start()
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:484</b><br/><pre>        # TODO: thread safety!
-base-485-        # emit a list of names first
-base-486-        for i, server in enumerate(self.servers):
-base-487-            self.emit(SIGNAL("server(int, const QString&)"), i, server.name)
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:522</b><br/><pre>        # TODO check this
-base-523-        self._running = False
-base-524-        self.condition.wakeAll()
-base-525-    
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:477</b><br/><pre>        # TODO: thread safety!
+base-478-        self.servers = servers
+base-479-        if not self.isRunning():
+base-480-            self.start()
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:483</b><br/><pre>        # TODO: thread safety!
+base-484-        # emit a list of names first
+base-485-        for i, server in enumerate(self.servers):
+base-486-            self.emit(SIGNAL("server(int, const QString&)"), i, server.name)
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:521</b><br/><pre>        # TODO check this
+base-522-        self._running = False
+base-523-        self.condition.wakeAll()
+base-524-
 </pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/errorhandler.py.svn-base:45</b><br/><pre>    # TODO: translation aware
 base-46-    LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
 base-47-    if getattr(sys, 'frozen', False):
 base-48-        try:
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/dninumbers.py.svn-base:74</b><br/><pre>        self.dnitime_timer.setInterval(FACTOR_SP*1000.0/1.0) # XXX: smooth
-base-75-        #fself.dnitime_timer.setCallable(self.clockscene.timeEvent)
-base-76-
-base-77-        # time zone
-base:78:        # TODO: change timer from every second to once a minute?
-base-79-        self.timezone_timer = QtCore.QTimer(self.context)
-base-80-        self.timezone_timer.setInterval(1000) # 1 sec
-base-81-        ct = self.caverntime.info()
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/dninumbers.py.svn-base:101</b><br/><pre>        # TODO: needs optimization? run only when timer tab is active
-base-102-        for name in ('sb_hahr', 'sb_yahr', 'sb_gahrtahvo',
-base-103-                     'sb_tahvo', 'sb_gorahn', 'sb_prorahn'):
-base-104-            self.connect(getattr(self, name), SIGNAL("valueChanged(int)"),
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/dninumbers.py.svn-base:576</b><br/><pre>        # XXX: parent?
-base-577-        #self.clocktext = QtGui.QGraphicsTextItem(None, self)
-base-578-        #self.clocktext.setPos(0, yoff+2*height+2*space)
-base-579-        # circular day clock
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/dninumbers.py.svn-base:80</b><br/><pre>        self.dnitime_timer.setInterval(FACTOR_SP*1000.0/1.0) # XXX: smooth
+base-81-        #fself.dnitime_timer.setCallable(self.clockscene.timeEvent)
+base-82-
+base-83-        # time zone
+base:84:        # TODO: change timer from every second to once a minute?
+base-85-        self.timezone_timer = QtCore.QTimer(self.context)
+base-86-        self.timezone_timer.setInterval(1000) # 1 sec
+base-87-        ct = self.caverntime.info()
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/dninumbers.py.svn-base:107</b><br/><pre>        # TODO: needs optimization? run only when timer tab is active
+base-108-        for name in ('sb_hahr', 'sb_yahr', 'sb_gahrtahvo',
+base-109-                     'sb_tahvo', 'sb_gorahn', 'sb_prorahn'):
+base-110-            self.connect(getattr(self, name), SIGNAL("valueChanged(int)"),
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/dninumbers.py.svn-base:679</b><br/><pre>        # XXX: parent?
+base-680-        #self.clocktext = QtGui.QGraphicsTextItem(None, self)
+base-681-        #self.clocktext.setPos(0, yoff+2*height+2*space)
+base-682-        # circular day clock
 </pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:150</b><br/><pre>            # FIXME: signal doesn't do anything
             self.emit(SIGNAL("close()"))
             event.accept()
@@ -226,38 +250,50 @@
         del self._kiimage_progressbar
         self.pb_kiimage_repair.setEnabled(True)
         mb = qtutils.infoMB(self,
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:478</b><br/><pre>        # TODO: thread safety!
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:477</b><br/><pre>        # TODO: thread safety!
         self.servers = servers
         if not self.isRunning():
             self.start()
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:484</b><br/><pre>        # TODO: thread safety!
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:483</b><br/><pre>        # TODO: thread safety!
         # emit a list of names first
         for i, server in enumerate(self.servers):
             self.emit(SIGNAL("server(int, const QString&)"), i, server.name)
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:522</b><br/><pre>        # TODO check this
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:521</b><br/><pre>        # TODO check this
         self._running = False
         self.condition.wakeAll()
-    
+
 </pre></li><li><b>File: utilities/../src/moul/qt/errorhandler.py:45</b><br/><pre>    # TODO: translation aware
     LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
     if getattr(sys, 'frozen', False):
         try:
-</pre></li><li><b>File: utilities/../src/moul/qt/dninumbers.py:74</b><br/><pre>        self.dnitime_timer.setInterval(FACTOR_SP*1000.0/1.0) # XXX: smooth
+</pre></li><li><b>File: utilities/../src/moul/qt/dninumbers.py:80</b><br/><pre>        self.dnitime_timer.setInterval(FACTOR_SP*1000.0/1.0) # XXX: smooth
         #fself.dnitime_timer.setCallable(self.clockscene.timeEvent)
 
         # time zone
         self.timezone_timer = QtCore.QTimer(self.context)
         self.timezone_timer.setInterval(1000) # 1 sec
         ct = self.caverntime.info()
-</pre></li><li><b>File: utilities/../src/moul/qt/dninumbers.py:101</b><br/><pre>        # TODO: needs optimization? run only when timer tab is active
+</pre></li><li><b>File: utilities/../src/moul/qt/dninumbers.py:107</b><br/><pre>        # TODO: needs optimization? run only when timer tab is active
         for name in ('sb_hahr', 'sb_yahr', 'sb_gahrtahvo',
                      'sb_tahvo', 'sb_gorahn', 'sb_prorahn'):
             self.connect(getattr(self, name), SIGNAL("valueChanged(int)"),
-</pre></li><li><b>File: utilities/../src/moul/qt/dninumbers.py:576</b><br/><pre>        # XXX: parent?
+</pre></li><li><b>File: utilities/../src/moul/qt/dninumbers.py:679</b><br/><pre>        # XXX: parent?
         #self.clocktext = QtGui.QGraphicsTextItem(None, self)
         #self.clocktext.setPos(0, yoff+2*height+2*space)
         # circular day clock
-</pre></li><li><b>File: utilities/../src/moul/osdependent/__init__.py:126</b><br/><pre># XXX: what about cygwin, bsd and others?
+</pre></li><li><b>File: utilities/../src/moul/time/.svn/text-base/podage.py.svn-base:62</b><br/><pre># XXX Uru's main game server is off 3min 35sec
+base-63-BASE_DT = datetime(2007, 3, 7, 1, 7, 0, tzinfo=UTC)
+base-64-#BASE_DT = datetime(2007, 3, 7, 1, 10, 9, tzinfo=UTC)
+base-65-
+</pre></li><li><b>File: utilities/../src/moul/time/podage.py:62</b><br/><pre># XXX Uru's main game server is off 3min 35sec
+BASE_DT = datetime(2007, 3, 7, 1, 7, 0, tzinfo=UTC)
+#BASE_DT = datetime(2007, 3, 7, 1, 10, 9, tzinfo=UTC)
+
+</pre></li><li><b>File: utilities/../src/moul/osdependent/__init__.py:46</b><br/><pre>    # XXX: disabled for now
+    #pkg_resources.require("enumprocess>=0.1.1")
+
+from enumprocess import getPidNames
+</pre></li><li><b>File: utilities/../src/moul/osdependent/__init__.py:127</b><br/><pre># XXX: what about cygwin, bsd and others?
 _thismodule = sys.modules[__name__]
 if __WIN32__:
     from moul.osdependent import win32 as osdep_win32
@@ -269,15 +305,19 @@
 base-38-UPDATER = "Uru Live.app/Contents/Resources/Game.app/Contents/Resources/URU Live Updater.app/Contents/MacOS/URU Live Updater"
 base-39-LOCATIONS = [
 base-40-    "/Applications",
-</pre></li><li><b>File: utilities/../src/moul/osdependent/.svn/text-base/__init__.py.svn-base:126</b><br/><pre># XXX: what about cygwin, bsd and others?
-base-127-_thismodule = sys.modules[__name__]
-base-128-if __WIN32__:
-base-129-    from moul.osdependent import win32 as osdep_win32
-</pre></li><li><b>File: utilities/../src/binaryfile/.svn/text-base/tests.py.svn-base:107</b><br/><pre>        # XXX: no test data
-base-108-        pass
-base-109-
-base-110-    def test_string0(self):
-</pre></li><li><b>File: utilities/../src/binaryfile/tests.py:107</b><br/><pre>        # XXX: no test data
+</pre></li><li><b>File: utilities/../src/moul/osdependent/.svn/text-base/__init__.py.svn-base:46</b><br/><pre>    # XXX: disabled for now
+base-47-    #pkg_resources.require("enumprocess>=0.1.1")
+base-48-
+base-49-from enumprocess import getPidNames
+</pre></li><li><b>File: utilities/../src/moul/osdependent/.svn/text-base/__init__.py.svn-base:127</b><br/><pre># XXX: what about cygwin, bsd and others?
+base-128-_thismodule = sys.modules[__name__]
+base-129-if __WIN32__:
+base-130-    from moul.osdependent import win32 as osdep_win32
+</pre></li><li><b>File: utilities/../src/binaryfile/.svn/text-base/tests.py.svn-base:108</b><br/><pre>        # XXX: no test data
+base-109-        pass
+base-110-
+base-111-    def test_string0(self):
+</pre></li><li><b>File: utilities/../src/binaryfile/tests.py:108</b><br/><pre>        # XXX: no test data
         pass
 
     def test_string0(self):
@@ -581,14 +621,14 @@
 base-317-base-47-base-158-    pass
 base-318-base-48-base-159-
 base-319-base-49-base-160-class Constrain(object):
-base:320:base:50:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-321-base-51-base-555-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-322-base-52-base-556-        # microphon missing -> OS mixer
-base-323-base-53-base-557-        }
-base:324:base:54:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-325-base-55-base-643-
-base-326-base-56-base-644-class GraphicsIni(ConfFile):
-base-327-base-57-base-645-    _filename = 'graphics.ini'
+base:320:base:50:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:556</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
+base-321-base-51-base-557-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
+base-322-base-52-base-558-        # microphon missing -> OS mixer
+base-323-base-53-base-559-        }
+base:324:base:54:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:644</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
+base-325-base-55-base-645-
+base-326-base-56-base-646-class GraphicsIni(ConfFile):
+base-327-base-57-base-647-    _filename = 'graphics.ini'
 base:328:base:58:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/directory.py.svn-base:59</b><br/><pre>        # TODO: fnmatch
 base-329-base-59-base-60-        return len([name for name in os.listdir(path)
 base-330-base-60-base-61-                    if os.path.isfile(os.path.join(path, name))])
@@ -602,7 +642,7 @@
 base-338-base-68-base-116-class AudioIniTest(GenericIniTest):
 base-339-base-69-base-117-    enc = aud_enc
 base:340:base:70:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:152</b><br/><pre>        #XXX self.failIf(p.isChanged())
-base-341-base-71-base-153-        
+base-341-base-71-base-153-
 base-342-base-72-base-154-        p.screenres = 0
 base-343-base-73-base-155-        eq(p._get('Graphics.Width'), 800)
 base:344:base:74:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/utils.py.svn-base:80</b><br/><pre>    for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
@@ -618,1992 +658,2340 @@
 base-354-base-84-class AudioIniTest(GenericIniTest):
 base-355-base-85-    enc = aud_enc
 base:356:base:86:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:152</b><br/><pre>        #XXX self.failIf(p.isChanged())
-base-357-base-87-        
+base-357-base-87-
 base-358-base-88-        p.screenres = 0
 base-359-base-89-        eq(p._get('Graphics.Width'), 800)
-base:360:base:90:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py~:105</b><br/><pre>        # TODO: more
-base-361-base-91-
-base-362-base-92-    def test_publicapi_create(self):
-base-363-base-93-        inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
-base:364:base:94:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py~:116</b><br/><pre>        # TODO: more
-base-365-base-95-
-base-366-base-96-class AudioIniTest(GenericIniTest):
-base-367-base-97-    enc = aud_enc
-base:368:base:98:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py~:154</b><br/><pre>        #XXX self.failIf(p.isChanged())
-base-369-base-99-        
-base-370-base-100-        p.screenres = 0
-base-371-base-101-        eq(p._get('Graphics.Width'), 800)
-base:372:base:102:</pre></li><li><b>File: utilities/../src/moul/file/tests/utils.py:80</b><br/><pre>    for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
-base-373-base-103-        fd = open(os.path.join(path, fname), 'wb')
-base-374-base-104-        fd.write('dummy')
-base-375-base-105-        fd.close()
-base:376:base:106:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:216</b><br/><pre>        # TODO: inefficient, compare list with directory content
-base-377-base-107-        if not os.path.isdir(self._archivedir):
-base-378-base-108-            LOG.warning("%s is not a directory" % self._archivedir)
-base-379-base-109-            return
-base:380:base:110:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:112</b><br/><pre>        # XXX use struct
-base-381-base-111-        if header is None:
-base-382-base-112-            fd = self._fd
-base-383-base-113-            fd.seek(0)
-base:384:base:114:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:127</b><br/><pre>        # XXX use struct
-base-385-base-115-        if size is None:
-base-386-base-116-            size = self.getFileSize()
-base-387-base-117-        leading = 4* [None]
-base:388:base:118:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:267</b><br/><pre>                    # XXX: move checks to copy method!
-base-389-base-119-                    if not os.path.isfile(fixed):
-base-390-base-120-                        self._tocheck.append((ki, fixed))
-base-391-base-121-                        continue
-base:392:base:122:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:157</b><br/><pre>    # TODO: write me
-base-393-base-123-    pass
-base-394-base-124-
-base-395-base-125-class Constrain(object):
-base:396:base:126:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-397-base-127-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-398-base-128-        # microphon missing -> OS mixer
-base-399-base-129-        }
-base:400:base:130:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-401-base-131-
-base-402-base-132-class GraphicsIni(ConfFile):
-base-403-base-133-    _filename = 'graphics.ini'
-base:404:base:134:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:112</b><br/><pre>        # XXX use struct
-base-405-base-135-        if header is None:
-base-406-base-136-            fd = self._fd
-base-407-base-137-            fd.seek(0)
-base:408:base:138:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:127</b><br/><pre>        # XXX use struct
-base-409-base-139-        if size is None:
-base-410-base-140-            size = self.getFileSize()
-base-411-base-141-        leading = 4* [None]
-base:412:base:142:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:267</b><br/><pre>                    # XXX: move checks to copy method!
-base-413-base-143-                    if not os.path.isfile(fixed):
-base-414-base-144-                        self._tocheck.append((ki, fixed))
-base-415-base-145-                    else:
-base:416:base:146:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:157</b><br/><pre>    # TODO: write me
-base-417-base-147-    pass
-base-418-base-148-
-base-419-base-149-class Constrain(object):
-base:420:base:150:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-421-base-151-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-422-base-152-        # microphon missing -> OS mixer
-base-423-base-153-        }
-base:424:base:154:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-425-base-155-
-base-426-base-156-class GraphicsIni(ConfFile):
-base-427-base-157-    _filename = 'graphics.ini'
-base:428:base:158:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py~:216</b><br/><pre>        # TODO: inefficient, compare list with directory content
-base-429-base-159-        if not os.path.isdir(self._archivedir):
-base-430-base-160-            LOG.warning("%s is not a directory" % self._archivedir)
-base-431-base-161-            return
-base:432:base:162:</pre></li><li><b>File: utilities/../src/moul/file/directory.py:59</b><br/><pre>        # TODO: fnmatch
-base-433-base-163-        return len([name for name in os.listdir(path)
-base-434-base-164-                    if os.path.isfile(os.path.join(path, name))])
-base-435-base-165-
-base:436:base:166:</pre></li><li><b>File: utilities/../src/moul/file/directory.py~:59</b><br/><pre>        # TODO: fnmatch
-base-437-base-167-        return len([name for name in os.listdir(path)
-base-438-base-168-                    if os.path.isfile(os.path.join(path, name))])
-base-439-base-169-
-base:440:base:170:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:76</b><br/><pre>    # XXX: dos format
-base-441-base-171-base-77-    return data.replace("\r\n", "\n")
-base-442-base-172-base-78-
-base-443-base-173-base-79-def encryptWDYS(instr, fout):
-base:444:base:174:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:86</b><br/><pre>    # XXX: dos format
-base-445-base-175-base-87-    instr = instr.replace("\n", "\r\n")
-base-446-base-176-base-88-    fout.seek(0)
-base-447-base-177-base-89-    fout.write(HEADER)
-base:448:base:178:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/elf.py.svn-base:28</b><br/><pre># TODO: use BinaryFile
-base-449-base-179-base-29-
-base-450-base-180-base-30-def list2int(lst):
-base-451-base-181-base-31-    return [ord(s) for s in lst]
-base:452:base:182:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/elf.py.svn-base:72</b><br/><pre>    # XXX NotImplemented
-base-453-base-183-base-73-    raise NotImplementedError
-base-454-base-184-base-74-    
-base-455-base-185-base-75-def decipher(crypt, size, key):
-base:456:base:186:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/binary.py.svn-base:293</b><br/><pre>        if size > 1024: # XXX: ???
-base-457-base-187-base-294-            raise ValueError("string is too long: %i" % size)
-base-458-base-188-base-295-        if self.version == 5:
-base-459-base-189-base-296-            size |= 0xF000
-base:460:base:190:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/binary.py.svn-base:315</b><br/><pre>        if size > 1024: # XXX: ???
-base-461-base-191-base-316-            raise ValueError("size '%i' > 1024 at position %s(%s)" % 
-base-462-base-192-base-317-                             (size, fd.tell(), repr(fd)))
-base-463-base-193-base-318-        if self.version == 5:
-base:464:base:194:base:319:            # XXX: testme
-base-465-base-195-base-320-            # read data as tuple of integeres
-base-466-base-196-base-321-            data = fd.readPacked("<%iI" % size)
-base-467-base-197-base-322-            # OR integers with 0xff and write their char equivalent to string
-base:468:base:198:</pre></li><li><b>File: utilities/../src/moul/crypt/tests/.svn/text-base/test_binary.py.svn-base:98</b><br/><pre>        # XXX: no test data
-base-469-base-199-base-99-        pass
-base-470-base-200-base-100-
-base-471-base-201-base-101-    def test_string0(self):
-base:472:base:202:</pre></li><li><b>File: utilities/../src/moul/crypt/tests/test_binary.py:98</b><br/><pre>        # XXX: no test data
-base-473-base-203-        pass
-base-474-base-204-
-base-475-base-205-    def test_string0(self):
-base:476:base:206:</pre></li><li><b>File: utilities/../src/moul/crypt/tests/test_binary.py~:98</b><br/><pre>        # XXX: no test data
-base-477-base-207-        pass
-base-478-base-208-
-base-479-base-209-    def test_string0(self):
-base:480:base:210:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:76</b><br/><pre>    # XXX: dos format
-base-481-base-211-    return data.replace("\r\n", "\n")
-base-482-base-212-
-base-483-base-213-def encryptWDYS(instr, fout):
-base:484:base:214:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:86</b><br/><pre>    # XXX: dos format
-base-485-base-215-    instr = instr.replace("\n", "\r\n")
-base-486-base-216-    fout.seek(0)
-base-487-base-217-    fout.write(HEADER)
-base:488:base:218:</pre></li><li><b>File: utilities/../src/moul/crypt/binary.py~:293</b><br/><pre>        if size > 1024: # XXX: ???
-base-489-base-219-            raise ValueError("string is too long: %i" % size)
-base-490-base-220-        if self.version == 5:
-base-491-base-221-            size |= 0xF000
-base:492:base:222:</pre></li><li><b>File: utilities/../src/moul/crypt/binary.py~:315</b><br/><pre>        if size > 1024: # XXX: ???
-base-493-base-223-            raise ValueError("size '%i' > 1024 at position %s(%s)" % 
-base-494-base-224-                             (size, fd.tell(), repr(fd)))
-base-495-base-225-        if self.version == 5:
-base:496:</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:229</b><br/><pre></pre></li><li><b>File: utilities/../src/moul/crypt/elf.py:28</b><br/><pre># TODO: use BinaryFile
-base-497-base-230-
-base-498-base-231-def list2int(lst):
-base-499-base-232-    return [ord(s) for s in lst]
-base:500:base:233:</pre></li><li><b>File: utilities/../src/moul/crypt/elf.py:72</b><br/><pre>    # XXX NotImplemented
-base-501-base-234-    raise NotImplementedError
-base-502-base-235-    
-base-503-base-236-def decipher(crypt, size, key):
-base:504:base:237:</pre></li><li><b>File: utilities/../src/moul/crypt/binary.py:293</b><br/><pre>        if size > 1024: # XXX: ???
-base-505-base-238-            raise ValueError("string is too long: %i" % size)
-base-506-base-239-        if self.version == 5:
-base-507-base-240-            size |= 0xF000
-base:508:base:241:</pre></li><li><b>File: utilities/../src/moul/crypt/binary.py:315</b><br/><pre>        if size > 1024: # XXX: ???
-base-509-base-242-            raise ValueError("size '%i' > 1024 at position %s(%s)" % 
-base-510-base-243-                             (size, fd.tell(), repr(fd)))
-base-511-base-244-        if self.version == 5:
-base:512:</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:248</b><br/><pre></pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:154</b><br/><pre>            # FIXME: signal doesn't do anything
-base-513-base-249-base-155-            self.emit(SIGNAL("close()"))
-base-514-base-250-base-156-            event.accept()
-base-515-base-251-base-157-        event.ignore()
-base:516:base:252:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:293</b><br/><pre>        del self._kiimage_threadlet# TODO: other message box
-base-517-base-253-base-294-        del self._kiimage_progressbar
-base-518-base-254-base-295-        self.pb_kiimage_repair.setEnabled(True)
-base-519-base-255-base-296-        mb = qtutils.infoMB(self,
-base:520:base:256:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:392</b><br/><pre>        # TODO: change timer from every second to every minute
-base-521-base-257-base-393-        self._timezone_timer = QtCore.QTimer(self)
-base-522-base-258-base-394-        self._timezone_timer.setInterval(1000) # 1 sec
-base:523:base:259:base:395:        # TODO: needs optimization? run only when timer tab is active
-base-524-base-260-base-396-        self.connect(self._timezone_timer, SIGNAL('timeout()'),
-base-525-base-261-base-397-                     self.on_timezone_timer_timeout)
-base-526-base-262-base-398-        self._timezone_timer.start()
-base:527:base:263:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:507</b><br/><pre>        # TODO: thread safety!
-base-528-base-264-base-508-        self.servers = servers
-base-529-base-265-base-509-        if not self.isRunning():
-base-530-base-266-base-510-            self.start()
-base:531:base:267:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:513</b><br/><pre>        # TODO: thread safety!
-base-532-base-268-base-514-        # emit a list of names first
-base-533-base-269-base-515-        for server in self.servers:
-base-534-base-270-base-516-            self.emit(SIGNAL("server(const QString&)"), server.name)
-base:535:base:271:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:551</b><br/><pre>        # TODO check this
-base-536-base-272-base-552-        self._running = False
-base-537-base-273-base-553-        self.condition.wakeAll()
-base-538-base-274-base-554-    
-base:539:base:275:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/errorhandler.py.svn-base:45</b><br/><pre>    # TODO: translation aware
-base-540-base-276-base-46-    LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
-base-541-base-277-base-47-    if getattr(sys, 'frozen', False):
-base-542-base-278-base-48-        try:
-base:543:base:279:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:154</b><br/><pre>            # FIXME: signal doesn't do anything
-base-544-base-280-            self.emit(SIGNAL("close()"))
-base-545-base-281-            event.accept()
-base-546-base-282-        event.ignore()
-base:547:base:283:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:293</b><br/><pre>        del self._kiimage_threadlet# TODO: other message box
-base-548-base-284-        del self._kiimage_progressbar
-base-549-base-285-        self.pb_kiimage_repair.setEnabled(True)
-base-550-base-286-        mb = qtutils.infoMB(self,
-base:551:base:287:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:392</b><br/><pre>        # TODO: change timer from every second to every minute
-base-552-base-288-        self._timezone_timer = QtCore.QTimer(self)
-base-553-base-289-        self._timezone_timer.setInterval(1000) # 1 sec
-base-554-base-290-        self.connect(self._timezone_timer, SIGNAL('timeout()'),
-base:555:</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:293</b><br/><pre></pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:507</b><br/><pre>        # TODO: thread safety!
-base-556-base-294-        self.servers = servers
-base-557-base-295-        if not self.isRunning():
-base-558-base-296-            self.start()
-base:559:base:297:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:513</b><br/><pre>        # TODO: thread safety!
-base-560-base-298-        # emit a list of names first
-base-561-base-299-        for server in self.servers:
-base-562-base-300-            self.emit(SIGNAL("server(const QString&)"), server.name)
-base:563:base:301:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:551</b><br/><pre>        # TODO check this
-base-564-base-302-        self._running = False
-base-565-base-303-        self.condition.wakeAll()
-base-566-base-304-    
-base:567:base:305:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:154</b><br/><pre>            # FIXME: signal doesn't do anything
-base-568-base-306-            self.emit(SIGNAL("close()"))
-base-569-base-307-            event.accept()
-base-570-base-308-        event.ignore()
-base:571:base:309:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:293</b><br/><pre>        del self._kiimage_threadlet# TODO: other message box
-base-572-base-310-        del self._kiimage_progressbar
-base-573-base-311-        self.pb_kiimage_repair.setEnabled(True)
-base-574-base-312-        mb = qtutils.infoMB(self,
-base:575:base:313:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:392</b><br/><pre>        # TODO: change timer from every second to every minute
-base-576-base-314-        self._timezone_timer = QtCore.QTimer(self)
-base-577-base-315-        self._timezone_timer.setInterval(1000) # 1 sec
-base-578-base-316-        self.connect(self._timezone_timer, SIGNAL('timeout()'),
-base:579:</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:319</b><br/><pre></pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:507</b><br/><pre>        # TODO: thread safety!
-base-580-base-320-        self.servers = servers
-base-581-base-321-        if not self.isRunning():
-base-582-base-322-            self.start()
-base:583:base:323:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:513</b><br/><pre>        # TODO: thread safety!
-base-584-base-324-        # emit a list of names first
-base-585-base-325-        for server in self.servers:
-base-586-base-326-            self.emit(SIGNAL("server(const QString&)"), server.name)
-base:587:base:327:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:551</b><br/><pre>        # TODO check this
-base-588-base-328-        self._running = False
-base-589-base-329-        self.condition.wakeAll()
-base-590-base-330-    
-base:591:base:331:</pre></li><li><b>File: utilities/../src/moul/qt/errorhandler.py:45</b><br/><pre>    # TODO: translation aware
-base-592-base-332-    LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
-base-593-base-333-    if getattr(sys, 'frozen', False):
-base-594-base-334-        try:
-base:595:base:335:</pre></li><li><b>File: utilities/../src/moul/osdependent/__init__.py:120</b><br/><pre># XXX: what about cygwin, bsd and others?
-base-596-base-336-_thismodule = sys.modules[__name__]
-base-597-base-337-if __WIN32__:
-base-598-base-338-    from moul.osdependent import win32 as osdep_win32
-base:599:base:339:</pre></li><li><b>File: utilities/../src/moul/osdependent/darwin/__init__.py:37</b><br/><pre>EXEC_NAME = "???" # XXX
-base-600-base-340-UPDATER = "Uru Live.app/Contents/Resources/Game.app/Contents/Resources/URU Live Updater.app/Contents/MacOS/URU Live Updater"
-base-601-base-341-LOCATIONS = [
-base-602-base-342-    "/Applications",
-base:603:base:343:</pre></li><li><b>File: utilities/../src/moul/osdependent/darwin/.svn/text-base/__init__.py.svn-base:37</b><br/><pre>EXEC_NAME = "???" # XXX
-base-604-base-344-base-38-UPDATER = "Uru Live.app/Contents/Resources/Game.app/Contents/Resources/URU Live Updater.app/Contents/MacOS/URU Live Updater"
-base-605-base-345-base-39-LOCATIONS = [
-base-606-base-346-base-40-    "/Applications",
-base:607:base:347:</pre></li><li><b>File: utilities/../src/moul/osdependent/darwin/__init__.py~:37</b><br/><pre>EXEC_NAME = "???" # XXX
-base-608-base-348-UPDATER = "Uru Live.app/Contents/Resources/Game.app/Contents/Resources/URU Live Updater.app/Contents/MacOS/URU Live Updater"
-base-609-base-349-LOCATIONS = [
-base-610-base-350-    "/Applications",
-base:611:base:351:</pre></li><li><b>File: utilities/../src/moul/osdependent/.svn/text-base/__init__.py.svn-base:120</b><br/><pre># XXX: what about cygwin, bsd and others?
-base-612-base-352-base-121-_thismodule = sys.modules[__name__]
-base-613-base-353-base-122-if __WIN32__:
-base-614-base-354-base-123-    from moul.osdependent import win32 as osdep_win32
-base:615:base:355:</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:14</b><br/><pre><ol><li><b>File: utilities/../.svn/text-base/test.py.svn-base:548</b><br/><pre>        # XXX bug: doctest may report several failures in one test, they are
-base-616-base-356-base-15-base-549-        #          separated by a horizontal dash line.  Only the first one of
-base-617-base-357-base-16-base-550-        #          them is now colorized properly.
-base-618-base-358-base-17-base-551-        header = lines[0]
-base:619:base:359:base:18:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:603</b><br/><pre>                # TODO: Scrape and colorize the traceback.
-base-620-base-360-base-19-base-604-                result.append(self.colorize('doctest_got', line))
-base-621-base-361-base-20-base-605-        elif remaining[0] == 'Differences (ndiff with -expected +actual):':
-base-622-base-362-base-21-base-606-            result.append(self.colorize('doctest_title', remaining.pop(0))) # E. raised:
-base:623:base:363:base:22:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:623</b><br/><pre>        # TODO: We only deal with the output from Zope 3's doctest module.
-base-624-base-364-base-23-base-624-        #       A colorizer for the Python's doctest module would be nice too.
-base-625-base-365-base-24-base-625-        if doctest:
-base-626-base-366-base-25-base-626-            # If we have a doctest, we do not care about this header.  All the
-base:627:base:367:base:26:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:690</b><br/><pre>                # TODO these should be hookable
-base-628-base-368-base-27-base-691-                from zope.tales.tales import TALESTracebackSupplement
-base-629-base-369-base-28-base-692-                from zope.pagetemplate.pagetemplate \
-base-630-base-370-base-29-base-693-                        import PageTemplateTracebackSupplement
-base:631:base:371:base:30:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/chatlog.py.svn-base:216</b><br/><pre>        # TODO: inefficient, compare list with directory content
-base-632-base-372-base-31-base-217-        if not os.path.isdir(self._archivedir):
-base-633-base-373-base-32-base-218-            LOG.warning("%s is not a directory" % self._archivedir)
-base-634-base-374-base-33-base-219-            return
-base:635:base:375:base:34:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:112</b><br/><pre>        # XXX use struct
-base-636-base-376-base-35-base-113-        if header is None:
-base-637-base-377-base-36-base-114-            fd = self._fd
-base-638-base-378-base-37-base-115-            fd.seek(0)
-base:639:base:379:base:38:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:127</b><br/><pre>        # XXX use struct
-base-640-base-380-base-39-base-128-        if size is None:
-base-641-base-381-base-40-base-129-            size = self.getFileSize()
-base-642-base-382-base-41-base-130-        leading = 4* [None]
-base:643:base:383:base:42:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:267</b><br/><pre>                    # XXX: move checks to copy method!
-base-644-base-384-base-43-base-268-                    if not os.path.isfile(fixed):
-base-645-base-385-base-44-base-269-                        self._tocheck.append((ki, fixed))
-base-646-base-386-base-45-base-270-                        continue
-base:647:base:387:base:46:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:157</b><br/><pre>    # TODO: write me
-base-648-base-388-base-47-base-158-    pass
-base-649-base-389-base-48-base-159-
-base-650-base-390-base-49-base-160-class Constrain(object):
-base:651:base:391:base:50:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-652-base-392-base-51-base-555-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-653-base-393-base-52-base-556-        # microphon missing -> OS mixer
-base-654-base-394-base-53-base-557-        }
-base:655:base:395:base:54:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-656-base-396-base-55-base-643-
-base-657-base-397-base-56-base-644-class GraphicsIni(ConfFile):
-base-658-base-398-base-57-base-645-    _filename = 'graphics.ini'
-base:659:base:399:base:58:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/directory.py.svn-base:59</b><br/><pre>        # TODO: fnmatch
-base-660-base-400-base-59-base-60-        return len([name for name in os.listdir(path)
-base-661-base-401-base-60-base-61-                    if os.path.isfile(os.path.join(path, name))])
-base-662-base-402-base-61-base-62-
-base:663:base:403:base:62:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:105</b><br/><pre>        # TODO: more
-base-664-base-404-base-63-base-106-
-base-665-base-405-base-64-base-107-    def test_publicapi_create(self):
-base-666-base-406-base-65-base-108-        inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
-base:667:base:407:base:66:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:116</b><br/><pre>        # TODO: more
-base-668-base-408-base-67-base-117-
-base-669-base-409-base-68-base-118-class AudioIniTest(GenericIniTest):
-base-670-base-410-base-69-base-119-    enc = aud_enc
-base:671:base:411:base:70:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:154</b><br/><pre>        #XXX self.failIf(p.isChanged())
-base-672-base-412-base-71-base-155-        
-base-673-base-413-base-72-base-156-        p.screenres = 0
-base-674-base-414-base-73-base-157-        eq(p._get('Graphics.Width'), 800)
-base:675:base:415:base:74:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/utils.py.svn-base:80</b><br/><pre>    for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
-base-676-base-416-base-75-base-81-        fd = open(os.path.join(path, fname), 'wb')
-base-677-base-417-base-76-base-82-        fd.write('dummy')
-base-678-base-418-base-77-base-83-        fd.close()
-base:679:base:419:base:78:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:105</b><br/><pre>        # TODO: more
-base-680-base-420-base-79-
-base-681-base-421-base-80-    def test_publicapi_create(self):
-base-682-base-422-base-81-        inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
-base:683:base:423:base:82:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:116</b><br/><pre>        # TODO: more
-base-684-base-424-base-83-
-base-685-base-425-base-84-class AudioIniTest(GenericIniTest):
-base-686-base-426-base-85-    enc = aud_enc
-base:687:base:427:base:86:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:154</b><br/><pre>        #XXX self.failIf(p.isChanged())
-base-688-base-428-base-87-        
-base-689-base-429-base-88-        p.screenres = 0
-base-690-base-430-base-89-        eq(p._get('Graphics.Width'), 800)
-base:691:base:431:base:90:</pre></li><li><b>File: utilities/../src/moul/file/tests/utils.py:80</b><br/><pre>    for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
-base-692-base-432-base-91-        fd = open(os.path.join(path, fname), 'wb')
-base-693-base-433-base-92-        fd.write('dummy')
-base-694-base-434-base-93-        fd.close()
-base:695:base:435:base:94:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:216</b><br/><pre>        # TODO: inefficient, compare list with directory content
-base-696-base-436-base-95-        if not os.path.isdir(self._archivedir):
-base-697-base-437-base-96-            LOG.warning("%s is not a directory" % self._archivedir)
-base-698-base-438-base-97-            return
-base:699:base:439:base:98:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:112</b><br/><pre>        # XXX use struct
-base-700-base-440-base-99-        if header is None:
-base-701-base-441-base-100-            fd = self._fd
-base-702-base-442-base-101-            fd.seek(0)
-base:703:base:443:base:102:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:127</b><br/><pre>        # XXX use struct
-base-704-base-444-base-103-        if size is None:
-base-705-base-445-base-104-            size = self.getFileSize()
-base-706-base-446-base-105-        leading = 4* [None]
-base:707:base:447:base:106:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:267</b><br/><pre>                    # XXX: move checks to copy method!
-base-708-base-448-base-107-                    if not os.path.isfile(fixed):
-base-709-base-449-base-108-                        self._tocheck.append((ki, fixed))
-base-710-base-450-base-109-                        continue
-base:711:base:451:base:110:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:157</b><br/><pre>    # TODO: write me
-base-712-base-452-base-111-    pass
-base-713-base-453-base-112-
-base-714-base-454-base-113-class Constrain(object):
-base:715:base:455:base:114:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-716-base-456-base-115-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-717-base-457-base-116-        # microphon missing -> OS mixer
-base-718-base-458-base-117-        }
-base:719:base:459:base:118:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-720-base-460-base-119-
-base-721-base-461-base-120-class GraphicsIni(ConfFile):
-base-722-base-462-base-121-    _filename = 'graphics.ini'
-base:723:base:463:base:122:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:112</b><br/><pre>        # XXX use struct
-base-724-base-464-base-123-        if header is None:
-base-725-base-465-base-124-            fd = self._fd
-base-726-base-466-base-125-            fd.seek(0)
-base:727:base:467:base:126:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:127</b><br/><pre>        # XXX use struct
-base-728-base-468-base-127-        if size is None:
-base-729-base-469-base-128-            size = self.getFileSize()
-base-730-base-470-base-129-        leading = 4* [None]
-base:731:base:471:base:130:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:267</b><br/><pre>                    # XXX: move checks to copy method!
-base-732-base-472-base-131-                    if not os.path.isfile(fixed):
-base-733-base-473-base-132-                        self._tocheck.append((ki, fixed))
-base-734-base-474-base-133-                    else:
-base:735:base:475:base:134:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:157</b><br/><pre>    # TODO: write me
-base-736-base-476-base-135-    pass
-base-737-base-477-base-136-
-base-738-base-478-base-137-class Constrain(object):
-base:739:base:479:base:138:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-740-base-480-base-139-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-741-base-481-base-140-        # microphon missing -> OS mixer
-base-742-base-482-base-141-        }
-base:743:base:483:base:142:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-744-base-484-base-143-
-base-745-base-485-base-144-class GraphicsIni(ConfFile):
-base-746-base-486-base-145-    _filename = 'graphics.ini'
-base:747:base:487:base:146:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py~:216</b><br/><pre>        # TODO: inefficient, compare list with directory content
-base-748-base-488-base-147-        if not os.path.isdir(self._archivedir):
-base-749-base-489-base-148-            LOG.warning("%s is not a directory" % self._archivedir)
-base-750-base-490-base-149-            return
-base:751:base:491:base:150:</pre></li><li><b>File: utilities/../src/moul/file/directory.py:59</b><br/><pre>        # TODO: fnmatch
-base-752-base-492-base-151-        return len([name for name in os.listdir(path)
-base-753-base-493-base-152-                    if os.path.isfile(os.path.join(path, name))])
-base-754-base-494-base-153-
-base:755:base:495:base:154:</pre></li><li><b>File: utilities/../src/moul/file/directory.py~:59</b><br/><pre>        # TODO: fnmatch
-base-756-base-496-base-155-        return len([name for name in os.listdir(path)
-base-757-base-497-base-156-                    if os.path.isfile(os.path.join(path, name))])
-base-758-base-498-base-157-
-base:759:base:499:base:158:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:77</b><br/><pre>    # XXX: dos format
-base-760-base-500-base-159-base-78-    return data.replace("\r\n", "\n")
-base-761-base-501-base-160-base-79-
-base-762-base-502-base-161-base-80-def encryptWDYS(instr, fout):
-base:763:base:503:base:162:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:87</b><br/><pre>    # XXX: dos format
-base-764-base-504-base-163-base-88-    instr = instr.replace("\n", "\r\n")
-base-765-base-505-base-164-base-89-    fout.seek(0)
-base-766-base-506-base-165-base-90-    fout.write(HEADER)
-base:767:base:507:base:166:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/elf.py.svn-base:71</b><br/><pre>    # XXX NotImplemented
-base-768-base-508-base-167-base-72-    raise NotImplementedError
-base-769-base-509-base-168-base-73-    
-base-770-base-510-base-169-base-74-def decipher(crypt, size, key):
-base:771:base:511:base:170:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:77</b><br/><pre>    # XXX: dos format
-base-772-base-512-base-171-    return data.replace("\r\n", "\n")
-base-773-base-513-base-172-
-base-774-base-514-base-173-def encryptWDYS(instr, fout):
-base:775:base:515:base:174:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:87</b><br/><pre>    # XXX: dos format
-base-776-base-516-base-175-    instr = instr.replace("\n", "\r\n")
-base-777-base-517-base-176-    fout.seek(0)
-base-778-base-518-base-177-    fout.write(HEADER)
-base:779:base:519:base:178:</pre></li><li><b>File: utilities/../src/moul/crypt/elf.py:71</b><br/><pre>    # XXX NotImplemented
-base-780-base-520-base-179-    raise NotImplementedError
-base-781-base-521-base-180-    
-base-782-base-522-base-181-def decipher(crypt, size, key):
-base:783:base:523:base:182:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:152</b><br/><pre>            # FIXME: signal doesn't do anything
-base-784-base-524-base-183-base-153-            self.emit(SIGNAL("close()"))
-base-785-base-525-base-184-base-154-            event.accept()
-base-786-base-526-base-185-base-155-        event.ignore()
-base:787:base:527:base:186:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:291</b><br/><pre>        del self._kiimage_threadlet# TODO: other message box
-base-788-base-528-base-187-base-292-        del self._kiimage_progressbar
-base-789-base-529-base-188-base-293-        self.pb_kiimage_repair.setEnabled(True)
-base-790-base-530-base-189-base-294-        mb = qtutils.infoMB(self,
-base:791:base:531:base:190:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:390</b><br/><pre>        # TODO: change timer from every second to every minute
-base-792-base-532-base-191-base-391-        self._timezone_timer = timer = QtCore.QTimer(self)
-base-793-base-533-base-192-base-392-        timer.setInterval(1000) # 1 sec
-base:794:base:534:base:193:base:393:        # TODO: needs optimization? run only when timer tab is active
-base-795-base-535-base-194-base-394-        self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
-base-796-base-536-base-195-base-395-        timer.start()
-base-797-base-537-base-196-base-396-
-base:798:base:538:base:197:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:487</b><br/><pre>        # TODO: thread safety!
-base-799-base-539-base-198-base-488-        self.servers = servers
-base-800-base-540-base-199-base-489-        if not self.isRunning():
-base-801-base-541-base-200-base-490-            self.start()
-base:802:base:542:base:201:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:493</b><br/><pre>        # TODO: thread safety!
-base-803-base-543-base-202-base-494-        # emit a list of names first
-base-804-base-544-base-203-base-495-        for server in self.servers:
-base-805-base-545-base-204-base-496-            self.emit(SIGNAL("server(const QString&)"), server.name)
-base:806:base:546:base:205:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:531</b><br/><pre>        # TODO check this
-base-807-base-547-base-206-base-532-        self._running = False
-base-808-base-548-base-207-base-533-        self.condition.wakeAll()
-base-809-base-549-base-208-base-534-    
-base:810:base:550:base:209:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/errorhandler.py.svn-base:45</b><br/><pre>    # TODO: translation aware
-base-811-base-551-base-210-base-46-    LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
-base-812-base-552-base-211-base-47-    if getattr(sys, 'frozen', False):
-base-813-base-553-base-212-base-48-        try:
-base:814:base:554:base:213:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:151</b><br/><pre>            # FIXME: signal doesn't do anything
-base-815-base-555-base-214-            self.emit(SIGNAL("close()"))
-base-816-base-556-base-215-            event.accept()
-base-817-base-557-base-216-        event.ignore()
-base:818:base:558:base:217:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:290</b><br/><pre>        del self._kiimage_threadlet# TODO: other message box
-base-819-base-559-base-218-        del self._kiimage_progressbar
-base-820-base-560-base-219-        self.pb_kiimage_repair.setEnabled(True)
-base-821-base-561-base-220-        mb = qtutils.infoMB(self,
-base:822:base:562:base:221:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:389</b><br/><pre>        # TODO: change timer from every second to every minute
-base-823-base-563-base-222-        self._timezone_timer = timer = QtCore.QTimer(self)
-base-824-base-564-base-223-        timer.setInterval(1000) # 1 sec
-base-825-base-565-base-224-        self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
-base:826:base:566:</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:227</b><br/><pre></pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:486</b><br/><pre>        # TODO: thread saf...
 
[truncated message content] | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-20 17:28:39
      
     
   | 
Revision: 269
          http://pymoul.svn.sourceforge.net/pymoul/?rev=269&view=rev
Author:   tiran
Date:     2007-03-20 10:19:45 -0700 (Tue, 20 Mar 2007)
Log Message:
-----------
Changed mkdir/makedirs in moul.file and added more logging. The factories mustn't create the directories when its parent directories are missing.
Modified Paths:
--------------
    pymoul/trunk/src/moul/file/chatlog.py
    pymoul/trunk/src/moul/file/directory.py
    pymoul/trunk/src/moul/file/kiimage.py
Modified: pymoul/trunk/src/moul/file/chatlog.py
===================================================================
--- pymoul/trunk/src/moul/file/chatlog.py	2007-03-19 21:08:20 UTC (rev 268)
+++ pymoul/trunk/src/moul/file/chatlog.py	2007-03-20 17:19:45 UTC (rev 269)
@@ -91,7 +91,7 @@
 
     def clear(self):
         """Clear results and check the existence of directories
-        
+
         @return: state of directories, True if everything is ok
         @rtype: bool
         """
@@ -99,10 +99,11 @@
         if not os.path.isdir(self._srcdir):
             LOG.warning("%s is not a directory" % self._srcdir)
             return False
-        if not os.path.isdir(self._destdir):
-            LOG.info("Creating chatlog directory %s" % self._destdir)
-            os.mkdir(self._destdir)
-            return False
+        else:
+            if not os.path.isdir(self._destdir):
+                LOG.info("Creating chatlog directory %s" % self._destdir)
+                os.mkdir(self._destdir)
+                return False # XXX ???
         return True
 
     def findLogs(self):
Modified: pymoul/trunk/src/moul/file/directory.py
===================================================================
--- pymoul/trunk/src/moul/file/directory.py	2007-03-19 21:08:20 UTC (rev 268)
+++ pymoul/trunk/src/moul/file/directory.py	2007-03-20 17:19:45 UTC (rev 269)
@@ -62,7 +62,7 @@
 
 class AbstractUruDirectory(object):
     """Abstract class for an Uru directory
-    
+
     @cvar _dirmapping: A mapping of name S{->} subpath
     @type _dirmapping: dict
     @cvar _factories: A list of factories name S{->} (callable, name tuples) C{_dirmapping}
@@ -80,6 +80,12 @@
         @type basepath: str
         """
         self._basepath = basepath
+        if not self.exists():
+            LOG.warning("Basepath %s does not exist for %s!" %
+                        (self._basepath, self.__class__.__name__))
+        else:
+            LOG.debug("Using basepath %s for %s" %
+                      (self._basepath, self.__class__.__name__))
         for key in self._factories:
             if key in self.__class__.__dict__:
                 raise AttributeError("Name %s is reserved and can't be used "
@@ -103,10 +109,9 @@
         @rtype: str
         """
         if name and name != '.':
-            path = self._dirmapping[name]
+            return os.path.join(self._basepath, self._dirmapping[name])
         else:
-            path = ''
-        return os.path.join(self._basepath, path)
+            return self._basepath
 
     def factory(self, name):
         """Factory - creates instances to handle subdirectories and files 
@@ -135,7 +140,7 @@
 
 class UruGameDataDirectory(AbstractUruDirectory):
     """Uru game directory handler
-    
+
     An uru game directory contains the launcher, explorer, age files, sound
     files, localizations and other stuff.
     """
@@ -152,7 +157,7 @@
 
 class UruPersonalDataDirectory(AbstractUruDirectory):
     """Uru personal data handler
-    
+
     An uru personal data directory contains per user data like audio and
     graphics settings, KI shots, avatar images, logs and pyMoul specific
     data.
@@ -193,7 +198,8 @@
         if not name or name == '.':
             raise ValueError("Cannot create() basedir")
         path = self.get(name)
-        os.makedirs(path)
+        os.mkdir(path)
+        #os.makedirs(path) # XXX
         return path
 
     def createTree(self):
@@ -203,7 +209,8 @@
         @rtype: list of str
         """
         created = []
-        if not self.exists(''):
+        if not self.exists():
+            raise OSError("Basepath doesn't exist") # XXX
             os.mkdir(self._basepath)
             created.append(self._basepath)
         for key in self._dirmapping:
Modified: pymoul/trunk/src/moul/file/kiimage.py
===================================================================
--- pymoul/trunk/src/moul/file/kiimage.py	2007-03-19 21:08:20 UTC (rev 268)
+++ pymoul/trunk/src/moul/file/kiimage.py	2007-03-20 17:19:45 UTC (rev 269)
@@ -226,14 +226,15 @@
 
         if not os.path.isdir(srcdir):
             LOG.warning("%s is not a directory" % srcdir)
-        if not os.path.isdir(destdir):
-            LOG.info("Creating fixed images directory %s" % destdir)
-            os.mkdir(destdir)
+        else:
+            if not os.path.isdir(destdir):
+                LOG.info("Creating fixed images directory %s" % destdir)
+                os.mkdir(destdir)
 
     @staticmethod
     def mkFixedName(path, name, dest):
         """Make new new based on the name of the KI image
-        
+
         @param path: directory where the file lives
         @type path: str
         @param name: name of the image w/o path
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-19 21:58:26
      
     
   | 
Revision: 267
          http://pymoul.svn.sourceforge.net/pymoul/?rev=267&view=rev
Author:   tiran
Date:     2007-03-19 13:56:14 -0700 (Mon, 19 Mar 2007)
Log Message:
-----------
Fixed typo in getPyMoulDataDir
Modified Paths:
--------------
    pymoul/trunk/src/moul/osdependent/darwin/__init__.py
    pymoul/trunk/src/moul/osdependent/linux/__init__.py
Modified: pymoul/trunk/src/moul/osdependent/darwin/__init__.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/darwin/__init__.py	2007-03-19 13:35:53 UTC (rev 266)
+++ pymoul/trunk/src/moul/osdependent/darwin/__init__.py	2007-03-19 20:56:14 UTC (rev 267)
@@ -28,7 +28,7 @@
 
 
 LOG = getLogger('moul.darwin')
-LOG.critical('Darwin/Mac support is not tested')
+LOG.warning('Mac/Darwin support is experimental')
 
 HOME = os.path.expanduser('~')
 MOUL_DIR = "%s/Library/Preferences/UruLive/Preferences/p_drive/My Documents/Uru Live" % HOME
@@ -53,7 +53,7 @@
 def getPyMoulDataDir():
     """Get path to the pyMoul ini directory
     """
-    return HOME, PYMOUL_DIR
+    return PYMOUL_DIR
 
 def getMoulInstallDir():
     """Get path to MOUL install dir
Modified: pymoul/trunk/src/moul/osdependent/linux/__init__.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/linux/__init__.py	2007-03-19 13:35:53 UTC (rev 266)
+++ pymoul/trunk/src/moul/osdependent/linux/__init__.py	2007-03-19 20:56:14 UTC (rev 267)
@@ -28,7 +28,7 @@
 
 
 LOG = getLogger('moul.linux')
-LOG.critical('Linux support is not tested')
+LOG.warning('Linux support is experimental')
 
 HOME = os.path.expanduser('~')
 MOUL_DIR = "%s/.urulive" % HOME
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-19 21:58:19
      
     
   | 
Revision: 268
          http://pymoul.svn.sourceforge.net/pymoul/?rev=268&view=rev
Author:   tiran
Date:     2007-03-19 14:08:20 -0700 (Mon, 19 Mar 2007)
Log Message:
-----------
Reverted font changes
Modified Paths:
--------------
    pymoul/trunk/src/moul/qt/dninumbers.py
    pymoul/trunk/src/moul/qt/mainwindow.py
Modified: pymoul/trunk/src/moul/qt/dninumbers.py
===================================================================
--- pymoul/trunk/src/moul/qt/dninumbers.py	2007-03-19 20:56:14 UTC (rev 267)
+++ pymoul/trunk/src/moul/qt/dninumbers.py	2007-03-19 21:08:20 UTC (rev 268)
@@ -149,9 +149,9 @@
         tw.setRowCount(rows)
 
         proto = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setPointSize(9)
-        proto.setFont(font)
+        #font = QtGui.QFont()
+        #font.setPointSize(9)
+        #proto.setFont(font)
         proto.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
 
         for n, midnight, dawn, dusk in iter(eg):
@@ -188,9 +188,9 @@
         tw.setColumnCount(cols)
 
         proto = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setPointSize(9)
-        proto.setFont(font)
+        #font = QtGui.QFont()
+        #font.setPointSize(9)
+        #proto.setFont(font)
         proto.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
 
         #for n in range(rows):
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py	2007-03-19 20:56:14 UTC (rev 267)
+++ pymoul/trunk/src/moul/qt/mainwindow.py	2007-03-19 21:08:20 UTC (rev 268)
@@ -422,9 +422,9 @@
             tw.setRowCount(i + 1)
 
         proto = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setPointSize(9)
-        proto.setFont(font)
+        #font = QtGui.QFont()
+        #font.setPointSize(9)
+        #proto.setFont(font)
         proto.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
 
         #tw.setVerticalHeaderItem(i, QtGui.QTableWidgetItem())
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-19 16:39:56
      
     
   | 
Revision: 266
          http://pymoul.svn.sourceforge.net/pymoul/?rev=266&view=rev
Author:   tiran
Date:     2007-03-19 06:35:53 -0700 (Mon, 19 Mar 2007)
Log Message:
-----------
Corrected some paths (Linux and Mac)
Adjusted font sizes of table items
Modified Paths:
--------------
    pymoul/trunk/src/moul/osdependent/darwin/__init__.py
    pymoul/trunk/src/moul/osdependent/linux/__init__.py
    pymoul/trunk/src/moul/qt/dninumbers.py
    pymoul/trunk/src/moul/qt/mainwindow.py
    pymoul/trunk/src/moul/qt/ui/mainwindow.py
    pymoul/trunk/src/moul/qt/ui/mainwindow.ui
Modified: pymoul/trunk/src/moul/osdependent/darwin/__init__.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/darwin/__init__.py	2007-03-19 09:19:33 UTC (rev 265)
+++ pymoul/trunk/src/moul/osdependent/darwin/__init__.py	2007-03-19 13:35:53 UTC (rev 266)
@@ -31,7 +31,7 @@
 LOG.critical('Darwin/Mac support is not tested')
 
 HOME = os.path.expanduser('~')
-MOUL_DIR = "Library/Preferences/UruLive Preferences/p_drive/My Documents/Uru Live"
+MOUL_DIR = "%s/Library/Preferences/UruLive/Preferences/p_drive/My Documents/Uru Live" % HOME
 APP_PATH = "Uru Live.app/Contents/Resources/Game.app/Contents/Resources/transgaming/c_drive/Program Files/Uru Live/"
 APP_NAME = "Uru Live.app"
 EXEC_NAME = "???" # XXX
@@ -40,7 +40,7 @@
     "/Applications",
     "%s/Applications" % HOME,
     ]
-PYMOUL_DIR = "Library/Preferences/pyMoul"
+PYMOUL_DIR = "%s/Library/Preferences/pyMoul" % HOME
 
 def getMoulUserDataDir():
     """Get path of MOUL data directory
@@ -48,12 +48,12 @@
     The MOUL data directory contains log files, chatlogs, KI images and many
     more things.
     """
-    return os.path.join(HOME, MOUL_DIR)
+    return MOUL_DIR
 
 def getPyMoulDataDir():
     """Get path to the pyMoul ini directory
     """
-    return os.path.join(HOME, PYMOUL_DIR)
+    return HOME, PYMOUL_DIR
 
 def getMoulInstallDir():
     """Get path to MOUL install dir
Modified: pymoul/trunk/src/moul/osdependent/linux/__init__.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/linux/__init__.py	2007-03-19 09:19:33 UTC (rev 265)
+++ pymoul/trunk/src/moul/osdependent/linux/__init__.py	2007-03-19 13:35:53 UTC (rev 266)
@@ -31,7 +31,7 @@
 LOG.critical('Linux support is not tested')
 
 HOME = os.path.expanduser('~')
-MOUL_DIR = ".urulive"
+MOUL_DIR = "%s/.urulive" % HOME
 INI_FILE = ('pyMoul', 'pymoul.ini')
 EXEC_NAME = "UruLauncher"
 PROCESSES = ('urulauncher', 'uruexplorer')
@@ -40,7 +40,7 @@
     "/media/d/games/MystOnline",
     "/usr/local/games/MystOnline"
     ]
-PYMOUL_DIR = '.pymoul'
+PYMOUL_DIR = '%s/.pymoul' % HOME
 
 def getMoulUserDataDir():
     """Get path of MOUL data directory
@@ -48,12 +48,12 @@
     The MOUL data directory contains log files, chatlogs, KI images and many
     more things.
     """
-    return os.path.join(HOME, MOUL_DIR)
+    return MOUL_DIR
 
 def getPyMoulDataDir():
     """Get path to the pyMoul ini directory
     """
-    return os.path.join(HOME, PYMOUL_DIR)
+    return PYMOUL_DIR
 
 def getMoulInstallDir():
     """Get path to MOUL install dir
Modified: pymoul/trunk/src/moul/qt/dninumbers.py
===================================================================
--- pymoul/trunk/src/moul/qt/dninumbers.py	2007-03-19 09:19:33 UTC (rev 265)
+++ pymoul/trunk/src/moul/qt/dninumbers.py	2007-03-19 13:35:53 UTC (rev 266)
@@ -131,7 +131,7 @@
         self.minute_timer.emit(SIGNAL('timeout()'))
 
     def _fmtdate(self, dt, spec=Qt.LocalTime):
-        fmt = self.trUtf8("MMM dd, hh:mm:ss")
+        fmt = self.trUtf8("MM/dd hh:mm")
         qdt = QtCore.QDateTime(dt).toTimeSpec(spec)
         return qdt.toString(fmt)
 
@@ -149,17 +149,17 @@
         tw.setRowCount(rows)
 
         proto = QtGui.QTableWidgetItem()
-        #font = QtGui.QFont()
-        #font.setPointSize(7)
-        #proto.setFont(font)
+        font = QtGui.QFont()
+        font.setPointSize(9)
+        proto.setFont(font)
         proto.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
-        header = QtGui.QTableWidgetItem()
-        header.setSizeHint(QtCore.QSize(0,0))
 
         for n, midnight, dawn, dusk in iter(eg):
             if n > rows:
                 break
-            tw.setVerticalHeaderItem(n, QtGui.QTableWidgetItem(header))
+            #header = QtGui.QTableWidgetItem()
+            #header.setSizeHint(QtCore.QSize(0,0))
+            #tw.setVerticalHeaderItem(n, header)
             for i, dt in enumerate((midnight, dawn, dusk)):
                 item = QtGui.QTableWidgetItem(proto)
                 item.setText(self._fmtdate(dt))
@@ -188,15 +188,14 @@
         tw.setColumnCount(cols)
 
         proto = QtGui.QTableWidgetItem()
-        #font = QtGui.QFont()
-        #font.setPointSize(7)
-        #proto.setFont(font)
+        font = QtGui.QFont()
+        font.setPointSize(9)
+        proto.setFont(font)
         proto.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
 
-        for n in range(rows):
-            h = QtGui.QTableWidgetItem()
-            h.setSizeHint(QtCore.QSize(0,0))
-            tw.setVerticalHeaderItem(n, h)
+        #for n in range(rows):
+        #    tw.setVerticalHeaderItem(n, QtGui.QTableWidgetItem())
+        #    tw.verticalHeaderItem(n).setSizeHint(QtCore.QSize(0, 0))
 
         for i, name in enumerate(listPodAges()):
             pat = PodAgeTime(name)
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py	2007-03-19 09:19:33 UTC (rev 265)
+++ pymoul/trunk/src/moul/qt/mainwindow.py	2007-03-19 13:35:53 UTC (rev 266)
@@ -184,13 +184,13 @@
     def handleDirtyOnClose(self):
         """
         Handle dirty status on close
-        
+
         @return: Accept event?
         @rtype: bool
         """
         if not self.isDirty():
             return True
-        
+
         mb = qtutils.saveMB(
              self,
              self.trUtf8("Unsaved changes!"),
@@ -411,33 +411,32 @@
     def on_pingthread_started(self):
         self.button_ping.setEnabled(False)
         self.tw_ping.clearContents()
-    
+
     def on_pingthread_done(self):
         self.button_ping.setEnabled(True)
 
     def on_pingthread_server(self, i, name):
-        row = self.tw_ping.rowCount()
+        tw = self.tw_ping
+        row = tw.rowCount()
         if row < (i+1):
-            self.tw_ping.setRowCount(i + 1)
+            tw.setRowCount(i + 1)
 
         proto = QtGui.QTableWidgetItem()
         font = QtGui.QFont()
-        font.setPointSize(7)
+        font.setPointSize(9)
         proto.setFont(font)
         proto.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
 
-        header = QtGui.QTableWidgetItem(proto)
-        header.setText(QtCore.QString.number(row + 1))
+        #tw.setVerticalHeaderItem(i, QtGui.QTableWidgetItem())
+        #tw.verticalHeaderItem(i).setSizeHint(QtCore.QSize(0, 0))
 
         item0 = QtGui.QTableWidgetItem(proto)
         item0.setText(name)
+        tw.setItem(i, 0, item0)
+        tw.setItem(i, 1, QtGui.QTableWidgetItem(proto))
+        tw.setItem(i, 2, QtGui.QTableWidgetItem(proto))
+        tw.resizeRowsToContents()
 
-        self.tw_ping.setVerticalHeaderItem(i, header)
-        self.tw_ping.setItem(i, 0, item0)
-        self.tw_ping.setItem(i, 1, QtGui.QTableWidgetItem(proto))
-        self.tw_ping.setItem(i, 2, QtGui.QTableWidgetItem(proto))
-        self.tw_ping.resizeRowsToContents()
-
     def on_pingthread_dns(self, i, time):
         item = self.tw_ping.item(i, 1)
         item.setText("%0.3f" % time)
@@ -479,13 +478,13 @@
         self.servers = servers
         if not self.isRunning():
             self.start()
-        
+
     def run(self):
         # TODO: thread safety!
         # emit a list of names first
         for i, server in enumerate(self.servers):
             self.emit(SIGNAL("server(int, const QString&)"), i, server.name)
-        
+
         for i, server in enumerate(self.servers):
             name = server.name
             dns = server.dns()
@@ -495,7 +494,7 @@
                           i, errno, msg)
                 continue
             self.emit(SIGNAL("dns(int, float)"), i, dns)
-            
+
             ping = server.portping()
             if isSocketError(ping):
                 errno, msg = fmtSocketError(ping)
@@ -522,7 +521,7 @@
         # TODO check this
         self._running = False
         self.condition.wakeAll()
-    
+
     def __del__(self):
         self.stopChecker()
 
Modified: pymoul/trunk/src/moul/qt/ui/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/ui/mainwindow.py	2007-03-19 09:19:33 UTC (rev 265)
+++ pymoul/trunk/src/moul/qt/ui/mainwindow.py	2007-03-19 13:35:53 UTC (rev 266)
@@ -1,8 +1,8 @@
 # -*- coding: utf-8 -*-
 
-# Form implementation generated from reading ui file 'src/moul/qt/ui/mainwindow.ui'
+# Form implementation generated from reading ui file './src/moul/qt/ui/mainwindow.ui'
 #
-# Created: Mon Mar 19 10:09:02 2007
+# Created: Mon Mar 19 14:34:52 2007
 #      by: PyQt4 UI code generator 4.1.1
 #
 # WARNING! All changes made in this file will be lost!
@@ -1010,8 +1010,13 @@
         spacerItem10 = QtGui.QSpacerItem(40,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
         self.gridlayout3.addItem(spacerItem10,0,5,1,1)
 
+        self.lb_localtime = QtGui.QLabel(self.groupBox_4)
+        self.lb_localtime.setGeometry(QtCore.QRect(360,250,81,20))
+        self.lb_localtime.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
+        self.lb_localtime.setObjectName("lb_localtime")
+
         self.tw_eg = QtGui.QTableWidget(self.groupBox_4)
-        self.tw_eg.setGeometry(QtCore.QRect(10,90,431,131))
+        self.tw_eg.setGeometry(QtCore.QRect(10,90,431,151))
 
         font = QtGui.QFont(self.tw_eg.font())
         font.setPointSize(8)
@@ -1020,11 +1025,6 @@
         self.tw_eg.setDragDropOverwriteMode(False)
         self.tw_eg.setAlternatingRowColors(True)
         self.tw_eg.setObjectName("tw_eg")
-
-        self.lb_localtime = QtGui.QLabel(self.groupBox_4)
-        self.lb_localtime.setGeometry(QtCore.QRect(360,230,81,20))
-        self.lb_localtime.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
-        self.lb_localtime.setObjectName("lb_localtime")
         self.tab_sub_time.addTab(self.tab_time_eder,"")
 
         self.tab_time_podages = QtGui.QWidget()
@@ -1035,8 +1035,13 @@
         self.groupBox_6.setGeometry(QtCore.QRect(10,0,451,371))
         self.groupBox_6.setObjectName("groupBox_6")
 
+        self.lb_localtime_2 = QtGui.QLabel(self.groupBox_6)
+        self.lb_localtime_2.setGeometry(QtCore.QRect(360,190,81,20))
+        self.lb_localtime_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
+        self.lb_localtime_2.setObjectName("lb_localtime_2")
+
         self.tw_pods = QtGui.QTableWidget(self.groupBox_6)
-        self.tw_pods.setGeometry(QtCore.QRect(10,30,431,131))
+        self.tw_pods.setGeometry(QtCore.QRect(10,30,431,151))
 
         font = QtGui.QFont(self.tw_pods.font())
         font.setPointSize(8)
@@ -1045,11 +1050,6 @@
         self.tw_pods.setDragDropOverwriteMode(False)
         self.tw_pods.setAlternatingRowColors(True)
         self.tw_pods.setObjectName("tw_pods")
-
-        self.lb_localtime_2 = QtGui.QLabel(self.groupBox_6)
-        self.lb_localtime_2.setGeometry(QtCore.QRect(360,170,81,20))
-        self.lb_localtime_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
-        self.lb_localtime_2.setObjectName("lb_localtime_2")
         self.tab_sub_time.addTab(self.tab_time_podages,"")
         self.tabwidget.addTab(self.tab_time,"")
 
@@ -1316,6 +1316,7 @@
         self.label_13.setText(QtGui.QApplication.translate("MainWindow", "Light level", None, QtGui.QApplication.UnicodeUTF8))
         self.label_14.setText(QtGui.QApplication.translate("MainWindow", "Length", None, QtGui.QApplication.UnicodeUTF8))
         self.label_4.setText(QtGui.QApplication.translate("MainWindow", "Time", None, QtGui.QApplication.UnicodeUTF8))
+        self.lb_localtime.setText(QtGui.QApplication.translate("MainWindow", "local time", None, QtGui.QApplication.UnicodeUTF8))
         self.tw_eg.clear()
         self.tw_eg.setColumnCount(3)
         self.tw_eg.setRowCount(0)
@@ -1331,13 +1332,12 @@
         headerItem5 = QtGui.QTableWidgetItem()
         headerItem5.setText(QtGui.QApplication.translate("MainWindow", "Dusk", None, QtGui.QApplication.UnicodeUTF8))
         self.tw_eg.setHorizontalHeaderItem(2,headerItem5)
-        self.lb_localtime.setText(QtGui.QApplication.translate("MainWindow", "local time", None, QtGui.QApplication.UnicodeUTF8))
         self.tab_sub_time.setTabText(self.tab_sub_time.indexOf(self.tab_time_eder), QtGui.QApplication.translate("MainWindow", "Eder Gira", None, QtGui.QApplication.UnicodeUTF8))
         self.groupBox_6.setTitle(QtGui.QApplication.translate("MainWindow", "Gate appearence", None, QtGui.QApplication.UnicodeUTF8))
+        self.lb_localtime_2.setText(QtGui.QApplication.translate("MainWindow", "local time", None, QtGui.QApplication.UnicodeUTF8))
         self.tw_pods.clear()
         self.tw_pods.setColumnCount(0)
         self.tw_pods.setRowCount(0)
-        self.lb_localtime_2.setText(QtGui.QApplication.translate("MainWindow", "local time", None, QtGui.QApplication.UnicodeUTF8))
         self.tab_sub_time.setTabText(self.tab_sub_time.indexOf(self.tab_time_podages), QtGui.QApplication.translate("MainWindow", "Pod Ages", None, QtGui.QApplication.UnicodeUTF8))
         self.tabwidget.setTabText(self.tabwidget.indexOf(self.tab_time), QtGui.QApplication.translate("MainWindow", "Time", None, QtGui.QApplication.UnicodeUTF8))
         self.groupBox_5.setTitle(QtGui.QApplication.translate("MainWindow", "Read chatlogs", None, QtGui.QApplication.UnicodeUTF8))
Modified: pymoul/trunk/src/moul/qt/ui/mainwindow.ui
===================================================================
--- pymoul/trunk/src/moul/qt/ui/mainwindow.ui	2007-03-19 09:19:33 UTC (rev 265)
+++ pymoul/trunk/src/moul/qt/ui/mainwindow.ui	2007-03-19 13:35:53 UTC (rev 266)
@@ -2180,13 +2180,29 @@
           </item>
          </layout>
         </widget>
+        <widget class="QLabel" name="lb_localtime" >
+         <property name="geometry" >
+          <rect>
+           <x>360</x>
+           <y>250</y>
+           <width>81</width>
+           <height>20</height>
+          </rect>
+         </property>
+         <property name="text" >
+          <string>local time</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+        </widget>
         <widget class="QTableWidget" name="tw_eg" >
          <property name="geometry" >
           <rect>
            <x>10</x>
            <y>90</y>
            <width>431</width>
-           <height>131</height>
+           <height>151</height>
           </rect>
          </property>
          <property name="font" >
@@ -2219,22 +2235,6 @@
           </property>
          </column>
         </widget>
-        <widget class="QLabel" name="lb_localtime" >
-         <property name="geometry" >
-          <rect>
-           <x>360</x>
-           <y>230</y>
-           <width>81</width>
-           <height>20</height>
-          </rect>
-         </property>
-         <property name="text" >
-          <string>local time</string>
-         </property>
-         <property name="alignment" >
-          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-         </property>
-        </widget>
        </widget>
       </widget>
       <widget class="QWidget" name="tab_time_podages" >
@@ -2256,13 +2256,29 @@
         <property name="title" >
          <string>Gate appearence</string>
         </property>
+        <widget class="QLabel" name="lb_localtime_2" >
+         <property name="geometry" >
+          <rect>
+           <x>360</x>
+           <y>190</y>
+           <width>81</width>
+           <height>20</height>
+          </rect>
+         </property>
+         <property name="text" >
+          <string>local time</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+        </widget>
         <widget class="QTableWidget" name="tw_pods" >
          <property name="geometry" >
           <rect>
            <x>10</x>
            <y>30</y>
            <width>431</width>
-           <height>131</height>
+           <height>151</height>
           </rect>
          </property>
          <property name="font" >
@@ -2280,22 +2296,6 @@
           <bool>true</bool>
          </property>
         </widget>
-        <widget class="QLabel" name="lb_localtime_2" >
-         <property name="geometry" >
-          <rect>
-           <x>360</x>
-           <y>170</y>
-           <width>81</width>
-           <height>20</height>
-          </rect>
-         </property>
-         <property name="text" >
-          <string>local time</string>
-         </property>
-         <property name="alignment" >
-          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-         </property>
-        </widget>
        </widget>
       </widget>
      </widget>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-19 09:35:03
      
     
   | 
Revision: 264
          http://pymoul.svn.sourceforge.net/pymoul/?rev=264&view=rev
Author:   tiran
Date:     2007-03-19 02:10:53 -0700 (Mon, 19 Mar 2007)
Log Message:
-----------
Integration of Eder Gira and Pod age times in the UI
Modified Paths:
--------------
    pymoul/trunk/src/moul/qt/dninumbers.py
    pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts
    pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts
    pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts
    pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts
    pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts
    pymoul/trunk/src/moul/qt/ui/mainwindow.py
    pymoul/trunk/src/moul/qt/ui/mainwindow.ui
    pymoul/trunk/src/moul/time/edergira.py
    pymoul/trunk/src/moul/time/podage.py
Modified: pymoul/trunk/src/moul/qt/dninumbers.py
===================================================================
--- pymoul/trunk/src/moul/qt/dninumbers.py	2007-03-18 22:50:45 UTC (rev 263)
+++ pymoul/trunk/src/moul/qt/dninumbers.py	2007-03-19 09:10:53 UTC (rev 264)
@@ -17,6 +17,9 @@
 #
 
 """Moul QT D'ni Number renderer
+
+This module started as a renderer for D'ni numbers and turned into a
+time display module 8-)
 """
 __author__ = "Christian Heimes"
 __version__ = "$Id$"
@@ -39,6 +42,9 @@
 from moul.time.dni import FACTOR_SP
 from moul.time.dni import VAILEETEE
 from moul.time.dni import decimal2dni
+from moul.time.edergira import EderGiraDayCalculator
+from moul.time.podage import PodAgeTime
+from moul.time.podage import listPodAges
 from moul.time.utils import utcnow
 
 from moul.qt.utils import QNamespaceContainer
@@ -108,6 +114,104 @@
         # setup defaults
         self.rb_earthtime.click()
 
+        # pod age timers
+        self.minute_timer = QtCore.QTimer(self.context)
+        self.minute_timer.setInterval(60000) # 1 minute
+        self.connect(self.minute_timer, SIGNAL('timeout()'),
+                     self.on_podage_timeout)
+        header = self.tw_pods.horizontalHeader()
+        header.setResizeMode(QtGui.QHeaderView.Stretch)
+
+        # Eder Gira day cycle timer
+        header = self.tw_eg.horizontalHeader()
+        header.setResizeMode(QtGui.QHeaderView.Stretch)
+        self.connect(self.minute_timer, SIGNAL('timeout()'),
+                     self.on_edergira_timeout)
+        self.minute_timer.start()
+        self.minute_timer.emit(SIGNAL('timeout()'))
+
+    def _fmtdate(self, dt, spec=Qt.LocalTime):
+        fmt = self.trUtf8("MMM dd, hh:mm:ss")
+        qdt = QtCore.QDateTime(dt).toTimeSpec(spec)
+        return qdt.toString(fmt)
+
+    @skipLogging
+    @pyqtSignature("")
+    def on_edergira_timeout(self):
+        """
+        SIGNAL: QTimer timeout
+        """
+        rows = 5
+        eg = EderGiraDayCalculator()
+
+        tw = self.tw_eg
+        tw.clearContents()
+        tw.setRowCount(rows)
+
+        proto = QtGui.QTableWidgetItem()
+        #font = QtGui.QFont()
+        #font.setPointSize(7)
+        #proto.setFont(font)
+        proto.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
+        header = QtGui.QTableWidgetItem()
+        header.setSizeHint(QtCore.QSize(0,0))
+
+        for n, midnight, dawn, dusk in iter(eg):
+            if n > rows:
+                break
+            tw.setVerticalHeaderItem(n, QtGui.QTableWidgetItem(header))
+            for i, dt in enumerate((midnight, dawn, dusk)):
+                item = QtGui.QTableWidgetItem(proto)
+                item.setText(self._fmtdate(dt))
+                tw.setItem(n, i, item)
+
+        tw.resizeRowsToContents()
+
+        day = eg.getDayInfo()
+        self.le_eg_time.setText(str(day.hour))
+        self.le_eg_status.setText(str(day.state))
+        self.le_eg_light.setText("%i%%" % (day.light * 100))
+        self.le_eg_length.setText(self.trUtf8("10 hours"))
+
+    @skipLogging
+    @pyqtSignature("")
+    def on_podage_timeout(self):
+        """
+        SIGNAL: QTimer timeout
+        """
+        rows = 5
+        cols = len(listPodAges())
+
+        tw = self.tw_pods
+        tw.clearContents()
+        tw.setRowCount(rows)
+        tw.setColumnCount(cols)
+
+        proto = QtGui.QTableWidgetItem()
+        #font = QtGui.QFont()
+        #font.setPointSize(7)
+        #proto.setFont(font)
+        proto.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
+
+        for n in range(rows):
+            h = QtGui.QTableWidgetItem()
+            h.setSizeHint(QtCore.QSize(0,0))
+            tw.setVerticalHeaderItem(n, h)
+
+        for i, name in enumerate(listPodAges()):
+            pat = PodAgeTime(name)
+            hheader = QtGui.QTableWidgetItem()
+            hheader.setText(name)
+            tw.setHorizontalHeaderItem(i, hheader)
+            for n, dt in iter(pat):
+                if n > rows:
+                    break
+                item = QtGui.QTableWidgetItem(proto)
+                item.setText(self._fmtdate(dt))
+                tw.setItem(n, i, item)
+
+        tw.resizeRowsToContents()
+
     @pyqtSignature("bool")
     def on_timer_timerEnable(self, value=True):
         value = bool(value)
@@ -194,7 +298,7 @@
             self.update_earthtime()
 
     @pyqtSignature("int")
-    def on_cb_earthtime_tz_currentIndeChanged(self, idx):
+    def on_cb_earthtime_tz_currentIndexChanged(self, idx):
         if idx == 0:
             spec = Qt.LoalTime
         elif idx == 1:
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts	2007-03-18 22:50:45 UTC (rev 263)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts	2007-03-19 09:10:53 UTC (rev 264)
@@ -5,6 +5,14 @@
         <source>cyclic 0</source>
         <translation>zyklische 0</translation>
     </message>
+    <message>
+        <source>MMM dd, hh:mm:ss</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>10 hours</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>IniFileContainer</name>
@@ -520,17 +528,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Negilahn</source>
+        <source>Pod Ages</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Negilahn Gate appearence</source>
+        <source>Gate appearence</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <source>Gate</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>SimpleProgressbar</name>
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts	2007-03-18 22:50:45 UTC (rev 263)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts	2007-03-19 09:10:53 UTC (rev 264)
@@ -5,6 +5,14 @@
         <source>cyclic 0</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>MMM dd, hh:mm:ss</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>10 hours</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>IniFileContainer</name>
@@ -506,17 +514,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Negilahn</source>
+        <source>Pod Ages</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Negilahn Gate appearence</source>
+        <source>Gate appearence</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <source>Gate</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>SimpleProgressbar</name>
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts	2007-03-18 22:50:45 UTC (rev 263)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts	2007-03-19 09:10:53 UTC (rev 264)
@@ -5,6 +5,14 @@
         <source>cyclic 0</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>MMM dd, hh:mm:ss</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>10 hours</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>IniFileContainer</name>
@@ -506,17 +514,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Negilahn</source>
+        <source>Pod Ages</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Negilahn Gate appearence</source>
+        <source>Gate appearence</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <source>Gate</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>SimpleProgressbar</name>
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts	2007-03-18 22:50:45 UTC (rev 263)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts	2007-03-19 09:10:53 UTC (rev 264)
@@ -5,6 +5,14 @@
         <source>cyclic 0</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>MMM dd, hh:mm:ss</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>10 hours</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>IniFileContainer</name>
@@ -506,17 +514,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Negilahn</source>
+        <source>Pod Ages</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Negilahn Gate appearence</source>
+        <source>Gate appearence</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <source>Gate</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>SimpleProgressbar</name>
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts	2007-03-18 22:50:45 UTC (rev 263)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts	2007-03-19 09:10:53 UTC (rev 264)
@@ -5,6 +5,14 @@
         <source>cyclic 0</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>MMM dd, hh:mm:ss</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>10 hours</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>IniFileContainer</name>
@@ -506,17 +514,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Negilahn</source>
+        <source>Pod Ages</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Negilahn Gate appearence</source>
+        <source>Gate appearence</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <source>Gate</source>
-        <translation type="unfinished"></translation>
-    </message>
 </context>
 <context>
     <name>SimpleProgressbar</name>
Modified: pymoul/trunk/src/moul/qt/ui/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/ui/mainwindow.py	2007-03-18 22:50:45 UTC (rev 263)
+++ pymoul/trunk/src/moul/qt/ui/mainwindow.py	2007-03-19 09:10:53 UTC (rev 264)
@@ -1,8 +1,8 @@
 # -*- coding: utf-8 -*-
 
-# Form implementation generated from reading ui file 'src\moul\qt\ui\mainwindow.ui'
+# Form implementation generated from reading ui file 'src/moul/qt/ui/mainwindow.ui'
 #
-# Created: Thu Mar 15 09:09:39 2007
+# Created: Mon Mar 19 10:09:02 2007
 #      by: PyQt4 UI code generator 4.1.1
 #
 # WARNING! All changes made in this file will be lost!
@@ -524,6 +524,15 @@
         self.cb_aud_eax.setGeometry(QtCore.QRect(20,20,191,22))
         self.cb_aud_eax.setObjectName("cb_aud_eax")
 
+        self.groupBox_voicechat = QtGui.QGroupBox(self.tab_audio)
+        self.groupBox_voicechat.setEnabled(True)
+        self.groupBox_voicechat.setGeometry(QtCore.QRect(10,190,451,51))
+        self.groupBox_voicechat.setObjectName("groupBox_voicechat")
+
+        self.cb_aud_voicechat = QtGui.QCheckBox(self.groupBox_voicechat)
+        self.cb_aud_voicechat.setGeometry(QtCore.QRect(20,20,171,19))
+        self.cb_aud_voicechat.setObjectName("cb_aud_voicechat")
+
         self.groupBox_aud_level = QtGui.QGroupBox(self.tab_audio)
         self.groupBox_aud_level.setEnabled(True)
         self.groupBox_aud_level.setGeometry(QtCore.QRect(10,0,451,181))
@@ -658,15 +667,6 @@
         self.cb_aud_mute = QtGui.QCheckBox(self.groupBox_aud_level)
         self.cb_aud_mute.setGeometry(QtCore.QRect(20,20,189,22))
         self.cb_aud_mute.setObjectName("cb_aud_mute")
-
-        self.groupBox_voicechat = QtGui.QGroupBox(self.tab_audio)
-        self.groupBox_voicechat.setEnabled(True)
-        self.groupBox_voicechat.setGeometry(QtCore.QRect(10,190,451,51))
-        self.groupBox_voicechat.setObjectName("groupBox_voicechat")
-
-        self.cb_aud_voicechat = QtGui.QCheckBox(self.groupBox_voicechat)
-        self.cb_aud_voicechat.setGeometry(QtCore.QRect(20,20,171,19))
-        self.cb_aud_voicechat.setObjectName("cb_aud_voicechat")
         self.tab_sub_settings.addTab(self.tab_audio,"")
         self.tabwidget.addTab(self.tab_settings,"")
 
@@ -694,9 +694,9 @@
         self.tab_time = QtGui.QWidget()
         self.tab_time.setObjectName("tab_time")
 
-        self.tabWidget_2 = QtGui.QTabWidget(self.tab_time)
-        self.tabWidget_2.setGeometry(QtCore.QRect(0,0,471,411))
-        self.tabWidget_2.setObjectName("tabWidget_2")
+        self.tab_sub_time = QtGui.QTabWidget(self.tab_time)
+        self.tab_sub_time.setGeometry(QtCore.QRect(0,0,471,411))
+        self.tab_sub_time.setObjectName("tab_sub_time")
 
         self.tab_time_dni = QtGui.QWidget()
         self.tab_time_dni.setObjectName("tab_time_dni")
@@ -950,7 +950,7 @@
         self.rb_dnitime = QtGui.QRadioButton(self.gridLayout_5)
         self.rb_dnitime.setObjectName("rb_dnitime")
         self.gridlayout2.addWidget(self.rb_dnitime,2,0,1,1)
-        self.tabWidget_2.addTab(self.tab_time_dni,"")
+        self.tab_sub_time.addTab(self.tab_time_dni,"")
 
         self.tab_time_eder = QtGui.QWidget()
         self.tab_time_eder.setObjectName("tab_time_eder")
@@ -1011,7 +1011,7 @@
         self.gridlayout3.addItem(spacerItem10,0,5,1,1)
 
         self.tw_eg = QtGui.QTableWidget(self.groupBox_4)
-        self.tw_eg.setGeometry(QtCore.QRect(10,90,431,141))
+        self.tw_eg.setGeometry(QtCore.QRect(10,90,431,131))
 
         font = QtGui.QFont(self.tw_eg.font())
         font.setPointSize(8)
@@ -1020,8 +1020,13 @@
         self.tw_eg.setDragDropOverwriteMode(False)
         self.tw_eg.setAlternatingRowColors(True)
         self.tw_eg.setObjectName("tw_eg")
-        self.tabWidget_2.addTab(self.tab_time_eder,"")
 
+        self.lb_localtime = QtGui.QLabel(self.groupBox_4)
+        self.lb_localtime.setGeometry(QtCore.QRect(360,230,81,20))
+        self.lb_localtime.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
+        self.lb_localtime.setObjectName("lb_localtime")
+        self.tab_sub_time.addTab(self.tab_time_eder,"")
+
         self.tab_time_podages = QtGui.QWidget()
         self.tab_time_podages.setObjectName("tab_time_podages")
 
@@ -1030,17 +1035,22 @@
         self.groupBox_6.setGeometry(QtCore.QRect(10,0,451,371))
         self.groupBox_6.setObjectName("groupBox_6")
 
-        self.tw_eg_2 = QtGui.QTableWidget(self.groupBox_6)
-        self.tw_eg_2.setGeometry(QtCore.QRect(10,30,431,141))
+        self.tw_pods = QtGui.QTableWidget(self.groupBox_6)
+        self.tw_pods.setGeometry(QtCore.QRect(10,30,431,131))
 
-        font = QtGui.QFont(self.tw_eg_2.font())
+        font = QtGui.QFont(self.tw_pods.font())
         font.setPointSize(8)
-        self.tw_eg_2.setFont(font)
-        self.tw_eg_2.setProperty("showDropIndicator",QtCore.QVariant(False))
-        self.tw_eg_2.setDragDropOverwriteMode(False)
-        self.tw_eg_2.setAlternatingRowColors(True)
-        self.tw_eg_2.setObjectName("tw_eg_2")
-        self.tabWidget_2.addTab(self.tab_time_podages,"")
+        self.tw_pods.setFont(font)
+        self.tw_pods.setProperty("showDropIndicator",QtCore.QVariant(False))
+        self.tw_pods.setDragDropOverwriteMode(False)
+        self.tw_pods.setAlternatingRowColors(True)
+        self.tw_pods.setObjectName("tw_pods")
+
+        self.lb_localtime_2 = QtGui.QLabel(self.groupBox_6)
+        self.lb_localtime_2.setGeometry(QtCore.QRect(360,170,81,20))
+        self.lb_localtime_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
+        self.lb_localtime_2.setObjectName("lb_localtime_2")
+        self.tab_sub_time.addTab(self.tab_time_podages,"")
         self.tabwidget.addTab(self.tab_time,"")
 
         self.tab_browse = QtGui.QWidget()
@@ -1206,8 +1216,8 @@
 
         self.retranslateUi(MainWindow)
         self.tabwidget.setCurrentIndex(0)
-        self.tab_sub_settings.setCurrentIndex(1)
-        self.tabWidget_2.setCurrentIndex(0)
+        self.tab_sub_settings.setCurrentIndex(0)
+        self.tab_sub_time.setCurrentIndex(0)
         self.tabWidget.setCurrentIndex(2)
         self.tabwidget_about.setCurrentIndex(0)
         QtCore.QObject.connect(self.main_buttonbox,QtCore.SIGNAL("rejected()"),MainWindow.close)
@@ -1255,14 +1265,14 @@
         self.lb_aud_device.setText(QtGui.QApplication.translate("MainWindow", "Generic Software", None, QtGui.QApplication.UnicodeUTF8))
         self.lb_aud_priority.setText(QtGui.QApplication.translate("MainWindow", "Sound priority", None, QtGui.QApplication.UnicodeUTF8))
         self.cb_aud_eax.setText(QtGui.QApplication.translate("MainWindow", "Enable EAX", None, QtGui.QApplication.UnicodeUTF8))
+        self.groupBox_voicechat.setTitle(QtGui.QApplication.translate("MainWindow", "Voice chat", None, QtGui.QApplication.UnicodeUTF8))
+        self.cb_aud_voicechat.setText(QtGui.QApplication.translate("MainWindow", "Enable Voice Chat", None, QtGui.QApplication.UnicodeUTF8))
         self.groupBox_aud_level.setTitle(QtGui.QApplication.translate("MainWindow", "Level", None, QtGui.QApplication.UnicodeUTF8))
         self.lb_aud_fx_3.setText(QtGui.QApplication.translate("MainWindow", "Sound FX", None, QtGui.QApplication.UnicodeUTF8))
         self.lb_aud_music.setText(QtGui.QApplication.translate("MainWindow", "Music", None, QtGui.QApplication.UnicodeUTF8))
         self.lb_aud_ambience.setText(QtGui.QApplication.translate("MainWindow", "Ambience Sound", None, QtGui.QApplication.UnicodeUTF8))
         self.lb_aud_npc.setText(QtGui.QApplication.translate("MainWindow", "NPC Voices", None, QtGui.QApplication.UnicodeUTF8))
         self.cb_aud_mute.setText(QtGui.QApplication.translate("MainWindow", "Mute all", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox_voicechat.setTitle(QtGui.QApplication.translate("MainWindow", "Voice chat", None, QtGui.QApplication.UnicodeUTF8))
-        self.cb_aud_voicechat.setText(QtGui.QApplication.translate("MainWindow", "Enable Voice Chat", None, QtGui.QApplication.UnicodeUTF8))
         self.tab_sub_settings.setTabText(self.tab_sub_settings.indexOf(self.tab_audio), QtGui.QApplication.translate("MainWindow", "Audio", None, QtGui.QApplication.UnicodeUTF8))
         self.tabwidget.setTabText(self.tabwidget.indexOf(self.tab_settings), QtGui.QApplication.translate("MainWindow", "Settings", None, QtGui.QApplication.UnicodeUTF8))
         self.gb_servers.setTitle(QtGui.QApplication.translate("MainWindow", "Ping servers", None, QtGui.QApplication.UnicodeUTF8))
@@ -1300,7 +1310,7 @@
         self.cb_earthtime_tz.addItem(QtGui.QApplication.translate("MainWindow", "local time", None, QtGui.QApplication.UnicodeUTF8))
         self.cb_earthtime_tz.addItem(QtGui.QApplication.translate("MainWindow", "UTC", None, QtGui.QApplication.UnicodeUTF8))
         self.rb_dnitime.setText(QtGui.QApplication.translate("MainWindow", "D\'ni Time", None, QtGui.QApplication.UnicodeUTF8))
-        self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab_time_dni), QtGui.QApplication.translate("MainWindow", "D\'ni Time", None, QtGui.QApplication.UnicodeUTF8))
+        self.tab_sub_time.setTabText(self.tab_sub_time.indexOf(self.tab_time_dni), QtGui.QApplication.translate("MainWindow", "D\'ni Time", None, QtGui.QApplication.UnicodeUTF8))
         self.groupBox_4.setTitle(QtGui.QApplication.translate("MainWindow", "Eder Gira day cycle", None, QtGui.QApplication.UnicodeUTF8))
         self.label_6.setText(QtGui.QApplication.translate("MainWindow", "Sun", None, QtGui.QApplication.UnicodeUTF8))
         self.label_13.setText(QtGui.QApplication.translate("MainWindow", "Light level", None, QtGui.QApplication.UnicodeUTF8))
@@ -1321,22 +1331,20 @@
         headerItem5 = QtGui.QTableWidgetItem()
         headerItem5.setText(QtGui.QApplication.translate("MainWindow", "Dusk", None, QtGui.QApplication.UnicodeUTF8))
         self.tw_eg.setHorizontalHeaderItem(2,headerItem5)
-        self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab_time_eder), QtGui.QApplication.translate("MainWindow", "Eder Gira", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox_6.setTitle(QtGui.QApplication.translate("MainWindow", "Negilahn Gate appearence", None, QtGui.QApplication.UnicodeUTF8))
-        self.tw_eg_2.clear()
-        self.tw_eg_2.setColumnCount(1)
-        self.tw_eg_2.setRowCount(0)
-
-        headerItem6 = QtGui.QTableWidgetItem()
-        headerItem6.setText(QtGui.QApplication.translate("MainWindow", "Gate", None, QtGui.QApplication.UnicodeUTF8))
-        self.tw_eg_2.setHorizontalHeaderItem(0,headerItem6)
-        self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab_time_podages), QtGui.QApplication.translate("MainWindow", "Negilahn", None, QtGui.QApplication.UnicodeUTF8))
+        self.lb_localtime.setText(QtGui.QApplication.translate("MainWindow", "local time", None, QtGui.QApplication.UnicodeUTF8))
+        self.tab_sub_time.setTabText(self.tab_sub_time.indexOf(self.tab_time_eder), QtGui.QApplication.translate("MainWindow", "Eder Gira", None, QtGui.QApplication.UnicodeUTF8))
+        self.groupBox_6.setTitle(QtGui.QApplication.translate("MainWindow", "Gate appearence", None, QtGui.QApplication.UnicodeUTF8))
+        self.tw_pods.clear()
+        self.tw_pods.setColumnCount(0)
+        self.tw_pods.setRowCount(0)
+        self.lb_localtime_2.setText(QtGui.QApplication.translate("MainWindow", "local time", None, QtGui.QApplication.UnicodeUTF8))
+        self.tab_sub_time.setTabText(self.tab_sub_time.indexOf(self.tab_time_podages), QtGui.QApplication.translate("MainWindow", "Pod Ages", None, QtGui.QApplication.UnicodeUTF8))
         self.tabwidget.setTabText(self.tabwidget.indexOf(self.tab_time), QtGui.QApplication.translate("MainWindow", "Time", None, QtGui.QApplication.UnicodeUTF8))
         self.groupBox_5.setTitle(QtGui.QApplication.translate("MainWindow", "Read chatlogs", None, QtGui.QApplication.UnicodeUTF8))
         self.tb_chatlog_view.setHtml(QtGui.QApplication.translate("MainWindow", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
         "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Sans Serif\'; font-size:9pt;\">Not implemented</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
+        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
+        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Not implemented</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
         self.cb_chatlog.addItem(QtGui.QApplication.translate("MainWindow", "Not implemented", None, QtGui.QApplication.UnicodeUTF8))
         self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_sub_chatlogs), QtGui.QApplication.translate("MainWindow", "Chat logs", None, QtGui.QApplication.UnicodeUTF8))
         self.gb_documents.setTitle(QtGui.QApplication.translate("MainWindow", "Browse journals and notes", None, QtGui.QApplication.UnicodeUTF8))
@@ -1352,13 +1360,13 @@
         self.tabwidget.setTabText(self.tabwidget.indexOf(self.tab_browse), QtGui.QApplication.translate("MainWindow", "Browse", None, QtGui.QApplication.UnicodeUTF8))
         self.tb_abouttext.setHtml(QtGui.QApplication.translate("MainWindow", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
         "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
-        "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Sans Serif\'; font-size:9pt;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
+        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
+        "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
         self.tabwidget_about.setTabText(self.tabwidget_about.indexOf(self.tab_sub_about), QtGui.QApplication.translate("MainWindow", "About pyMoul", None, QtGui.QApplication.UnicodeUTF8))
         self.tb_license.setHtml(QtGui.QApplication.translate("MainWindow", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
         "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
-        "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Sans Serif\'; font-size:9pt;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
+        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
+        "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
         self.tabwidget_about.setTabText(self.tabwidget_about.indexOf(self.tab_sub_license), QtGui.QApplication.translate("MainWindow", "License", None, QtGui.QApplication.UnicodeUTF8))
         self.tabwidget.setTabText(self.tabwidget.indexOf(self.tab_about), QtGui.QApplication.translate("MainWindow", "About", None, QtGui.QApplication.UnicodeUTF8))
 
Modified: pymoul/trunk/src/moul/qt/ui/mainwindow.ui
===================================================================
--- pymoul/trunk/src/moul/qt/ui/mainwindow.ui	2007-03-18 22:50:45 UTC (rev 263)
+++ pymoul/trunk/src/moul/qt/ui/mainwindow.ui	2007-03-19 09:10:53 UTC (rev 264)
@@ -358,7 +358,7 @@
        </rect>
       </property>
       <property name="currentIndex" >
-       <number>1</number>
+       <number>0</number>
       </property>
       <widget class="QWidget" name="tab_graphics" >
        <attribute name="title" >
@@ -1126,6 +1126,35 @@
          </property>
         </widget>
        </widget>
+       <widget class="QGroupBox" name="groupBox_voicechat" >
+        <property name="enabled" >
+         <bool>true</bool>
+        </property>
+        <property name="geometry" >
+         <rect>
+          <x>10</x>
+          <y>190</y>
+          <width>451</width>
+          <height>51</height>
+         </rect>
+        </property>
+        <property name="title" >
+         <string>Voice chat</string>
+        </property>
+        <widget class="QCheckBox" name="cb_aud_voicechat" >
+         <property name="geometry" >
+          <rect>
+           <x>20</x>
+           <y>20</y>
+           <width>171</width>
+           <height>19</height>
+          </rect>
+         </property>
+         <property name="text" >
+          <string>Enable Voice Chat</string>
+         </property>
+        </widget>
+       </widget>
        <widget class="QGroupBox" name="groupBox_aud_level" >
         <property name="enabled" >
          <bool>true</bool>
@@ -1403,35 +1432,6 @@
          </property>
         </widget>
        </widget>
-       <widget class="QGroupBox" name="groupBox_voicechat" >
-        <property name="enabled" >
-         <bool>true</bool>
-        </property>
-        <property name="geometry" >
-         <rect>
-          <x>10</x>
-          <y>190</y>
-          <width>451</width>
-          <height>51</height>
-         </rect>
-        </property>
-        <property name="title" >
-         <string>Voice chat</string>
-        </property>
-        <widget class="QCheckBox" name="cb_aud_voicechat" >
-         <property name="geometry" >
-          <rect>
-           <x>20</x>
-           <y>20</y>
-           <width>171</width>
-           <height>19</height>
-          </rect>
-         </property>
-         <property name="text" >
-          <string>Enable Voice Chat</string>
-         </property>
-        </widget>
-       </widget>
       </widget>
      </widget>
     </widget>
@@ -1503,7 +1503,7 @@
      <attribute name="title" >
       <string>Time</string>
      </attribute>
-     <widget class="QTabWidget" name="tabWidget_2" >
+     <widget class="QTabWidget" name="tab_sub_time" >
       <property name="geometry" >
        <rect>
         <x>0</x>
@@ -2186,7 +2186,7 @@
            <x>10</x>
            <y>90</y>
            <width>431</width>
-           <height>141</height>
+           <height>131</height>
           </rect>
          </property>
          <property name="font" >
@@ -2219,11 +2219,27 @@
           </property>
          </column>
         </widget>
+        <widget class="QLabel" name="lb_localtime" >
+         <property name="geometry" >
+          <rect>
+           <x>360</x>
+           <y>230</y>
+           <width>81</width>
+           <height>20</height>
+          </rect>
+         </property>
+         <property name="text" >
+          <string>local time</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+        </widget>
        </widget>
       </widget>
       <widget class="QWidget" name="tab_time_podages" >
        <attribute name="title" >
-        <string>Negilahn</string>
+        <string>Pod Ages</string>
        </attribute>
        <widget class="QGroupBox" name="groupBox_6" >
         <property name="enabled" >
@@ -2238,15 +2254,15 @@
          </rect>
         </property>
         <property name="title" >
-         <string>Negilahn Gate appearence</string>
+         <string>Gate appearence</string>
         </property>
-        <widget class="QTableWidget" name="tw_eg_2" >
+        <widget class="QTableWidget" name="tw_pods" >
          <property name="geometry" >
           <rect>
            <x>10</x>
            <y>30</y>
            <width>431</width>
-           <height>141</height>
+           <height>131</height>
           </rect>
          </property>
          <property name="font" >
@@ -2263,12 +2279,23 @@
          <property name="alternatingRowColors" >
           <bool>true</bool>
          </property>
-         <column>
-          <property name="text" >
-           <string>Gate</string>
-          </property>
-         </column>
         </widget>
+        <widget class="QLabel" name="lb_localtime_2" >
+         <property name="geometry" >
+          <rect>
+           <x>360</x>
+           <y>170</y>
+           <width>81</width>
+           <height>20</height>
+          </rect>
+         </property>
+         <property name="text" >
+          <string>local time</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+        </widget>
        </widget>
       </widget>
      </widget>
@@ -2320,8 +2347,8 @@
          <property name="html" >
           <string><html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;">Not implemented</p></body></html></string>
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Not implemented</p></body></html></string>
          </property>
          <property name="textInteractionFlags" >
           <enum>Qt::TextSelectableByMouse</enum>
@@ -2564,8 +2591,8 @@
         <property name="html" >
          <string><html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;">
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p></body></html></string>
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html></string>
         </property>
         <property name="textInteractionFlags" >
          <enum>Qt::TextBrowserInteraction</enum>
@@ -2591,8 +2618,8 @@
         <property name="html" >
          <string><html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;">
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p></body></html></string>
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html></string>
         </property>
         <property name="textInteractionFlags" >
          <enum>Qt::TextSelectableByMouse</enum>
Modified: pymoul/trunk/src/moul/time/edergira.py
===================================================================
--- pymoul/trunk/src/moul/time/edergira.py	2007-03-18 22:50:45 UTC (rev 263)
+++ pymoul/trunk/src/moul/time/edergira.py	2007-03-19 09:10:53 UTC (rev 264)
@@ -108,8 +108,8 @@
 
         @return: n, midnight, dawn, dusk
         """
-        base = self.getLastMidnight(dt) + self._delta
-        n = 1
+        base = self.getLastMidnight(dt)
+        n = 0
         while True:
             yield (n, base, base+self._dawn, base+self._dusk)
             base += self._delta
@@ -118,6 +118,7 @@
     def __iter__(self):
         return self.iterDates()
 
+    @property
     def dayLength(self):
         return (self._hours, 0, 0)
 
Modified: pymoul/trunk/src/moul/time/podage.py
===================================================================
--- pymoul/trunk/src/moul/time/podage.py	2007-03-18 22:50:45 UTC (rev 263)
+++ pymoul/trunk/src/moul/time/podage.py	2007-03-19 09:10:53 UTC (rev 264)
@@ -59,7 +59,7 @@
 # base datetime for calculations
 #BASE_DT = datetime(2007, 3, 4, 10, 16, 0, tzinfo=UTC)
 # XXX Uru's main game server is off 3min 35sec
-BASE_DT = datetime(2007, 3, 7, 1, 7, 57, tzinfo=UTC)
+BASE_DT = datetime(2007, 3, 7, 1, 7, 0, tzinfo=UTC)
 #BASE_DT = datetime(2007, 3, 7, 1, 10, 9, tzinfo=UTC)
 
 class PodAgeRegistry(dict):
@@ -122,6 +122,8 @@
 class PodAgeTime(object):
     """A pod age day cycle and gate event timer
     """
+    __slots__ = ('_age', '_name', '_base')
+
     def __init__(self, name):
         """
         @param name: Registered name of a pod age
@@ -167,8 +169,7 @@
         @return: date and time of next event
         @rtype: datetime instance
         """
-        delta = count * PODDAY_TD
-        return self._base + delta
+        return self._base + count * PODDAY_TD
 
     def __iter__(self):
         """Iterate through events
@@ -176,12 +177,11 @@
         @return: Iterator that yields (number, date)
         @rtype: iterator (int, datetime)
         """
-        delta = PODDAY_TD
-        dt = self._base + delta
+        dt = self._base + PODDAY_TD
         n = 0
         while True:
             yield (n, dt)
-            dt += delta
+            dt += PODDAY_TD
             n += 1
 
 # pod ages
@@ -236,29 +236,34 @@
 def allTzList(limit=50, fmt="%Y-%m-%d %H:%M:%S %Z"):
     """Small utility function to create a nice list for the forum
     """
-    base = os.path.dirname(__file__)
+    from pytz import common_timezones
+    base = os.path.join(os.path.dirname(__file__), 'out')
+    if not os.path.isdir(base):
+        os.mkdir(base)
     for tz in common_timezones:
         continent = tz.split('/')[0]
         if continent not in ('UTC', 'US', 'Australia', 'Europe', 'America'):
             continue
         tzname = tz.replace('/', '_')
-        fd = open(os.path.join(base, 'out', "%s.html" % tzname), 'w')
+        fd = open(os.path.join(base, "%s.html" % tzname), 'w')
         print >>fd, "<html><head><title>%s</title></head><body><pre>" % tz
+        print tzname
         for age in listPodAges():
             pat = PodAgeTime(age)
-            print age, tzname
             print >>fd, age
             print >>fd, "--------------------------------------------------------------------"
             for n, dt in iter(pat):
                 if n > limit:
                     break
-                dni = DniTime.fromUTC(dt)
+                #dni = DniTime.fromUTC(dt)
                 ldt = normalizeTZ(tz, dt)
-                print >>fd, "Earth: %s, D'ni: %s, %i" % (ldt.strftime(fmt),
-                    str(dni), dni.pahrtahvo)
+                #print >>fd, "Earth: %s, D'ni: %s, %i" % (ldt.strftime(fmt),
+                #    str(dni), dni.pahrtahvo)
+                print >>fd, ldt.strftime(fmt)
             print >>fd, "\n"
         print >>fd, "</pre></body></html>"
         fd.close()
 
 if __name__ == '__main__':
     forumTimeTable(tzlist=('UTC',))
+    #allTzList()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-19 09:35:01
      
     
   | 
Revision: 265
          http://pymoul.svn.sourceforge.net/pymoul/?rev=265&view=rev
Author:   tiran
Date:     2007-03-19 02:19:33 -0700 (Mon, 19 Mar 2007)
Log Message:
-----------
Fixed unit tests
Modified Paths:
--------------
    pymoul/trunk/Makefile.in
    pymoul/trunk/src/moul/time/edergira.py
    pymoul/trunk/src/moul/time/podage.py
Modified: pymoul/trunk/Makefile.in
===================================================================
--- pymoul/trunk/Makefile.in	2007-03-19 09:10:53 UTC (rev 264)
+++ pymoul/trunk/Makefile.in	2007-03-19 09:19:33 UTC (rev 265)
@@ -41,7 +41,7 @@
 test_build: build 
 	PYTHONPATH="src" $(PYTHON) test.py $(TESTFLAGS) $(TESTOPTS)
 
-test_inplace: 
+test_inplace: inplace 
 	PYTHONPATH="src" $(PYTHON) test.py $(TESTFLAGS) $(TESTOPTS)
 
 doc_html:
Modified: pymoul/trunk/src/moul/time/edergira.py
===================================================================
--- pymoul/trunk/src/moul/time/edergira.py	2007-03-19 09:10:53 UTC (rev 264)
+++ pymoul/trunk/src/moul/time/edergira.py	2007-03-19 09:19:33 UTC (rev 265)
@@ -35,9 +35,9 @@
 <type 'generator'>
 
 >>> gen.next()
+(0, datetime.datetime(2007, 3, 8, 4, 15, tzinfo=<UTC>), datetime.datetime(2007, 3, 8, 6, 30, tzinfo=<UTC>), datetime.datetime(2007, 3, 8, 11, 30, tzinfo=<UTC>))
+>>> gen.next()
 (1, datetime.datetime(2007, 3, 8, 14, 15, tzinfo=<UTC>), datetime.datetime(2007, 3, 8, 16, 30, tzinfo=<UTC>), datetime.datetime(2007, 3, 8, 21, 30, tzinfo=<UTC>))
->>> gen.next()
-(2, datetime.datetime(2007, 3, 9, 0, 15, tzinfo=<UTC>), datetime.datetime(2007, 3, 9, 2, 30, tzinfo=<UTC>), datetime.datetime(2007, 3, 9, 7, 30, tzinfo=<UTC>))
 """
 __author__ = "Christian Heimes"
 __version__ = "$Id"
Modified: pymoul/trunk/src/moul/time/podage.py
===================================================================
--- pymoul/trunk/src/moul/time/podage.py	2007-03-19 09:10:53 UTC (rev 264)
+++ pymoul/trunk/src/moul/time/podage.py	2007-03-19 09:19:33 UTC (rev 265)
@@ -17,12 +17,13 @@
 #
 """pyMoul Pod age time
 
+>>> pod18 = getPodAge('Negilahn')
 >>> pod18.gatenumber
 18
->>> getPodAge('Negilahn') is pod18
+>>> pod18.name
+'Negilahn'
+>>> getPodAgeByNumber(18) is pod18 or getPodAgeByNumber(18)
 True
->>> getPodAgeByNumber(18) is pod18
-True
 
 >>> padneg = PodAgeTime('Negilahn')
 >>> for n, dt in iter(padneg):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-18 22:50:56
      
     
   | 
Revision: 263
          http://pymoul.svn.sourceforge.net/pymoul/?rev=263&view=rev
Author:   tiran
Date:     2007-03-18 15:50:45 -0700 (Sun, 18 Mar 2007)
Log Message:
-----------
Pod age time code update
Modified Paths:
--------------
    pymoul/trunk/src/moul/time/podage.py
Modified: pymoul/trunk/src/moul/time/podage.py
===================================================================
--- pymoul/trunk/src/moul/time/podage.py	2007-03-16 15:17:59 UTC (rev 262)
+++ pymoul/trunk/src/moul/time/podage.py	2007-03-18 22:50:45 UTC (rev 263)
@@ -48,7 +48,20 @@
 from moul.time.utils import UTC
 from moul.time.utils import td2sec
 from moul.time.utils import utcnow
+from moul.time.dni import PRORAHN_PER_PAHRTAHVO
+from moul.time.dni import FACTOR_SP
 
+
+# constants for pod day length
+PAHRTAHVO_SEC = PRORAHN_PER_PAHRTAHVO * FACTOR_SP
+PODDAY_SEC = 13 * PAHRTAHVO_SEC
+PODDAY_TD = timedelta(seconds=PODDAY_SEC)
+# base datetime for calculations
+#BASE_DT = datetime(2007, 3, 4, 10, 16, 0, tzinfo=UTC)
+# XXX Uru's main game server is off 3min 35sec
+BASE_DT = datetime(2007, 3, 7, 1, 7, 57, tzinfo=UTC)
+#BASE_DT = datetime(2007, 3, 7, 1, 10, 9, tzinfo=UTC)
+
 class PodAgeRegistry(dict):
     """Registry for pod ages
     """
@@ -71,6 +84,8 @@
         return dict.__delitem__(self, key)
 
     def register(self, pod):
+        if pod.gatenumber < 0:
+            return False
         self[pod.name] = pod
 
     def listNumbers(self):
@@ -92,14 +107,11 @@
     """
     __slots__ = ()
 
-    def __init__(self, __registry=_podRegistry, **kw):
+    def __init__(self, **kw):
         super(PodAgeInformation, self).__init__(**kw)
-        self['daycycle'] = timedelta(days=0, hours=15, minutes=43)
-        self['daycycle_sec'] = td2sec(self['daycycle'])
-        for key in ('name', 'gatenumber'):
+        for key in ('name', 'gatenumber', 'offset'):
             if key not in self:
                 raise KeyError(key)
-        __registry.register(self)
 
     def __getattribute__(self, name):
         if name in self:
@@ -119,6 +131,8 @@
             age = getPodAge(name)
         elif isinstance(name, int):
             age = getPodAgeByNumber(name)
+        elif isinstance(name, PodAgeInformation):
+            age = name
         else:
             raise TypeError(name)
         if age is None:
@@ -138,11 +152,12 @@
         """
         if startdt is None:
             startdt = utcnow()
+        base_dt = BASE_DT + self._age.offset
         # calculate completed cycles since base_dt
-        sec = td2sec(startdt - self._age.base_dt)
-        cycles = floor(sec / self._age.daycycle_sec)
-        delta = int(cycles) * self._age.daycycle
-        self._base = self._age.base_dt + delta
+        sec = td2sec(startdt - base_dt)
+        cycles = floor(sec / PODDAY_SEC)
+        delta = int(cycles) * PODDAY_TD
+        self._base = base_dt + delta
 
     def get(self, count=1):
         """Get date by count
@@ -152,7 +167,7 @@
         @return: date and time of next event
         @rtype: datetime instance
         """
-        delta = count * self._age.daycycle
+        delta = count * PODDAY_TD
         return self._base + delta
 
     def __iter__(self):
@@ -161,7 +176,7 @@
         @return: Iterator that yields (number, date)
         @rtype: iterator (int, datetime)
         """
-        delta = self._age.daycycle
+        delta = PODDAY_TD
         dt = self._base + delta
         n = 0
         while True:
@@ -170,12 +185,80 @@
             n += 1
 
 # pod ages
-pod18 = PodAgeInformation(name = 'Negilahn', gatenumber = 18,
-    base_dt = datetime(2007, 3, 4, 10, 16, 0, tzinfo=UTC))
+registerPodAge(PodAgeInformation(
+    name = 'Dereno',
+    gatenumber = 25,
+    offset = timedelta(seconds=1*PAHRTAHVO_SEC)
+    ))
 
+registerPodAge(PodAgeInformation(
+    name = 'Negilahn',
+    gatenumber = 18,
+    offset = timedelta(seconds=0)
+    ))
+
+registerPodAge(PodAgeInformation(
+    name = 'Payiferen',
+    gatenumber = -1,
+    offset = timedelta(seconds=-1)
+    ))
+
+registerPodAge(PodAgeInformation(
+    name = 'Tetsonot',
+    gatenumber = -1,
+    offset = timedelta(seconds=-1)
+    ))
+
+
+from moul.time.dni import DniTime
+from moul.time.utils import normalizeTZ
+
+def forumTimeTable(limit=10, fmt="%Y-%m-%d %H:%M:%S %Z", tzlist=('UTC', 'CET',
+                   'US/Mountain', 'US/Pacific', 'US/Eastern',
+                   'Australia/Sydney')):
+    """Small utility function to create a nice list for the forum
+    """
+    for tz in tzlist:
+        print "[spoiler=%s]" % tz
+        for age in listPodAges():
+            pat = PodAgeTime(age)
+            print age
+            print "--------------------------------------------------------------------"
+            for n, dt in iter(pat):
+                if n > limit:
+                    break
+                dni = DniTime.fromUTC(dt)
+                ldt = normalizeTZ(tz, dt)
+                print "Earth: %s, D'ni: %s, %i" % (ldt.strftime(fmt),
+                    str(dni), dni.pahrtahvo)
+        print "[/spoiler]"
+
+def allTzList(limit=50, fmt="%Y-%m-%d %H:%M:%S %Z"):
+    """Small utility function to create a nice list for the forum
+    """
+    base = os.path.dirname(__file__)
+    for tz in common_timezones:
+        continent = tz.split('/')[0]
+        if continent not in ('UTC', 'US', 'Australia', 'Europe', 'America'):
+            continue
+        tzname = tz.replace('/', '_')
+        fd = open(os.path.join(base, 'out', "%s.html" % tzname), 'w')
+        print >>fd, "<html><head><title>%s</title></head><body><pre>" % tz
+        for age in listPodAges():
+            pat = PodAgeTime(age)
+            print age, tzname
+            print >>fd, age
+            print >>fd, "--------------------------------------------------------------------"
+            for n, dt in iter(pat):
+                if n > limit:
+                    break
+                dni = DniTime.fromUTC(dt)
+                ldt = normalizeTZ(tz, dt)
+                print >>fd, "Earth: %s, D'ni: %s, %i" % (ldt.strftime(fmt),
+                    str(dni), dni.pahrtahvo)
+            print >>fd, "\n"
+        print >>fd, "</pre></body></html>"
+        fd.close()
+
 if __name__ == '__main__':
-    padneg = PodAgeTime('Negilahn')
-    for n, dt in iter(padneg):
-        print n, dt
-        if n > 20:
-            break
+    forumTimeTable(tzlist=('UTC',))
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-16 15:18:04
      
     
   | 
Revision: 262
          http://pymoul.svn.sourceforge.net/pymoul/?rev=262&view=rev
Author:   tiran
Date:     2007-03-16 08:17:59 -0700 (Fri, 16 Mar 2007)
Log Message:
-----------
Removed pkg_resource require of enumprocess
Modified Paths:
--------------
    pymoul/trunk/src/moul/osdependent/__init__.py
Modified: pymoul/trunk/src/moul/osdependent/__init__.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/__init__.py	2007-03-15 19:54:00 UTC (rev 261)
+++ pymoul/trunk/src/moul/osdependent/__init__.py	2007-03-16 15:17:59 UTC (rev 262)
@@ -43,7 +43,8 @@
 
 if not __FROZEN__:
     import pkg_resources
-    pkg_resources.require("enumprocess>=0.1")
+    # XXX: disabled for now
+    #pkg_resources.require("enumprocess>=0.1.1")
 
 from enumprocess import getPidNames
 from enumprocess import getPids
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-15 19:54:02
      
     
   | 
Revision: 261
          http://pymoul.svn.sourceforge.net/pymoul/?rev=261&view=rev
Author:   tiran
Date:     2007-03-15 12:54:00 -0700 (Thu, 15 Mar 2007)
Log Message:
-----------
Removed enumprocess as a dependency. It's part of the bundle
Modified Paths:
--------------
    pymoul/trunk/setup.py
Modified: pymoul/trunk/setup.py
===================================================================
--- pymoul/trunk/setup.py	2007-03-15 12:56:45 UTC (rev 260)
+++ pymoul/trunk/setup.py	2007-03-15 19:54:00 UTC (rev 261)
@@ -64,7 +64,7 @@
 
 setup_options = dict(
     setup_requires = ["setuptools>="+SETUPTOOLS_VERSION,],
-    install_requires = ["pytz>=2006p", "enumprocess>=0.1"],
+    install_requires = ["pytz>=2006p"],
     data_files = [
         ('docs', list(glob('*.txt'))),
         ('i18n', list(glob('src/moul/qt/i18n/pymoul_*.qm'))),
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-15 12:56:46
      
     
   | 
Revision: 260
          http://pymoul.svn.sourceforge.net/pymoul/?rev=260&view=rev
Author:   tiran
Date:     2007-03-15 05:56:45 -0700 (Thu, 15 Mar 2007)
Log Message:
-----------
Fixed version requirements for py2app
Fixed locking unit tests
Modified Paths:
--------------
    pymoul/trunk/src/moul/osdependent/tests/test_singleapp.py
    pymoul/trunk/utilities/setup_darwin.py
Modified: pymoul/trunk/src/moul/osdependent/tests/test_singleapp.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/tests/test_singleapp.py	2007-03-15 08:43:34 UTC (rev 259)
+++ pymoul/trunk/src/moul/osdependent/tests/test_singleapp.py	2007-03-15 12:56:45 UTC (rev 260)
@@ -89,8 +89,8 @@
                       stderr=PIPE, shell=True, env=env)
         popen.wait()
         self.failUnless(os.path.isfile(self.tmpfile))
-        
-        out = popen.stdout.read()
+
+        out = popen.stdout.read().strip()
         if os.name == 'nt':
             self.failUnless(self.tmpfile in out or out == '', out)
         elif os.name =='posix':
@@ -98,11 +98,14 @@
         else:
             raise OSError("unsupported os")
 
-        err = popen.stderr.read()
+        err = popen.stderr.read().strip()
         if os.name == 'nt':
             self.failUnless('WindowsError: [Error 13]' in err, err)
         elif os.name =='posix':
-            self.failUnless('IOError: [Errno 11]' in err, err)
+            # Mac: IOError: [Errno 35] Resource temporarily unavailable
+            # Linux: IOError: [Errno 11] Resource temporarily unavailable
+            self.failUnless('IOError:' in err, err)
+            self.failUnless('Resource temporarily unavailable' in err, err)
         else:
             raise OSError("unsupported os")
 
Modified: pymoul/trunk/utilities/setup_darwin.py
===================================================================
--- pymoul/trunk/utilities/setup_darwin.py	2007-03-15 08:43:34 UTC (rev 259)
+++ pymoul/trunk/utilities/setup_darwin.py	2007-03-15 12:56:45 UTC (rev 260)
@@ -38,7 +38,7 @@
     )
 
 def updateSetupOptions(kw):
-    for req in ("py2app >=0.3.56",):
+    for req in ("py2app>=0.3.6",):
         kw['setup_requires'].append(req)
     for req in ():
         kw['install_requires'].append(req)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-15 08:43:34
      
     
   | 
Revision: 259
          http://pymoul.svn.sourceforge.net/pymoul/?rev=259&view=rev
Author:   tiran
Date:     2007-03-15 01:43:34 -0700 (Thu, 15 Mar 2007)
Log Message:
-----------
Unit test fixes
Fixed tab view order
Modified Paths:
--------------
    pymoul/trunk/src/moul/osdependent/tests/test_singleapp.py
    pymoul/trunk/src/moul/qt/ui/mainwindow.py
    pymoul/trunk/src/moul/qt/ui/mainwindow.ui
Modified: pymoul/trunk/src/moul/osdependent/tests/test_singleapp.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/tests/test_singleapp.py	2007-03-15 08:39:32 UTC (rev 258)
+++ pymoul/trunk/src/moul/osdependent/tests/test_singleapp.py	2007-03-15 08:43:34 UTC (rev 259)
@@ -37,7 +37,9 @@
 from moul.osdependent.singleapp import unlock
 
 if os.name == 'nt':
-    rmcmd = "cmd /c del %(testfile)s"
+    rmcmd = (r'%(exe)s -c "import os; '
+             'os.unlink(%(testfile)s)"' % {'exe' : sys.executable,
+             'testfile' : r"'%(testfile)s'"})
 else:
     rmcmd = ("%(exe)s -c 'from fcntl import *; "
              "fd = open(%(testfile)s, %(mode)s); "
@@ -61,22 +63,36 @@
 #False
 
 class SingleAppTest(unittest.TestCase):
+    def setUp(self):
+        hndl, tmpfile = tempfile.mkstemp()
+        self.tmpfile = os.path.normcase(tmpfile).replace('\\', '/')
+        os.close(hndl)
+        self.fd = open(self.tmpfile, mode='w+')
 
-   def test_locking(self):
+    def tearDown(self):
+        try:
+            unlock(self.fd)
+            self.fd.close()
+        except:
+            pass
+        os.unlink(self.tmpfile)
+
+    def test_locking(self):
         FLAGS = LOCK_SH | LOCK_NB
-        fd = tempfile.NamedTemporaryFile(mode='w+', suffix='lck')
-        testfile = fd.name
-        fd.write('testdata')
-        fd.flush()
-        self.failUnless(os.path.isfile(testfile))
-        lock(fd, FLAGS)
-        popen = Popen(rmcmd % {'testfile' : testfile}, stdout=PIPE,
-                      stderr=PIPE, shell=True, env = {'LC_ALL' : 'C'})
- 
+        self.fd.write('testdata')
+        self.fd.flush()
+        self.failUnless(os.path.isfile(self.tmpfile))
+        lock(self.fd, FLAGS)
+        env = os.environ.copy()
+        env['LC_ALL'] = 'C'
+        popen = Popen(rmcmd % {'testfile' : self.tmpfile}, stdout=PIPE,
+                      stderr=PIPE, shell=True, env=env)
         popen.wait()
+        self.failUnless(os.path.isfile(self.tmpfile))
+        
         out = popen.stdout.read()
         if os.name == 'nt':
-            self.failUnlessEqual(out, '')
+            self.failUnless(self.tmpfile in out or out == '', out)
         elif os.name =='posix':
             self.failUnlessEqual(out, '')
         else:
@@ -84,16 +100,12 @@
 
         err = popen.stderr.read()
         if os.name == 'nt':
-            self.failUnless('IOError: [Errno 11] Resource temporarily unavailable' in err, err)
+            self.failUnless('WindowsError: [Error 13]' in err, err)
         elif os.name =='posix':
-            self.failUnless('IOError: [Errno 11] Resource temporarily unavailable' in err, err)
+            self.failUnless('IOError: [Errno 11]' in err, err)
         else:
             raise OSError("unsupported os")
 
-        self.failUnless(os.path.isfile(testfile))
-        unlock(fd)
-        fd.close()
-
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(SingleAppTest),
Modified: pymoul/trunk/src/moul/qt/ui/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/ui/mainwindow.py	2007-03-15 08:39:32 UTC (rev 258)
+++ pymoul/trunk/src/moul/qt/ui/mainwindow.py	2007-03-15 08:43:34 UTC (rev 259)
@@ -1,8 +1,8 @@
 # -*- coding: utf-8 -*-
 
-# Form implementation generated from reading ui file 'src/moul/qt/ui/mainwindow.ui'
+# Form implementation generated from reading ui file 'src\moul\qt\ui\mainwindow.ui'
 #
-# Created: Sat Mar 10 15:51:37 2007
+# Created: Thu Mar 15 09:09:39 2007
 #      by: PyQt4 UI code generator 4.1.1
 #
 # WARNING! All changes made in this file will be lost!
@@ -959,11 +959,11 @@
         self.groupBox_4.setGeometry(QtCore.QRect(10,0,451,371))
         self.groupBox_4.setObjectName("groupBox_4")
 
-        self.widget = QtGui.QWidget(self.groupBox_4)
-        self.widget.setGeometry(QtCore.QRect(7,20,441,58))
-        self.widget.setObjectName("widget")
+        self.layoutWidget4 = QtGui.QWidget(self.groupBox_4)
+        self.layoutWidget4.setGeometry(QtCore.QRect(7,20,441,58))
+        self.layoutWidget4.setObjectName("layoutWidget4")
 
-        self.gridlayout3 = QtGui.QGridLayout(self.widget)
+        self.gridlayout3 = QtGui.QGridLayout(self.layoutWidget4)
         self.gridlayout3.setMargin(0)
         self.gridlayout3.setSpacing(6)
         self.gridlayout3.setObjectName("gridlayout3")
@@ -971,39 +971,39 @@
         spacerItem9 = QtGui.QSpacerItem(40,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
         self.gridlayout3.addItem(spacerItem9,0,2,1,1)
 
-        self.label_6 = QtGui.QLabel(self.widget)
+        self.label_6 = QtGui.QLabel(self.layoutWidget4)
         self.label_6.setObjectName("label_6")
         self.gridlayout3.addWidget(self.label_6,1,0,1,1)
 
-        self.le_eg_status = QtGui.QLineEdit(self.widget)
+        self.le_eg_status = QtGui.QLineEdit(self.layoutWidget4)
         self.le_eg_status.setReadOnly(True)
         self.le_eg_status.setObjectName("le_eg_status")
         self.gridlayout3.addWidget(self.le_eg_status,1,1,1,1)
 
-        self.le_eg_length = QtGui.QLineEdit(self.widget)
+        self.le_eg_length = QtGui.QLineEdit(self.layoutWidget4)
         self.le_eg_length.setReadOnly(True)
         self.le_eg_length.setObjectName("le_eg_length")
         self.gridlayout3.addWidget(self.le_eg_length,1,4,1,1)
 
-        self.le_eg_light = QtGui.QLineEdit(self.widget)
+        self.le_eg_light = QtGui.QLineEdit(self.layoutWidget4)
         self.le_eg_light.setReadOnly(True)
         self.le_eg_light.setObjectName("le_eg_light")
         self.gridlayout3.addWidget(self.le_eg_light,0,4,1,1)
 
-        self.le_eg_time = QtGui.QLineEdit(self.widget)
+        self.le_eg_time = QtGui.QLineEdit(self.layoutWidget4)
         self.le_eg_time.setReadOnly(True)
         self.le_eg_time.setObjectName("le_eg_time")
         self.gridlayout3.addWidget(self.le_eg_time,0,1,1,1)
 
-        self.label_13 = QtGui.QLabel(self.widget)
+        self.label_13 = QtGui.QLabel(self.layoutWidget4)
         self.label_13.setObjectName("label_13")
         self.gridlayout3.addWidget(self.label_13,0,3,1,1)
 
-        self.label_14 = QtGui.QLabel(self.widget)
+        self.label_14 = QtGui.QLabel(self.layoutWidget4)
         self.label_14.setObjectName("label_14")
         self.gridlayout3.addWidget(self.label_14,1,3,1,1)
 
-        self.label_4 = QtGui.QLabel(self.widget)
+        self.label_4 = QtGui.QLabel(self.layoutWidget4)
         self.label_4.setObjectName("label_4")
         self.gridlayout3.addWidget(self.label_4,0,0,1,1)
 
@@ -1205,9 +1205,9 @@
         self.lb_doc_status.setBuddy(self.pb_doc_loadjournals)
 
         self.retranslateUi(MainWindow)
-        self.tabwidget.setCurrentIndex(3)
+        self.tabwidget.setCurrentIndex(0)
         self.tab_sub_settings.setCurrentIndex(1)
-        self.tabWidget_2.setCurrentIndex(2)
+        self.tabWidget_2.setCurrentIndex(0)
         self.tabWidget.setCurrentIndex(2)
         self.tabwidget_about.setCurrentIndex(0)
         QtCore.QObject.connect(self.main_buttonbox,QtCore.SIGNAL("rejected()"),MainWindow.close)
@@ -1335,8 +1335,8 @@
         self.groupBox_5.setTitle(QtGui.QApplication.translate("MainWindow", "Read chatlogs", None, QtGui.QApplication.UnicodeUTF8))
         self.tb_chatlog_view.setHtml(QtGui.QApplication.translate("MainWindow", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
         "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Not implemented</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
+        "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
+        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Sans Serif\'; font-size:9pt;\">Not implemented</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
         self.cb_chatlog.addItem(QtGui.QApplication.translate("MainWindow", "Not implemented", None, QtGui.QApplication.UnicodeUTF8))
         self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_sub_chatlogs), QtGui.QApplication.translate("MainWindow", "Chat logs", None, QtGui.QApplication.UnicodeUTF8))
         self.gb_documents.setTitle(QtGui.QApplication.translate("MainWindow", "Browse journals and notes", None, QtGui.QApplication.UnicodeUTF8))
@@ -1352,13 +1352,13 @@
         self.tabwidget.setTabText(self.tabwidget.indexOf(self.tab_browse), QtGui.QApplication.translate("MainWindow", "Browse", None, QtGui.QApplication.UnicodeUTF8))
         self.tb_abouttext.setHtml(QtGui.QApplication.translate("MainWindow", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
         "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
-        "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
+        "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
+        "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Sans Serif\'; font-size:9pt;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
         self.tabwidget_about.setTabText(self.tabwidget_about.indexOf(self.tab_sub_about), QtGui.QApplication.translate("MainWindow", "About pyMoul", None, QtGui.QApplication.UnicodeUTF8))
         self.tb_license.setHtml(QtGui.QApplication.translate("MainWindow", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
         "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
-        "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
+        "</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
+        "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'Sans Serif\'; font-size:9pt;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
         self.tabwidget_about.setTabText(self.tabwidget_about.indexOf(self.tab_sub_license), QtGui.QApplication.translate("MainWindow", "License", None, QtGui.QApplication.UnicodeUTF8))
         self.tabwidget.setTabText(self.tabwidget.indexOf(self.tab_about), QtGui.QApplication.translate("MainWindow", "About", None, QtGui.QApplication.UnicodeUTF8))
 
Modified: pymoul/trunk/src/moul/qt/ui/mainwindow.ui
===================================================================
--- pymoul/trunk/src/moul/qt/ui/mainwindow.ui	2007-03-15 08:39:32 UTC (rev 258)
+++ pymoul/trunk/src/moul/qt/ui/mainwindow.ui	2007-03-15 08:43:34 UTC (rev 259)
@@ -110,7 +110,7 @@
      <enum>QTabWidget::North</enum>
     </property>
     <property name="currentIndex" >
-     <number>3</number>
+     <number>0</number>
     </property>
     <widget class="QWidget" name="tab_tasks" >
      <attribute name="title" >
@@ -1513,7 +1513,7 @@
        </rect>
       </property>
       <property name="currentIndex" >
-       <number>2</number>
+       <number>0</number>
       </property>
       <widget class="QWidget" name="tab_time_dni" >
        <attribute name="title" >
@@ -2080,7 +2080,7 @@
         <property name="title" >
          <string>Eder Gira day cycle</string>
         </property>
-        <widget class="QWidget" name="" >
+        <widget class="QWidget" name="layoutWidget" >
          <property name="geometry" >
           <rect>
            <x>7</x>
@@ -2320,8 +2320,8 @@
          <property name="html" >
           <string><html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Not implemented</p></body></html></string>
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;">Not implemented</p></body></html></string>
          </property>
          <property name="textInteractionFlags" >
           <enum>Qt::TextSelectableByMouse</enum>
@@ -2564,8 +2564,8 @@
         <property name="html" >
          <string><html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html></string>
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p></body></html></string>
         </property>
         <property name="textInteractionFlags" >
          <enum>Qt::TextBrowserInteraction</enum>
@@ -2591,8 +2591,8 @@
         <property name="html" >
          <string><html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html></string>
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"></p></body></html></string>
         </property>
         <property name="textInteractionFlags" >
          <enum>Qt::TextSelectableByMouse</enum>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-15 08:39:32
      
     
   | 
Revision: 258
          http://pymoul.svn.sourceforge.net/pymoul/?rev=258&view=rev
Author:   tiran
Date:     2007-03-15 01:39:32 -0700 (Thu, 15 Mar 2007)
Log Message:
-----------
Unit test fixes for Windows
Modified Paths:
--------------
    binaryfile/trunk/src/binaryfile/tests.py
Modified: binaryfile/trunk/src/binaryfile/tests.py
===================================================================
--- binaryfile/trunk/src/binaryfile/tests.py	2007-03-15 08:07:10 UTC (rev 257)
+++ binaryfile/trunk/src/binaryfile/tests.py	2007-03-15 08:39:32 UTC (rev 258)
@@ -39,15 +39,16 @@
 
 class BinaryFileTest(unittest.TestCase):
     def setUp(self):
-        self.tmpname = mkstemp()[1]
+        hndl, self.tmpname = mkstemp()
+        os.close(hndl)
         self.b = BinaryFile(self.tmpname, 'wb+')
 
     def tearDown(self):
         self.b.close()
+        del self.b
         os.unlink(self.tmpname)
 
     def _testrw(self, name, data):
-        #import pdb; pdb.set_trace()
         read = getattr(self.b, 'read%s' % name)
         write = getattr(self.b, 'write%s' % name)
         write(data)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-15 08:07:09
      
     
   | 
Revision: 257
          http://pymoul.svn.sourceforge.net/pymoul/?rev=257&view=rev
Author:   tiran
Date:     2007-03-15 01:07:10 -0700 (Thu, 15 Mar 2007)
Log Message:
-----------
Beta* servers are aliases for 04
Modified Paths:
--------------
    pymoul/trunk/src/moul/server/serverlist.py
Modified: pymoul/trunk/src/moul/server/serverlist.py
===================================================================
--- pymoul/trunk/src/moul/server/serverlist.py	2007-03-15 08:06:34 UTC (rev 256)
+++ pymoul/trunk/src/moul/server/serverlist.py	2007-03-15 08:07:10 UTC (rev 257)
@@ -24,8 +24,8 @@
 PORT = 14617
 
 SERVER_LIST = [
-    'beta-auth.urulive.com',
-    'beta-file.urulive.com',
+    #'beta-auth.urulive.com', # alias for uruapp-cw04
+    #'beta-file.urulive.com', # alias for uruapp-cw04
     #'bogus.foo.bar',
     #'www.mystonline.com',
     'uruapp-cw01.ibs.aol.com',
@@ -74,3 +74,4 @@
 
 if __name__ == '__main__':
     _ping()
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-15 08:06:33
      
     
   | 
Revision: 256
          http://pymoul.svn.sourceforge.net/pymoul/?rev=256&view=rev
Author:   tiran
Date:     2007-03-15 01:06:34 -0700 (Thu, 15 Mar 2007)
Log Message:
-----------
Suppress more headers
Modified Paths:
--------------
    enumprocess/trunk/src/enumprocess/processinfo.py
Modified: enumprocess/trunk/src/enumprocess/processinfo.py
===================================================================
--- enumprocess/trunk/src/enumprocess/processinfo.py	2007-03-15 07:10:46 UTC (rev 255)
+++ enumprocess/trunk/src/enumprocess/processinfo.py	2007-03-15 08:06:34 UTC (rev 256)
@@ -152,7 +152,7 @@
     """
     __slots__ = ()
 
-    # -e: Select all processes
+    # -A: Select all processes
     # -w twice: unlimited width
     # -o: format
     CMD = "ps -w -w "
@@ -247,8 +247,11 @@
                 return None
             else:
                 lines = popen.stdout.readlines()
-                if 'PID' in lines[0] or 'CMD' in lines[0]:
-                    lines.pop(0)
+                # PID, CMD, UCOMM, COMMAND
+                for s in ('PID', 'CMD', 'COMM'):
+                    if s in lines[0]:
+                        lines.pop(0)
+                        break
                 return lines
 
 class LinuxProcReader(object):
@@ -483,3 +486,4 @@
     unittest.main(defaultTest="test_suite")
     print getPids()
     print getPidNames()
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-15 07:10:51
      
     
   | 
Revision: 255
          http://pymoul.svn.sourceforge.net/pymoul/?rev=255&view=rev
Author:   tiran
Date:     2007-03-15 00:10:46 -0700 (Thu, 15 Mar 2007)
Log Message:
-----------
Refactored unit tests for single app
Modified Paths:
--------------
    pymoul/trunk/src/moul/osdependent/tests/test_singleapp.py
Modified: pymoul/trunk/src/moul/osdependent/tests/test_singleapp.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/tests/test_singleapp.py	2007-03-14 16:04:32 UTC (rev 254)
+++ pymoul/trunk/src/moul/osdependent/tests/test_singleapp.py	2007-03-15 07:10:46 UTC (rev 255)
@@ -29,19 +29,17 @@
 from doctest import DocTestSuite
 from shutil import rmtree
 from subprocess import Popen
+from subprocess import PIPE
 
 from moul.osdependent.singleapp import LOCK_SH, LOCK_NB
 from moul.osdependent.singleapp import SimpleSingleApp
 from moul.osdependent.singleapp import lock
 from moul.osdependent.singleapp import unlock
 
-tmpdir = tempfile.mkdtemp()
-testfile = os.path.join(tmpdir, 'test.lck')
-
 if os.name == 'nt':
     rmcmd = "cmd /c del %(testfile)s"
 else:
-    rmcmd = ("LC_ALL=C %(exe)s -c 'from fcntl import *; "
+    rmcmd = ("%(exe)s -c 'from fcntl import *; "
              "fd = open(%(testfile)s, %(mode)s); "
              "lockf(fd, LOCK_EX | LOCK_NB)'" % {'exe' : sys.executable,
              'mode' : '"a+"', 'testfile' : '"%(testfile)s"'})
@@ -66,20 +64,17 @@
 
    def test_locking(self):
         FLAGS = LOCK_SH | LOCK_NB
-        fd = open(testfile, 'w+')
+        fd = tempfile.NamedTemporaryFile(mode='w+', suffix='lck')
+        testfile = fd.name
         fd.write('testdata')
         fd.flush()
         self.failUnless(os.path.isfile(testfile))
         lock(fd, FLAGS)
-        # Try to delete the file from another process
-        stdout = tempfile.TemporaryFile(mode="w+")
-        stderr = tempfile.TemporaryFile(mode="w+")
-        popen = Popen(rmcmd % {'testfile' : testfile}, stdout=stdout,
-                      stderr=stderr, shell=True)
+        popen = Popen(rmcmd % {'testfile' : testfile}, stdout=PIPE,
+                      stderr=PIPE, shell=True, env = {'LC_ALL' : 'C'})
  
         popen.wait()
-        stdout.seek(0)
-        out = stdout.read()
+        out = popen.stdout.read()
         if os.name == 'nt':
             self.failUnlessEqual(out, '')
         elif os.name =='posix':
@@ -87,19 +82,17 @@
         else:
             raise OSError("unsupported os")
 
-        stderr.seek(0)
-        err = stderr.read()
+        err = popen.stderr.read()
         if os.name == 'nt':
-            self.failUnless('IOError: [Errno 11] Resource temporarily unavailable' in err)
+            self.failUnless('IOError: [Errno 11] Resource temporarily unavailable' in err, err)
         elif os.name =='posix':
-            self.failUnless('IOError: [Errno 11] Resource temporarily unavailable' in err)
+            self.failUnless('IOError: [Errno 11] Resource temporarily unavailable' in err, err)
         else:
             raise OSError("unsupported os")
 
         self.failUnless(os.path.isfile(testfile))
         unlock(fd)
         fd.close()
-        rmtree(tmpdir)
 
 def test_suite():
     return unittest.TestSuite((
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-14 16:04:44
      
     
   | 
Revision: 254
          http://pymoul.svn.sourceforge.net/pymoul/?rev=254&view=rev
Author:   tiran
Date:     2007-03-14 09:04:32 -0700 (Wed, 14 Mar 2007)
Log Message:
-----------
More BSD compatibility
Modified Paths:
--------------
    enumprocess/trunk/PKG-INFO
    enumprocess/trunk/README.txt
    enumprocess/trunk/src/enumprocess/processinfo.py
    enumprocess/trunk/src/enumprocess.egg-info/PKG-INFO
    enumprocess/trunk/src/enumprocess.egg-info/SOURCES.txt
Modified: enumprocess/trunk/PKG-INFO
===================================================================
--- enumprocess/trunk/PKG-INFO	2007-03-14 00:17:31 UTC (rev 253)
+++ enumprocess/trunk/PKG-INFO	2007-03-14 16:04:32 UTC (rev 254)
@@ -1,6 +1,6 @@
 Metadata-Version: 1.0
 Name: enumprocess
-Version: 0.1
+Version: 0.1.1
 Summary: enumprocess: list pids and processes
 Home-page: http://sourceforge.net/projects/pymoul/
 Author: Christian Heimes
@@ -11,7 +11,7 @@
         TODO: long description
         
 Keywords: pid,process,enum,proc,ps,psapi
-Platform: Independant
+Platform: Independent
 Classifier: Development Status :: 4 - Beta
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: BSD License
Modified: enumprocess/trunk/README.txt
===================================================================
--- enumprocess/trunk/README.txt	2007-03-14 00:17:31 UTC (rev 253)
+++ enumprocess/trunk/README.txt	2007-03-14 16:04:32 UTC (rev 254)
@@ -14,4 +14,19 @@
 getPids() - list of ints/longs
 getPidNames() - mapping pid -> name
 getPidDetails(pid) - detailed informations about a process
-getPidDetails('self') - detailed informations about current process
\ No newline at end of file
+getPidDetails('self') - detailed informations about current process
+
+Authors
+=======
+
+Christian Heimes
+
+ * primary developer and maintainer
+
+Walt Scrivens
+
+ * Mac/BSD support and tester
+
+The Windows implementation is based on Eric Koome's example: 
+http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/305279
+
Modified: enumprocess/trunk/src/enumprocess/processinfo.py
===================================================================
--- enumprocess/trunk/src/enumprocess/processinfo.py	2007-03-14 00:17:31 UTC (rev 253)
+++ enumprocess/trunk/src/enumprocess/processinfo.py	2007-03-14 16:04:32 UTC (rev 254)
@@ -152,13 +152,13 @@
     """
     __slots__ = ()
 
-    # -e: every process
+    # -e: Select all processes
     # -w twice: unlimited width
-    # -O: format
-    CMD = "ps"
-    PIDNAMES = CMD + " -e -o pid,comm"
-    PIDS = CMD + " -e -o pid"
-    PIDDETAILS = CMD + " -p %i -o comm"
+    # -o: format
+    CMD = "ps -w -w "
+    PIDS = CMD + "-A -o pid"
+    PIDNAMES = CMD + "-A -o pid,ucomm"
+    PIDDETAILS = CMD + "-p %i -o ucomm"
 
     @classmethod
     def supported(cls):
Modified: enumprocess/trunk/src/enumprocess.egg-info/PKG-INFO
===================================================================
--- enumprocess/trunk/src/enumprocess.egg-info/PKG-INFO	2007-03-14 00:17:31 UTC (rev 253)
+++ enumprocess/trunk/src/enumprocess.egg-info/PKG-INFO	2007-03-14 16:04:32 UTC (rev 254)
@@ -1,6 +1,6 @@
 Metadata-Version: 1.0
 Name: enumprocess
-Version: 0.1
+Version: 0.1.1
 Summary: enumprocess: list pids and processes
 Home-page: http://sourceforge.net/projects/pymoul/
 Author: Christian Heimes
@@ -11,7 +11,7 @@
         TODO: long description
         
 Keywords: pid,process,enum,proc,ps,psapi
-Platform: Independant
+Platform: Independent
 Classifier: Development Status :: 4 - Beta
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: BSD License
Modified: enumprocess/trunk/src/enumprocess.egg-info/SOURCES.txt
===================================================================
--- enumprocess/trunk/src/enumprocess.egg-info/SOURCES.txt	2007-03-14 00:17:31 UTC (rev 253)
+++ enumprocess/trunk/src/enumprocess.egg-info/SOURCES.txt	2007-03-14 16:04:32 UTC (rev 254)
@@ -3,6 +3,7 @@
 LICENSE.txt
 MANIFEST.in
 Makefile
+PKG-INFO
 README.txt
 ez_setup.py
 setup.py
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-14 00:17:30
      
     
   | 
Revision: 253
          http://pymoul.svn.sourceforge.net/pymoul/?rev=253&view=rev
Author:   tiran
Date:     2007-03-13 17:17:31 -0700 (Tue, 13 Mar 2007)
Log Message:
-----------
Hopefully another fix for BSD
Modified Paths:
--------------
    enumprocess/trunk/src/enumprocess/processinfo.py
Modified: enumprocess/trunk/src/enumprocess/processinfo.py
===================================================================
--- enumprocess/trunk/src/enumprocess/processinfo.py	2007-03-13 19:57:19 UTC (rev 252)
+++ enumprocess/trunk/src/enumprocess/processinfo.py	2007-03-14 00:17:31 UTC (rev 253)
@@ -156,9 +156,9 @@
     # -w twice: unlimited width
     # -O: format
     CMD = "ps"
-    PIDNAMES = CMD + " -e -o pid,ucmd"
+    PIDNAMES = CMD + " -e -o pid,comm"
     PIDS = CMD + " -e -o pid"
-    PIDDETAILS = CMD + " -p %i -o ucmd"
+    PIDDETAILS = CMD + " -p %i -o comm"
 
     @classmethod
     def supported(cls):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-13 19:57:21
      
     
   | 
Revision: 252
          http://pymoul.svn.sourceforge.net/pymoul/?rev=252&view=rev
Author:   tiran
Date:     2007-03-13 12:57:19 -0700 (Tue, 13 Mar 2007)
Log Message:
-----------
Update XXX report and Makefile
Fixed some comments in Dni time
Modified Paths:
--------------
    pymoul/trunk/Makefile.in
    pymoul/trunk/doc/XXXreport.html
    pymoul/trunk/src/moul/qt/ui/mainwindow.py
    pymoul/trunk/src/moul/time/dni.py
Modified: pymoul/trunk/Makefile.in
===================================================================
--- pymoul/trunk/Makefile.in	2007-03-13 15:37:27 UTC (rev 251)
+++ pymoul/trunk/Makefile.in	2007-03-13 19:57:19 UTC (rev 252)
@@ -29,7 +29,7 @@
 bdist_egg:
 	PYTHONPATH="src" $(PYTHON) setup.py $(SETUPFLAGS) bdist_egg
 
-run: ui
+run: inplace ui
 	PYTHONPATH="src" $(PYTHON) src/moul/qt/moulqt.py
 
 exerun: ui py2exe
Modified: pymoul/trunk/doc/XXXreport.html
===================================================================
--- pymoul/trunk/doc/XXXreport.html	2007-03-13 15:37:27 UTC (rev 251)
+++ pymoul/trunk/doc/XXXreport.html	2007-03-13 19:57:19 UTC (rev 252)
@@ -3,11 +3,11 @@
 
 <body>
 <h1>pyMoul - Developer report tools: XXX/TODO/FIXME comments</h1>
-<p>Generated on Fri, 09 Mar 2007 17:18:53 CET, based on Zope 3's XXX report</p>
+<p>Generated on Mon, 12 Mar 2007 11:58:47 CET, based on Zope 3's XXX report</p>
 <hr>
 <h3>Summary</h3>
 <p>
- There are currently 92 XXX/TODO/FIXME comments.
+ There are currently 88 XXX/TODO/FIXME comments.
 </p>
 <hr/>
 <h3>Listing</h3>
@@ -317,14 +317,14 @@
 base-47-base-158-    pass
 base-48-base-159-
 base-49-base-160-class Constrain(object):
-base:50:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-51-base-555-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-52-base-556-        # microphon missing -> OS mixer
-base-53-base-557-        }
-base:54:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-55-base-643-
-base-56-base-644-class GraphicsIni(ConfFile):
-base-57-base-645-    _filename = 'graphics.ini'
+base:50:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:556</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
+base-51-base-557-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
+base-52-base-558-        # microphon missing -> OS mixer
+base-53-base-559-        }
+base:54:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:644</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
+base-55-base-645-
+base-56-base-646-class GraphicsIni(ConfFile):
+base-57-base-647-    _filename = 'graphics.ini'
 base:58:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/directory.py.svn-base:59</b><br/><pre>        # TODO: fnmatch
 base-59-base-60-        return len([name for name in os.listdir(path)
 base-60-base-61-                    if os.path.isfile(os.path.join(path, name))])
@@ -338,7 +338,7 @@
 base-68-base-116-class AudioIniTest(GenericIniTest):
 base-69-base-117-    enc = aud_enc
 base:70:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:152</b><br/><pre>        #XXX self.failIf(p.isChanged())
-base-71-base-153-        
+base-71-base-153-
 base-72-base-154-        p.screenres = 0
 base-73-base-155-        eq(p._get('Graphics.Width'), 800)
 base:74:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/utils.py.svn-base:80</b><br/><pre>    for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
@@ -354,1908 +354,2256 @@
 base-84-class AudioIniTest(GenericIniTest):
 base-85-    enc = aud_enc
 base:86:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:152</b><br/><pre>        #XXX self.failIf(p.isChanged())
-base-87-        
+base-87-
 base-88-        p.screenres = 0
 base-89-        eq(p._get('Graphics.Width'), 800)
-base:90:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py~:105</b><br/><pre>        # TODO: more
-base-91-
-base-92-    def test_publicapi_create(self):
-base-93-        inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
-base:94:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py~:116</b><br/><pre>        # TODO: more
-base-95-
-base-96-class AudioIniTest(GenericIniTest):
-base-97-    enc = aud_enc
-base:98:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py~:154</b><br/><pre>        #XXX self.failIf(p.isChanged())
-base-99-        
-base-100-        p.screenres = 0
-base-101-        eq(p._get('Graphics.Width'), 800)
-base:102:</pre></li><li><b>File: utilities/../src/moul/file/tests/utils.py:80</b><br/><pre>    for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
-base-103-        fd = open(os.path.join(path, fname), 'wb')
-base-104-        fd.write('dummy')
-base-105-        fd.close()
-base:106:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:216</b><br/><pre>        # TODO: inefficient, compare list with directory content
-base-107-        if not os.path.isdir(self._archivedir):
-base-108-            LOG.warning("%s is not a directory" % self._archivedir)
-base-109-            return
-base:110:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:112</b><br/><pre>        # XXX use struct
-base-111-        if header is None:
-base-112-            fd = self._fd
-base-113-            fd.seek(0)
-base:114:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:127</b><br/><pre>        # XXX use struct
-base-115-        if size is None:
-base-116-            size = self.getFileSize()
-base-117-        leading = 4* [None]
-base:118:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:267</b><br/><pre>                    # XXX: move checks to copy method!
-base-119-                    if not os.path.isfile(fixed):
-base-120-                        self._tocheck.append((ki, fixed))
-base-121-                        continue
-base:122:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:157</b><br/><pre>    # TODO: write me
-base-123-    pass
-base-124-
-base-125-class Constrain(object):
-base:126:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-127-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-128-        # microphon missing -> OS mixer
-base-129-        }
-base:130:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-131-
-base-132-class GraphicsIni(ConfFile):
-base-133-    _filename = 'graphics.ini'
-base:134:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:112</b><br/><pre>        # XXX use struct
-base-135-        if header is None:
-base-136-            fd = self._fd
-base-137-            fd.seek(0)
-base:138:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:127</b><br/><pre>        # XXX use struct
-base-139-        if size is None:
-base-140-            size = self.getFileSize()
-base-141-        leading = 4* [None]
-base:142:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:267</b><br/><pre>                    # XXX: move checks to copy method!
-base-143-                    if not os.path.isfile(fixed):
-base-144-                        self._tocheck.append((ki, fixed))
-base-145-                    else:
-base:146:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:157</b><br/><pre>    # TODO: write me
-base-147-    pass
-base-148-
-base-149-class Constrain(object):
-base:150:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-151-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-152-        # microphon missing -> OS mixer
-base-153-        }
-base:154:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-155-
-base-156-class GraphicsIni(ConfFile):
-base-157-    _filename = 'graphics.ini'
-base:158:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py~:216</b><br/><pre>        # TODO: inefficient, compare list with directory content
-base-159-        if not os.path.isdir(self._archivedir):
-base-160-            LOG.warning("%s is not a directory" % self._archivedir)
-base-161-            return
-base:162:</pre></li><li><b>File: utilities/../src/moul/file/directory.py:59</b><br/><pre>        # TODO: fnmatch
-base-163-        return len([name for name in os.listdir(path)
-base-164-                    if os.path.isfile(os.path.join(path, name))])
-base-165-
-base:166:</pre></li><li><b>File: utilities/../src/moul/file/directory.py~:59</b><br/><pre>        # TODO: fnmatch
-base-167-        return len([name for name in os.listdir(path)
-base-168-                    if os.path.isfile(os.path.join(path, name))])
-base-169-
-base:170:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:76</b><br/><pre>    # XXX: dos format
-base-171-base-77-    return data.replace("\r\n", "\n")
-base-172-base-78-
-base-173-base-79-def encryptWDYS(instr, fout):
-base:174:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:86</b><br/><pre>    # XXX: dos format
-base-175-base-87-    instr = instr.replace("\n", "\r\n")
-base-176-base-88-    fout.seek(0)
-base-177-base-89-    fout.write(HEADER)
-base:178:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/elf.py.svn-base:28</b><br/><pre># TODO: use BinaryFile
-base-179-base-29-
-base-180-base-30-def list2int(lst):
-base-181-base-31-    return [ord(s) for s in lst]
-base:182:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/elf.py.svn-base:72</b><br/><pre>    # XXX NotImplemented
-base-183-base-73-    raise NotImplementedError
-base-184-base-74-    
-base-185-base-75-def decipher(crypt, size, key):
-base:186:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/binary.py.svn-base:293</b><br/><pre>        if size > 1024: # XXX: ???
-base-187-base-294-            raise ValueError("string is too long: %i" % size)
-base-188-base-295-        if self.version == 5:
-base-189-base-296-            size |= 0xF000
-base:190:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/binary.py.svn-base:315</b><br/><pre>        if size > 1024: # XXX: ???
-base-191-base-316-            raise ValueError("size '%i' > 1024 at position %s(%s)" % 
-base-192-base-317-                             (size, fd.tell(), repr(fd)))
-base-193-base-318-        if self.version == 5:
-base:194:base:319:            # XXX: testme
-base-195-base-320-            # read data as tuple of integeres
-base-196-base-321-            data = fd.readPacked("<%iI" % size)
-base-197-base-322-            # OR integers with 0xff and write their char equivalent to string
-base:198:</pre></li><li><b>File: utilities/../src/moul/crypt/tests/.svn/text-base/test_binary.py.svn-base:98</b><br/><pre>        # XXX: no test data
-base-199-base-99-        pass
-base-200-base-100-
-base-201-base-101-    def test_string0(self):
-base:202:</pre></li><li><b>File: utilities/../src/moul/crypt/tests/test_binary.py:98</b><br/><pre>        # XXX: no test data
-base-203-        pass
-base-204-
-base-205-    def test_string0(self):
-base:206:</pre></li><li><b>File: utilities/../src/moul/crypt/tests/test_binary.py~:98</b><br/><pre>        # XXX: no test data
-base-207-        pass
-base-208-
-base-209-    def test_string0(self):
-base:210:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:76</b><br/><pre>    # XXX: dos format
-base-211-    return data.replace("\r\n", "\n")
-base-212-
-base-213-def encryptWDYS(instr, fout):
-base:214:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:86</b><br/><pre>    # XXX: dos format
-base-215-    instr = instr.replace("\n", "\r\n")
-base-216-    fout.seek(0)
-base-217-    fout.write(HEADER)
-base:218:</pre></li><li><b>File: utilities/../src/moul/crypt/binary.py~:293</b><br/><pre>        if size > 1024: # XXX: ???
-base-219-            raise ValueError("string is too long: %i" % size)
-base-220-        if self.version == 5:
-base-221-            size |= 0xF000
-base:222:</pre></li><li><b>File: utilities/../src/moul/crypt/binary.py~:315</b><br/><pre>        if size > 1024: # XXX: ???
-base-223-            raise ValueError("size '%i' > 1024 at position %s(%s)" % 
-base-224-                             (size, fd.tell(), repr(fd)))
-base-225-        if self.version == 5:
-</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:229</b><br/><pre></pre></li><li><b>File: utilities/../src/moul/crypt/elf.py:28</b><br/><pre># TODO: use BinaryFile
-base-230-
-base-231-def list2int(lst):
-base-232-    return [ord(s) for s in lst]
-base:233:</pre></li><li><b>File: utilities/../src/moul/crypt/elf.py:72</b><br/><pre>    # XXX NotImplemented
-base-234-    raise NotImplementedError
-base-235-    
-base-236-def decipher(crypt, size, key):
-base:237:</pre></li><li><b>File: utilities/../src/moul/crypt/binary.py:293</b><br/><pre>        if size > 1024: # XXX: ???
-base-238-            raise ValueError("string is too long: %i" % size)
-base-239-        if self.version == 5:
-base-240-            size |= 0xF000
-base:241:</pre></li><li><b>File: utilities/../src/moul/crypt/binary.py:315</b><br/><pre>        if size > 1024: # XXX: ???
-base-242-            raise ValueError("size '%i' > 1024 at position %s(%s)" % 
-base-243-                             (size, fd.tell(), repr(fd)))
-base-244-        if self.version == 5:
-</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:248</b><br/><pre></pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:154</b><br/><pre>            # FIXME: signal doesn't do anything
-base-249-base-155-            self.emit(SIGNAL("close()"))
-base-250-base-156-            event.accept()
-base-251-base-157-        event.ignore()
-base:252:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:293</b><br/><pre>        del self._kiimage_threadlet# TODO: other message box
-base-253-base-294-        del self._kiimage_progressbar
-base-254-base-295-        self.pb_kiimage_repair.setEnabled(True)
-base-255-base-296-        mb = qtutils.infoMB(self,
-base:256:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:392</b><br/><pre>        # TODO: change timer from every second to every minute
-base-257-base-393-        self._timezone_timer = QtCore.QTimer(self)
-base-258-base-394-        self._timezone_timer.setInterval(1000) # 1 sec
-base:259:base:395:        # TODO: needs optimization? run only when timer tab is active
-base-260-base-396-        self.connect(self._timezone_timer, SIGNAL('timeout()'),
-base-261-base-397-                     self.on_timezone_timer_timeout)
-base-262-base-398-        self._timezone_timer.start()
-base:263:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:507</b><br/><pre>        # TODO: thread safety!
-base-264-base-508-        self.servers = servers
-base-265-base-509-        if not self.isRunning():
-base-266-base-510-            self.start()
-base:267:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:513</b><br/><pre>        # TODO: thread safety!
-base-268-base-514-        # emit a list of names first
-base-269-base-515-        for server in self.servers:
-base-270-base-516-            self.emit(SIGNAL("server(const QString&)"), server.name)
-base:271:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:551</b><br/><pre>        # TODO check this
-base-272-base-552-        self._running = False
-base-273-base-553-        self.condition.wakeAll()
-base-274-base-554-    
-base:275:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/errorhandler.py.svn-base:45</b><br/><pre>    # TODO: translation aware
-base-276-base-46-    LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
-base-277-base-47-    if getattr(sys, 'frozen', False):
-base-278-base-48-        try:
-base:279:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:154</b><br/><pre>            # FIXME: signal doesn't do anything
-base-280-            self.emit(SIGNAL("close()"))
-base-281-            event.accept()
-base-282-        event.ignore()
-base:283:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:293</b><br/><pre>        del self._kiimage_threadlet# TODO: other message box
-base-284-        del self._kiimage_progressbar
-base-285-        self.pb_kiimage_repair.setEnabled(True)
-base-286-        mb = qtutils.infoMB(self,
-base:287:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:392</b><br/><pre>        # TODO: change timer from every second to every minute
-base-288-        self._timezone_timer = QtCore.QTimer(self)
-base-289-        self._timezone_timer.setInterval(1000) # 1 sec
-base-290-        self.connect(self._timezone_timer, SIGNAL('timeout()'),
-</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:293</b><br/><pre></pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:507</b><br/><pre>        # TODO: thread safety!
-base-294-        self.servers = servers
-base-295-        if not self.isRunning():
-base-296-            self.start()
-base:297:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:513</b><br/><pre>        # TODO: thread safety!
-base-298-        # emit a list of names first
-base-299-        for server in self.servers:
-base-300-            self.emit(SIGNAL("server(const QString&)"), server.name)
-base:301:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:551</b><br/><pre>        # TODO check this
-base-302-        self._running = False
-base-303-        self.condition.wakeAll()
-base-304-    
-base:305:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:154</b><br/><pre>            # FIXME: signal doesn't do anything
-base-306-            self.emit(SIGNAL("close()"))
-base-307-            event.accept()
-base-308-        event.ignore()
-base:309:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:293</b><br/><pre>        del self._kiimage_threadlet# TODO: other message box
-base-310-        del self._kiimage_progressbar
-base-311-        self.pb_kiimage_repair.setEnabled(True)
-base-312-        mb = qtutils.infoMB(self,
-base:313:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:392</b><br/><pre>        # TODO: change timer from every second to every minute
-base-314-        self._timezone_timer = QtCore.QTimer(self)
-base-315-        self._timezone_timer.setInterval(1000) # 1 sec
-base-316-        self.connect(self._timezone_timer, SIGNAL('timeout()'),
-</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:319</b><br/><pre></pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:507</b><br/><pre>        # TODO: thread safety!
-base-320-        self.servers = servers
-base-321-        if not self.isRunning():
-base-322-            self.start()
-base:323:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:513</b><br/><pre>        # TODO: thread safety!
-base-324-        # emit a list of names first
-base-325-        for server in self.servers:
-base-326-            self.emit(SIGNAL("server(const QString&)"), server.name)
-base:327:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:551</b><br/><pre>        # TODO check this
-base-328-        self._running = False
-base-329-        self.condition.wakeAll()
-base-330-    
-base:331:</pre></li><li><b>File: utilities/../src/moul/qt/errorhandler.py:45</b><br/><pre>    # TODO: translation aware
-base-332-    LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
-base-333-    if getattr(sys, 'frozen', False):
-base-334-        try:
-base:335:</pre></li><li><b>File: utilities/../src/moul/osdependent/__init__.py:120</b><br/><pre># XXX: what about cygwin, bsd and others?
-base-336-_thismodule = sys.modules[__name__]
-base-337-if __WIN32__:
-base-338-    from moul.osdependent import win32 as osdep_win32
-base:339:</pre></li><li><b>File: utilities/../src/moul/osdependent/darwin/__init__.py:37</b><br/><pre>EXEC_NAME = "???" # XXX
-base-340-UPDATER = "Uru Live.app/Contents/Resources/Game.app/Contents/Resources/URU Live Updater.app/Contents/MacOS/URU Live Updater"
-base-341-LOCATIONS = [
-base-342-    "/Applications",
-base:343:</pre></li><li><b>File: utilities/../src/moul/osdependent/darwin/.svn/text-base/__init__.py.svn-base:37</b><br/><pre>EXEC_NAME = "???" # XXX
-base-344-base-38-UPDATER = "Uru Live.app/Contents/Resources/Game.app/Contents/Resources/URU Live Updater.app/Contents/MacOS/URU Live Updater"
-base-345-base-39-LOCATIONS = [
-base-346-base-40-    "/Applications",
-base:347:</pre></li><li><b>File: utilities/../src/moul/osdependent/darwin/__init__.py~:37</b><br/><pre>EXEC_NAME = "???" # XXX
-base-348-UPDATER = "Uru Live.app/Contents/Resources/Game.app/Contents/Resources/URU Live Updater.app/Contents/MacOS/URU Live Updater"
-base-349-LOCATIONS = [
-base-350-    "/Applications",
-base:351:</pre></li><li><b>File: utilities/../src/moul/osdependent/.svn/text-base/__init__.py.svn-base:120</b><br/><pre># XXX: what about cygwin, bsd and others?
-base-352-base-121-_thismodule = sys.modules[__name__]
-base-353-base-122-if __WIN32__:
-base-354-base-123-    from moul.osdependent import win32 as osdep_win32
-base:355:</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:14</b><br/><pre><ol><li><b>File: utilities/../.svn/text-base/test.py.svn-base:548</b><br/><pre>        # XXX bug: doctest may report several failures in one test, they are
-base-356-base-15-base-549-        #          separated by a horizontal dash line.  Only the first one of
-base-357-base-16-base-550-        #          them is now colorized properly.
-base-358-base-17-base-551-        header = lines[0]
-base:359:base:18:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:603</b><br/><pre>                # TODO: Scrape and colorize the traceback.
-base-360-base-19-base-604-                result.append(self.colorize('doctest_got', line))
-base-361-base-20-base-605-        elif remaining[0] == 'Differences (ndiff with -expected +actual):':
-base-362-base-21-base-606-            result.append(self.colorize('doctest_title', remaining.pop(0))) # E. raised:
-base:363:base:22:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:623</b><br/><pre>        # TODO: We only deal with the output from Zope 3's doctest module.
-base-364-base-23-base-624-        #       A colorizer for the Python's doctest module would be nice too.
-base-365-base-24-base-625-        if doctest:
-base-366-base-25-base-626-            # If we have a doctest, we do not care about this header.  All the
-base:367:base:26:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:690</b><br/><pre>                # TODO these should be hookable
-base-368-base-27-base-691-                from zope.tales.tales import TALESTracebackSupplement
-base-369-base-28-base-692-                from zope.pagetemplate.pagetemplate \
-base-370-base-29-base-693-                        import PageTemplateTracebackSupplement
-base:371:base:30:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/chatlog.py.svn-base:216</b><br/><pre>        # TODO: inefficient, compare list with directory content
-base-372-base-31-base-217-        if not os.path.isdir(self._archivedir):
-base-373-base-32-base-218-            LOG.warning("%s is not a directory" % self._archivedir)
-base-374-base-33-base-219-            return
-base:375:base:34:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:112</b><br/><pre>        # XXX use struct
-base-376-base-35-base-113-        if header is None:
-base-377-base-36-base-114-            fd = self._fd
-base-378-base-37-base-115-            fd.seek(0)
-base:379:base:38:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:127</b><br/><pre>        # XXX use struct
-base-380-base-39-base-128-        if size is None:
-base-381-base-40-base-129-            size = self.getFileSize()
-base-382-base-41-base-130-        leading = 4* [None]
-base:383:base:42:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:267</b><br/><pre>                    # XXX: move checks to copy method!
-base-384-base-43-base-268-                    if not os.path.isfile(fixed):
-base-385-base-44-base-269-                        self._tocheck.append((ki, fixed))
-base-386-base-45-base-270-                        continue
-base:387:base:46:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:157</b><br/><pre>    # TODO: write me
-base-388-base-47-base-158-    pass
-base-389-base-48-base-159-
-base-390-base-49-base-160-class Constrain(object):
-base:391:base:50:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-392-base-51-base-555-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-393-base-52-base-556-        # microphon missing -> OS mixer
-base-394-base-53-base-557-        }
-base:395:base:54:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-396-base-55-base-643-
-base-397-base-56-base-644-class GraphicsIni(ConfFile):
-base-398-base-57-base-645-    _filename = 'graphics.ini'
-base:399:base:58:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/directory.py.svn-base:59</b><br/><pre>        # TODO: fnmatch
-base-400-base-59-base-60-        return len([name for name in os.listdir(path)
-base-401-base-60-base-61-                    if os.path.isfile(os.path.join(path, name))])
-base-402-base-61-base-62-
-base:403:base:62:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:105</b><br/><pre>        # TODO: more
-base-404-base-63-base-106-
-base-405-base-64-base-107-    def test_publicapi_create(self):
-base-406-base-65-base-108-        inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
-base:407:base:66:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:116</b><br/><pre>        # TODO: more
-base-408-base-67-base-117-
-base-409-base-68-base-118-class AudioIniTest(GenericIniTest):
-base-410-base-69-base-119-    enc = aud_enc
-base:411:base:70:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:154</b><br/><pre>        #XXX self.failIf(p.isChanged())
-base-412-base-71-base-155-        
-base-413-base-72-base-156-        p.screenres = 0
-base-414-base-73-base-157-        eq(p._get('Graphics.Width'), 800)
-base:415:base:74:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/utils.py.svn-base:80</b><br/><pre>    for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
-base-416-base-75-base-81-        fd = open(os.path.join(path, fname), 'wb')
-base-417-base-76-base-82-        fd.write('dummy')
-base-418-base-77-base-83-        fd.close()
-base:419:base:78:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:105</b><br/><pre>        # TODO: more
-base-420-base-79-
-base-421-base-80-    def test_publicapi_create(self):
-base-422-base-81-        inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
-base:423:base:82:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:116</b><br/><pre>        # TODO: more
-base-424-base-83-
-base-425-base-84-class AudioIniTest(GenericIniTest):
-base-426-base-85-    enc = aud_enc
-base:427:base:86:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:154</b><br/><pre>        #XXX self.failIf(p.isChanged())
-base-428-base-87-        
-base-429-base-88-        p.screenres = 0
-base-430-base-89-        eq(p._get('Graphics.Width'), 800)
-base:431:base:90:</pre></li><li><b>File: utilities/../src/moul/file/tests/utils.py:80</b><br/><pre>    for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
-base-432-base-91-        fd = open(os.path.join(path, fname), 'wb')
-base-433-base-92-        fd.write('dummy')
-base-434-base-93-        fd.close()
-base:435:base:94:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:216</b><br/><pre>        # TODO: inefficient, compare list with directory content
-base-436-base-95-        if not os.path.isdir(self._archivedir):
-base-437-base-96-            LOG.warning("%s is not a directory" % self._archivedir)
-base-438-base-97-            return
-base:439:base:98:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:112</b><br/><pre>        # XXX use struct
-base-440-base-99-        if header is None:
-base-441-base-100-            fd = self._fd
-base-442-base-101-            fd.seek(0)
-base:443:base:102:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:127</b><br/><pre>        # XXX use struct
-base-444-base-103-        if size is None:
-base-445-base-104-            size = self.getFileSize()
-base-446-base-105-        leading = 4* [None]
-base:447:base:106:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:267</b><br/><pre>                    # XXX: move checks to copy method!
-base-448-base-107-                    if not os.path.isfile(fixed):
-base-449-base-108-                        self._tocheck.append((ki, fixed))
-base-450-base-109-                        continue
-base:451:base:110:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:157</b><br/><pre>    # TODO: write me
-base-452-base-111-    pass
-base-453-base-112-
-base-454-base-113-class Constrain(object):
-base:455:base:114:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-456-base-115-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-457-base-116-        # microphon missing -> OS mixer
-base-458-base-117-        }
-base:459:base:118:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-460-base-119-
-base-461-base-120-class GraphicsIni(ConfFile):
-base-462-base-121-    _filename = 'graphics.ini'
-base:463:base:122:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:112</b><br/><pre>        # XXX use struct
-base-464-base-123-        if header is None:
-base-465-base-124-            fd = self._fd
-base-466-base-125-            fd.seek(0)
-base:467:base:126:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:127</b><br/><pre>        # XXX use struct
-base-468-base-127-        if size is None:
-base-469-base-128-            size = self.getFileSize()
-base-470-base-129-        leading = 4* [None]
-base:471:base:130:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:267</b><br/><pre>                    # XXX: move checks to copy method!
-base-472-base-131-                    if not os.path.isfile(fixed):
-base-473-base-132-                        self._tocheck.append((ki, fixed))
-base-474-base-133-                    else:
-base:475:base:134:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:157</b><br/><pre>    # TODO: write me
-base-476-base-135-    pass
-base-477-base-136-
-base-478-base-137-class Constrain(object):
-base:479:base:138:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-480-base-139-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-481-base-140-        # microphon missing -> OS mixer
-base-482-base-141-        }
-base:483:base:142:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-484-base-143-
-base-485-base-144-class GraphicsIni(ConfFile):
-base-486-base-145-    _filename = 'graphics.ini'
-base:487:base:146:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py~:216</b><br/><pre>        # TODO: inefficient, compare list with directory content
-base-488-base-147-        if not os.path.isdir(self._archivedir):
-base-489-base-148-            LOG.warning("%s is not a directory" % self._archivedir)
-base-490-base-149-            return
-base:491:base:150:</pre></li><li><b>File: utilities/../src/moul/file/directory.py:59</b><br/><pre>        # TODO: fnmatch
-base-492-base-151-        return len([name for name in os.listdir(path)
-base-493-base-152-                    if os.path.isfile(os.path.join(path, name))])
-base-494-base-153-
-base:495:base:154:</pre></li><li><b>File: utilities/../src/moul/file/directory.py~:59</b><br/><pre>        # TODO: fnmatch
-base-496-base-155-        return len([name for name in os.listdir(path)
-base-497-base-156-                    if os.path.isfile(os.path.join(path, name))])
-base-498-base-157-
-base:499:base:158:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:77</b><br/><pre>    # XXX: dos format
-base-500-base-159-base-78-    return data.replace("\r\n", "\n")
-base-501-base-160-base-79-
-base-502-base-161-base-80-def encryptWDYS(instr, fout):
-base:503:base:162:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:87</b><br/><pre>    # XXX: dos format
-base-504-base-163-base-88-    instr = instr.replace("\n", "\r\n")
-base-505-base-164-base-89-    fout.seek(0)
-base-506-base-165-base-90-    fout.write(HEADER)
-base:507:base:166:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/elf.py.svn-base:71</b><br/><pre>    # XXX NotImplemented
-base-508-base-167-base-72-    raise NotImplementedError
-base-509-base-168-base-73-    
-base-510-base-169-base-74-def decipher(crypt, size, key):
-base:511:base:170:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:77</b><br/><pre>    # XXX: dos format
-base-512-base-171-    return data.replace("\r\n", "\n")
-base-513-base-172-
-base-514-base-173-def encryptWDYS(instr, fout):
-base:515:base:174:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:87</b><br/><pre>    # XXX: dos format
-base-516-base-175-    instr = instr.replace("\n", "\r\n")
-base-517-base-176-    fout.seek(0)
-base-518-base-177-    fout.write(HEADER)
-base:519:base:178:</pre></li><li><b>File: utilities/../src/moul/crypt/elf.py:71</b><br/><pre>    # XXX NotImplemented
-base-520-base-179-    raise NotImplementedError
-base-521-base-180-    
-base-522-base-181-def decipher(crypt, size, key):
-base:523:base:182:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:152</b><br/><pre>            # FIXME: signal doesn't do anything
-base-524-base-183-base-153-            self.emit(SIGNAL("close()"))
-base-525-base-184-base-154-            event.accept()
-base-526-base-185-base-155-        event.ignore()
-base:527:base:186:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:291</b><br/><pre>        del self._kiimage_threadlet# TODO: other message box
-base-528-base-187-base-292-        del self._kiimage_progressbar
-base-529-base-188-base-293-        self.pb_kiimage_repair.setEnabled(True)
-base-530-base-189-base-294-        mb = qtutils.infoMB(self,
-base:531:base:190:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:390</b><br/><pre>        # TODO: change timer from every second to every minute
-base-532-base-191-base-391-        self._timezone_timer = timer = QtCore.QTimer(self)
-base-533-base-192-base-392-        timer.setInterval(1000) # 1 sec
-base:534:base:193:base:393:        # TODO: needs optimization? run only when timer tab is active
-base-535-base-194-base-394-        self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
-base-536-base-195-base-395-        timer.start()
-base-537-base-196-base-396-
-base:538:base:197:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:487</b><br/><pre>        # TODO: thread safety!
-base-539-base-198-base-488-        self.servers = servers
-base-540-base-199-base-489-        if not self.isRunning():
-base-541-base-200-base-490-            self.start()
-base:542:base:201:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:493</b><br/><pre>        # TODO: thread safety!
-base-543-base-202-base-494-        # emit a list of names first
-base-544-base-203-base-495-        for server in self.servers:
-base-545-base-204-base-496-            self.emit(SIGNAL("server(const QString&)"), server.name)
-base:546:base:205:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:531</b><br/><pre>        # TODO check this
-base-547-base-206-base-532-        self._running = False
-base-548-base-207-base-533-        self.condition.wakeAll()
-base-549-base-208-base-534-    
-base:550:base:209:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/errorhandler.py.svn-base:45</b><br/><pre>    # TODO: translation aware
-base-551-base-210-base-46-    LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
-base-552-base-211-base-47-    if getattr(sys, 'frozen', False):
-base-553-base-212-base-48-        try:
-base:554:base:213:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:151</b><br/><pre>            # FIXME: signal doesn't do anything
-base-555-base-214-            self.emit(SIGNAL("close()"))
-base-556-base-215-            event.accept()
-base-557-base-216-        event.ignore()
-base:558:base:217:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:290</b><br/><pre>        del self._kiimage_threadlet# TODO: other message box
-base-559-base-218-        del self._kiimage_progressbar
-base-560-base-219-        self.pb_kiimage_repair.setEnabled(True)
-base-561-base-220-        mb = qtutils.infoMB(self,
-base:562:base:221:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:389</b><br/><pre>        # TODO: change timer from every second to every minute
-base-563-base-222-        self._timezone_timer = timer = QtCore.QTimer(self)
-base-564-base-223-        timer.setInterval(1000) # 1 sec
-base-565-base-224-        self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
-base:566:</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:227</b><br/><pre></pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:486</b><br/><pre>        # TODO: thread safety!
-base-567-base-228-        self.servers = servers
-base-568-base-229-        if not self.isRunning():
-base-569-base-230-            self.start()
-base:570:base:231:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:492</b><br/><pre>        # TODO: thread safety!
-base-571-base-232-        # emit a list of names first
-base-572-base-233-        for server in self.servers:
-base-573-base-234-            self.emit(SIGNAL("server(const QString&)"), server.name)
-base:574:base:235:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:530</b><br/><pre>        # TODO check this
-base-575-base-236-        self._running = False
-base-576-base-237-        self.condition.wakeAll()
-base-577-base-238-    
-base:578:base:239:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:152</b><br/><pre>            # FIXME: signal doesn't do anything
-base-579-base-240-            self.emit(SIGNAL("close()"))
-base-580-base-241-            event.accept()
-base-581-base-242-        event.ignore()
-base:582:base:243:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:291</b><br/><pre>        del self._kiimage_threadlet# TODO: other message box
-base-583-base-244-        del self._kiimage_progressbar
-base-584-base-245-        self.pb_kiimage_repair.setEnabled(True)
-base-585-base-246-        mb = qtutils.infoMB(self,
-base:586:base:247:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:390</b><br/><pre>        # TODO: change timer from every second to every minute
-base-587-base-248-        self._timezone_timer = timer = QtCore.QTimer(self)
-base-588-base-249-        timer.setInterval(1000) # 1 sec
-base-589-base-250-        self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
-base:590:</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:253</b><br/><pre></pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:487</b><br/><pre>        # TODO: thread safety!
-base-591-base-254-        self.servers = servers
-base-592-base-255-        if not self.isRunning():
-base-593-base-256-            self.start()
-base:594:base:257:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:493</b><br/><pre>        # TODO: thread safety!
-base-595-base-258-        # emit a list of names first
-base-596-base-259-        for server in self.servers:
-base-597-base-260-            self.emit(SIGNAL("server(const QString&)"), server.name)
-base:598:base:261:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:531</b><br/><pre>        # TODO check this
-base-599-base-262-        self._running = False
-base-600-base-263-        self.condition.wakeAll()
-base-601-base-264-    
-base:602:base:265:</pre></li><li><b>File: utilities/../src/moul/qt/errorhandler.py:45</b><br/><pre>    # TODO: translation aware
-base-603-base-266-    LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
-base-604-base-267-    if getattr(sys, 'frozen', False):
-base-605-base-268-        try:
-base:606:base:269:</pre></li><li><b>File: utilities/../src/moul/osdependent/__init__.py:120</b><br/><pre># XXX: what about cygwin, bsd and others?
-base-607-base-270-_thismodule = sys.modules[__name__]
-base-608-base-271-if __WIN32__:
-base-609-base-272-    from moul.osdependent import win32 as osdep_win32
-base:610:base:273:</pre></li><li><b>File: utilities/../src/moul/osdependent/.svn/text-base/__init__.py.svn-base:120</b><br/><pre># XXX: what about cygwin, bsd and others?
-base-611-base-274-base-121-_thismodule = sys.modules[__name__]
-base-612-base-275-base-122-if __WIN32__:
-base-613-base-276-base-123-    from moul.osdependent import win32 as osdep_win32
-base:614:base:277:</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:14</b><br/><pre><ol><li><b>File: utilities/../.svn/text-base/test.py.svn-base:548</b><br/><pre>        # XXX bug: doctest may report several failures in one test, they are
-base-615-base-278-base-15-base-549-        #          separated by a horizontal dash line.  Only the first one of
-base-616-base-279-base-16-base-550-        #          them is now colorized properly.
-base-617-base-280-base-17-base-551-        header = lines[0]
-base:618:base:281:base:18:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:603</b><br/><pre>                # TODO: Scrape and colorize the traceback.
-base-619-base-282-base-19-base-604-                result.append(self.colorize('doctest_got', line))
-base-620-base-283-base-20-base-605-        elif remaining[0] == 'Differences (ndiff with -expected +actual):':
-base-621-base-284-base-21-base-606-            result.append(self.colorize('doctest_title', remaining.pop(0))) # E. raised:
-base:622:base:285:base:22:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:623</b><br/><pre>        # TODO: We only deal with the output from Zope 3's doctest module.
-base-623-base-286-base-23-base-624-        #       A colorizer for the Python's doctest module would be nice too.
-base-624-base-287-base-24-base-625-        if doctest:
-base-625-base-288-base-25-base-626-            # If we have a doctest, we do not care about this header.  All the
-base:626:base:289:base:26:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:690</b><br/><pre>                # TODO these should be hookable
-base-627-base-290-base-27-base-691-                from zope.tales.tales import TALESTracebackSupplement
-base-628-base-291-base-28-base-692-                from zope.pagetemplate.pagetemplate \
-base-629-base-292-base-29-base-693-                        import PageTemplateTracebackSupplement
-base:630:base:293:base:30:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/chatlog.py.svn-base:208</b><br/><pre>        # TODO: inefficient, compare list with directory content
-base-631-base-294-base-31-base-209-        if not os.path.isdir(self._logdir):
-base-632-base-295-base-32-base-210-            LOG.warning("%s is not a directory" % logdir)
-base-633-base-296-base-33-base-211-        return
-base:634:base:297:base:34:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:112</b><br/><pre>        # XXX use struct
-base-635-base-298-base-35-base-113-        if header is None:
-base-636-base-299-base-36-base-114-            fd = self._fd
-base-637-base-300-base-37-base-115-            fd.seek(0)
-base:638:base:301:base:38:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:127</b><br/><pre>        # XXX use struct
-base-639-base-302-base-39-base-128-        if size is None:
-base-640-base-303-base-40-base-129-            size = self.getFileSize()
-base-641-base-304-base-41-base-130-        leading = 4* [None]
-base:642:base:305:base:42:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:267</b><br/><pre>                    # XXX: move checks to copy method!
-base-643-base-306-base-43-base-268-                    if not os.path.isfile(fixed):
-base-644-base-307-base-44-base-269-                        self._tocheck.append((ki, fixed))
-base-645-base-308-base-45-base-270-                        continue
-base:646:base:309:base:46:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:157</b><br/><pre>    # TODO: write me
-base-647-base-310-base-47-base-158-    pass
-base-648-base-311-base-48-base-159-
-base-649-base-312-base-49-base-160-class Constrain(object):
-base:650:base:313:base:50:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-651-base-314-base-51-base-555-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-652-base-315-base-52-base-556-        # microphon missing -> OS mixer
-base-653-base-316-base-53-base-557-        }
-base:654:base:317:base:54:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-655-base-318-base-55-base-643-
-base-656-base-319-base-56-base-644-class GraphicsIni(ConfFile):
-base-657-base-320-base-57-base-645-    _filename = 'graphics.ini'
-base:658:base:321:base:58:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/directory.py.svn-base:59</b><br/><pre>        # TODO: fnmatch
-base-659-base-322-base-59-base-60-        return len([name for name in os.listdir(path)
-base-660-base-323-base-60-base-61-                    if os.path.isfile(os.path.join(path, name))])
-base-661-base-324-base-61-base-62-
-base:662:base:325:base:62:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:105</b><br/><pre>        # TODO: more
-base-663-base-326-base-63-base-106-
-base-664-base-327-base-64-base-107-    def test_publicapi_create(self):
-base-665-base-328-base-65-base-108-        inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
-base:666:base:329:base:66:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:116</b><br/><pre>        # TODO: more
-base-667-base-330-base-67-base-117-
-base-668-base-331-base-68-base-118-class AudioIniTest(GenericIniTest):
-base-669-base-332-base-69-base-119-    enc = aud_enc
-base:670:base:333:base:70:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:154</b><br/><pre>        #XXX self.failIf(p.isChanged())
-base-671-base-334-base-71-base-155-        
-base-672-base-335-base-72-base-156-        p.screenres = 0
-base-673-base-336-base-73-base-157-        eq(p._get('Graphics.Width'), 800)
-base:674:base:337:base:74:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/utils.py.svn-base:80</b><br/><pre>    for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
-base-675-base-338-base-75-base-81-        fd = open(os.path.join(path, fname), 'wb')
-base-676-base-339-base-76-base-82-        fd.write('dummy')
-base-677-base-340-base-77-base-83-        fd.close()
-base:678:base:341:base:78:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:105</b><br/><pre>        # TODO: more
-base-679-base-342-base-79-
-base-680-base-343-base-80-    def test_publicapi_create(self):
-base-681-base-344-base-81-        inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
-base:682:base:345:base:82:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:116</b><br/><pre>        # TODO: more
-base-683-base-346-base-83-
-base-684-base-347-base-84-class AudioIniTest(GenericIniTest):
-base-685-base-348-base-85-    enc = aud_enc
-base:686:base:349:base:86:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:154</b><br/><pre>        #XXX self.failIf(p.isChanged())
-base-687-base-350-base-87-        
-base-688-base-351-base-88-        p.screenres = 0
-base-689-base-352-base-89-        eq(p._get('Graphics.Width'), 800)
-base:690:base:353:base:90:</pre></li><li><b>File: utilities/../src/moul/file/tests/utils.py:80</b><br/><pre>    for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
-base-691-base-354-base-91-        fd = open(os.path.join(path, fname), 'wb')
-base-692-base-355-base-92-        fd.write('dummy')
-base-693-base-356-base-93-        fd.close()
-base:694:base:357:base:94:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:208</b><br/><pre>        # TODO: inefficient, compare list with directory content
-base-695-base-358-base-95-        if not os.path.isdir(self._logdir):
-base-696-base-359-base-96-            LOG.warning("%s is not a directory" % logdir)
-base-697-base-360-base-97-        return
-base:698:base:361:base:98:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:112</b><br/><pre>        # XXX use struct
-base-699-base-362-base-99-        if header is None:
-base-700-base-363-base-100-            fd = self._fd
-base-701-base-364-base-101-            fd.seek(0)
-base:702:base:365:base:102:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:127</b><br/><pre>        # XXX use struct
-base-703-base-366-base-103-        if size is None:
-base-704-base-367-base-104-            size = self.getFileSize()
-base-705-base-368-base-105-        leading = 4* [None]
-base:706:base:369:base:106:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:267</b><br/><pre>                    # XXX: move checks to copy method!
-base-707-base-370-base-107-                    if not os.path.isfile(fixed):
-base-708-base-371-base-108-                        self._tocheck.append((ki, fixed))
-base-709-base-372-base-109-                        continue
-base:710:base:373:base:110:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:157</b><br/><pre>    # TODO: write me
-base-711-base-374-base-111-    pass
-base-712-base-375-base-112-
-base-713-base-376-base-113-class Constrain(object):
-base:714:base:377:base:114:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-715-base-378-base-115-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-716-base-379-base-116-        # microphon missing -> OS mixer
-base-717-base-380-base-117-        }
-base:718:base:381:base:118:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-719-base-382-base-119-
-base-720-base-383-base-120-class GraphicsIni(ConfFile):
-base-721-base-384-base-121-    _filename = 'graphics.ini'
-base:722:base:385:base:122:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:112</b><br/><pre>        # XXX use struct
-base-723-base-386-base-123-        if header is None:
-base-724-base-387-base-124-            fd = self._fd
-base-725-base-388-base-125-            fd.seek(0)
-base:726:base:389:base:126:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:127</b><br/><pre>        # XXX use struct
-base-727-base-390-base-127-        if size is None:
-base-728-base-391-base-128-            size = self.getFileSize()
-base-729-base-392-base-129-        leading = 4* [None]
-base:730:base:393:base:130:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:267</b><br/><pre>                    # XXX: move checks to copy method!
-base-731-base-394-base-131-                    if not os.path.isfile(fixed):
-base-732-base-395-base-132-                        self._tocheck.append((ki, fixed))
-base-733-base-396-base-133-                    else:
-base:734:base:397:base:134:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:157</b><br/><pre>    # TODO: write me
-base-735-base-398-base-135-    pass
-base-736-base-399-base-136-
-base-737-base-400-base-137-class Constrain(object):
-base:738:base:401:base:138:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:554</b><br/><pre>        'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-739-base-402-base-139-        'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-740-base-403-base-140-        # microphon missing -> OS mixer
-base-741-base-404-base-141-        }
-base:742:base:405:base:142:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:642</b><br/><pre>    # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-743-base-406-base-143-
-base-744-base-407-base-144-class GraphicsIni(ConfFile):
-base-745-base-408-base-145-    _filename = 'graphics.ini'
-base:746:base:409:base:146:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py~:208</b><br/><pre>        # TODO: inefficient, compare list with directory content
-base-747-base-410-base-147-        if not os.path.isdir(logdir):
-base-748-base-411-base-148-            LOG.warning("%s is not a directory" % logdir)
-base-749-base-412-base-149-        return
-base:750:base:413:base:150:</pre></li><li><b>File: utilities/../src/moul/file/directory.py:59</b><br/><pre>        # TODO: fnmatch
-base-751-base-414-base-151-        return len([name for name in os.listdir(path)
-base-752-base-415-base-152-                    if os.path.isfile(os.path.join(path, name))])
-base-753-base-416-base-153-
-base:754:base:417:base:154:</pre></li><li><b>File: utilities/../src/moul/file/directory.py~:59</b><br/><pre>        # TODO: fnmatch
-base-755-base-418-base-155-        return len([name for name in os.listdir(path)
-base-756-base-419-base-156-                    if os.path.isfile(os.path.join(path, name))])
-base-757-base-420-base-157-
-base:758:base:421:base:158:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:77</b><br/><pre>    # XXX: dos format
-base-759-base-422-base-159-base-78-    return data.replace("\r\n", "\n")
-base-760-base-423-base-160-base-79-
-base-761-base-424-base-161-base-80-def encryptWDYS(instr, fout):
-base:762:base:425:base:162:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:87</b><br/><pre>    # XXX: dos format
-base-763-base-426-base-163-base-88-    instr = instr.replace("\n", "\r\n")
-base-764-base-427-base-164-base-89-    fout.seek(0)
-base-765-base-428-base-165-base-90-    fout.write(HEADER)
-base:766:base:429:base:166:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/elf.py.svn-base:71</b><br/><pre>    # XXX NotImplemented
-base-767-base-430-base-167-base-72-    raise NotImplementedError
-base-768-base-431-base-168-base-73-    
-base-769-base-432-base-169-base-74-def decipher(crypt, size, key):
-base:770:base:433:base:170:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:77</b><br/><pre>    # XXX: dos format
-base-771-base-434-base-171-    return data.replace("\r\n", "\n")
-base-772-base-435-base-172-
-base-773-base-436-base-173-def encryptWDYS(instr, fout):
-base:774:base:437:base:174:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:87</b><br/><pre>    # XXX: dos format
-base-775-base-438-base-175-    instr = instr.replace("\n", "\r\n")
-base-776-base-439-base-176-    fout.seek(0)
-base-777-base-440-base-177-    fout.write(HEADER)
-base:778:base:441:base:178:</pre></li><li><b>File: utilities/../src/moul/crypt/elf.py:71</b><br/><pre>    # XXX NotImplemented
-base-779-base-442-base-179-    raise NotImplementedError
-base-780-base-443-base-180-    
-base-781-base-444-base-181-def decipher(crypt, size, key):
-base:782:base:445:base:182:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:149</b><br/><pre>            # FIXME: signal doesn't do anything
-base-783-base-446-base-183-base-150-            self.emit(SIGNAL("close()"))
-base-784-base-447-base-184-base-151-            event.accept()
-base-785-base-448-base-185-base-152-        event.ignore()
-base:786:base:449:base:186:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:250</b><br/><pre>        del self._kiimage_threadlet# TODO: other message box
-base-787-base-450-base-187-base-251-        del self._kiimage_progressbar
-base-788-base-451-base-188-base-252-        self.pb_kiimage_repair.setEnabled(True)
-base-789-base-452-base-189-base-253-        mb = qtutils.infoMB(self,
-base:790:base:453:base:190:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:345</b><br/><pre>        # TODO: change timer from every second to every minute
-base-791-base-454-base-191-base-346-        self._timezone_timer = timer = QtCore.QTimer(self)
-base-792-base-455-base-192-base-347-        timer.setInterval(1000) # 1 sec
-base:793:base:456:base:193:base:348:        # TODO: needs optimization? run only when timer tab is active
-base-794-base-457-base-194-base-349-        self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
-base-795-base-458-base-195-base-350-        timer.start()
-base-796-base-459-base-196-base-351-
-base:797:base:460:base:197:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:442</b><br/><pre>        # TODO: thread safety!
-base-798-base-461-base-198-base-443-        self.servers = servers
-base-799-base-462-base-199-base-444-        if not self.isRunning():
-base-800-base-463-base-200-base-445-            self.start()
-base:801:base:464:base:201:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:448</b><br/><pre>        # TODO: thread safety!
-base-802-base-465-base-202-base-449-        # emit a list of names first
-base-803-base-466-base-203-base-450-        for server in self.servers:
-base-804-base-467-base-204-base-451-            self.emit(SIGNAL("server(const QString&)"), server.name)
-base:8...
 
[truncated message content] | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-13 15:37:28
      
     
   | 
Revision: 251
          http://pymoul.svn.sourceforge.net/pymoul/?rev=251&view=rev
Author:   tiran
Date:     2007-03-13 08:37:27 -0700 (Tue, 13 Mar 2007)
Log Message:
-----------
Fixes for Mac support
compilui fix: prints Nothing to do when all files are up to date
Added Windows Quickstart to INSTALL.txt
Modified Paths:
--------------
    pymoul/trunk/INSTALL.txt
    pymoul/trunk/src/moul/osdependent/darwin/__init__.py
    pymoul/trunk/src/moul/osdependent/linux/__init__.py
    pymoul/trunk/utilities/compileui.py
Modified: pymoul/trunk/INSTALL.txt
===================================================================
--- pymoul/trunk/INSTALL.txt	2007-03-13 15:32:00 UTC (rev 250)
+++ pymoul/trunk/INSTALL.txt	2007-03-13 15:37:27 UTC (rev 251)
@@ -37,6 +37,21 @@
 Windows Installation
 ====================
 
+Quick Start
+-----------
+
+ * Grap the Qt4.2.2 DLL package from http://sourceforge.net/projects/pymoul
+
+ * Install Python 2.5, MinGW32 and the DLL files according to the INSTALL.txt
+
+ * Install PyQt4
+
+ * Set PATH and QT4DIR
+
+ * Invoke utilities\ez_setup.py with Python 2.5
+
+ * Start / Run: easy_install-2.5 -Z pytz
+
 Installation
 ------------
 
Modified: pymoul/trunk/src/moul/osdependent/darwin/__init__.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/darwin/__init__.py	2007-03-13 15:32:00 UTC (rev 250)
+++ pymoul/trunk/src/moul/osdependent/darwin/__init__.py	2007-03-13 15:37:27 UTC (rev 251)
@@ -48,20 +48,38 @@
     The MOUL data directory contains log files, chatlogs, KI images and many
     more things.
     """
-    moul_data = os.path.join(HOME, MOUL_DIR)
+    return os.path.join(HOME, MOUL_DIR)
 
 def getPyMoulDataDir():
     """Get path to the pyMoul ini directory
     """
-    inidir= os.path.join(HOME, PYMOUL_DIR)
-    return inidir
+    return os.path.join(HOME, PYMOUL_DIR)
 
+def getMoulInstallDir():
+    """Get path to MOUL install dir
+    """
+    for path in LOCATIONS:
+        if os.path.isfile(os.path.join(path, EXEC_NAME)):
+            LOG.info("Uru directory found: %s" % path)
+            return path
+    LOG.warning("Uru directory NOT found! Search path was: \n %s" % 
+                repr(LOCATIONS))
+    return 'INVALID'
+
 def startMoul(installdir, *args, **kwargs):
     """Start MOUL - returns a Popen instance
-    
+
     args are applied to the program while kwargs are applied to
     subprocess.Popen()
     """
     path = os.path.join(installdir, EXEC_NAME)
     args = ' '.join(args)
     return Popen("%s %s" % (path, args), cwd=installdir, **kwargs)
+
+def isMoulRunning():
+    """Test if MOUL or the launcher is running
+    """
+    for pid, name in getPidNames().items():
+        if name.lower() in PROCESSES:
+            return pid
+    return False
Modified: pymoul/trunk/src/moul/osdependent/linux/__init__.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/linux/__init__.py	2007-03-13 15:32:00 UTC (rev 250)
+++ pymoul/trunk/src/moul/osdependent/linux/__init__.py	2007-03-13 15:37:27 UTC (rev 251)
@@ -40,6 +40,7 @@
     "/media/d/games/MystOnline",
     "/usr/local/games/MystOnline"
     ]
+PYMOUL_DIR = '.pymoul'
 
 def getMoulUserDataDir():
     """Get path of MOUL data directory
@@ -52,8 +53,7 @@
 def getPyMoulDataDir():
     """Get path to the pyMoul ini directory
     """
-    inidir= os.path.join(HOME, '.pymoul')
-    return inidir
+    return os.path.join(HOME, PYMOUL_DIR)
 
 def getMoulInstallDir():
     """Get path to MOUL install dir
@@ -68,7 +68,7 @@
 
 def startMoul(installdir, *args, **kwargs):
     """Start MOUL - returns a Popen instance
-    
+
     args are applied to the program while kwargs are applied to
     subprocess.Popen()
     """
Modified: pymoul/trunk/utilities/compileui.py
===================================================================
--- pymoul/trunk/utilities/compileui.py	2007-03-13 15:32:00 UTC (rev 250)
+++ pymoul/trunk/utilities/compileui.py	2007-03-13 15:37:27 UTC (rev 251)
@@ -118,5 +118,8 @@
 
     print "Searching in %s" % os.path.abspath(sys.argv[1])
     pys = compileUi(sys.argv[1])
-    print "Python files written:"
-    print '\n'.join(pys)
+    if not pys:
+        print "Nothing to do."
+    else:
+        print "Python files written:"
+        print '\n'.join(pys)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 | 
| 
     
      
      
      From: <ti...@us...> - 2007-03-13 15:35:21
      
     
   | 
Revision: 249
          http://pymoul.svn.sourceforge.net/pymoul/?rev=249&view=rev
Author:   tiran
Date:     2007-03-13 08:09:57 -0700 (Tue, 13 Mar 2007)
Log Message:
-----------
BSD (and Mac) compatibility
Modified Paths:
--------------
    enumprocess/trunk/src/enumprocess/processinfo.py
Modified: enumprocess/trunk/src/enumprocess/processinfo.py
===================================================================
--- enumprocess/trunk/src/enumprocess/processinfo.py	2007-03-12 15:51:36 UTC (rev 248)
+++ enumprocess/trunk/src/enumprocess/processinfo.py	2007-03-13 15:09:57 UTC (rev 249)
@@ -152,9 +152,12 @@
     """
     __slots__ = ()
 
-    CMD = "ps -e --no-header --cols=1024"
-    PIDNAMES = "%s --format=pid,ucmd" % CMD
-    PIDS = "%s --format=pid" % CMD
+    # -e: every process
+    # -w twice: unlimited width
+    # -O: format
+    CMD = "ps -e -w -w"
+    PIDNAMES = "%s -O pid,ucmd" % CMD
+    PIDS = "%s -O pid" % CMD
 
     @classmethod
     def supported(cls):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 |