Bizarrerie Windows : il n'arrive pas à virer un fichier immédiatement après lui avoir...
[minwii.git] / src / minwii / logfilereader.py
index 44c3611..828b085 100755 (executable)
@@ -6,12 +6,14 @@ $Id$
 $URL$
 """
 
 $URL$
 """
 
+from types import StringTypes
 from widgets.playingscreen import PlayingScreenBase
 from eventutils import EventDispatcher
 from events import eventCodes
 from synth import Synth
 from musicxml import musicXml2Song
 import pygame
 from widgets.playingscreen import PlayingScreenBase
 from eventutils import EventDispatcher
 from events import eventCodes
 from synth import Synth
 from musicxml import musicXml2Song
 import pygame
+from backwardsfilereader import BackwardsReader
 
 SUPPORTED_FILE_HEADER = 'ENV winwii log format version : 1.0'
 
 
 SUPPORTED_FILE_HEADER = 'ENV winwii log format version : 1.0'
 
@@ -33,7 +35,7 @@ class LogFileReader(object) :
         """ logfile : chemin d'accès au fichier de log MinWii.
             le format supporté est actuellement la version 1.0 uniquement.
         """
         """ logfile : chemin d'accès au fichier de log MinWii.
             le format supporté est actuellement la version 1.0 uniquement.
         """
-        if isinstance(logfile, str) :
+        if isinstance(logfile, StringTypes) :
             self.logfile = open(logfile, 'r')
         else :
             self.logfile = logfile
             self.logfile = open(logfile, 'r')
         else :
             self.logfile = logfile
@@ -106,6 +108,18 @@ class LogFileReader(object) :
         firstTicks = int(l.split(None, 2)[1])
         return firstTicks
     
         firstTicks = int(l.split(None, 2)[1])
         return firstTicks
     
+    @inplaceread
+    def getLastEventTicks(self) :
+        "retourne le timecode du dernier événement (entier)"
+        for l in self.getBackwardLineIterator() :
+            if l.startswith('EVT ') :
+                break
+        else :
+            return None
+        
+        lastTicks = int(l.split(None, 2)[1])
+        return lastTicks
+    
     def __del__(self) :
         self.logfile.close()
     
     def __del__(self) :
         self.logfile.close()
     
@@ -139,6 +153,14 @@ class LogFileReader(object) :
                 ticks, eventName = l.split(None, 3)[1:]
                 ticks = int(ticks)
                 yield ticks, eventName, ''
                 ticks, eventName = l.split(None, 3)[1:]
                 ticks = int(ticks)
                 yield ticks, eventName, ''
+    
+    def getBackwardLineIterator(self) :
+        br = BackwardsReader(self.logfile, BLKSIZE=128)
+        line = br.readline()
+        while line :
+            yield line.strip()
+            line = br.readline()
+        
                 
 
 class LogFilePlayer(PlayingScreenBase) :
                 
 
 class LogFilePlayer(PlayingScreenBase) :