Ajout du mode improvisation.
[minwii.git] / src / minwii / logfilereader.py
index 828b085..a5a2d35 100755 (executable)
@@ -31,12 +31,12 @@ class LogFileReader(object) :
     classe utilitaire pour l'accès aux données d'un fichier de log MinWii.
     """
     
-    def __init__(self, logfile) :
+    def __init__(self, logfile, mode='r') :
         """ logfile : chemin d'accès au fichier de log MinWii.
             le format supporté est actuellement la version 1.0 uniquement.
         """
         if isinstance(logfile, StringTypes) :
-            self.logfile = open(logfile, 'r')
+            self.logfile = open(logfile, mode)
         else :
             self.logfile = logfile
         
@@ -121,7 +121,7 @@ class LogFileReader(object) :
         return lastTicks
     
     def __del__(self) :
-        self.logfile.close()
+        self.close()
     
     def __iter__(self) :
         return self
@@ -160,6 +160,39 @@ class LogFileReader(object) :
         while line :
             yield line.strip()
             line = br.readline()
+    
+    @inplaceread
+    def getMetadata(self) :
+        metadata = {}
+        self.next() # skip identification line.
+        line = self.next()
+        while line.startswith('METADATA ') :
+            line = line.split(None, 1)[1]
+            name, value = [v.strip() for v in line.split(':', 1)]
+            metadata[name] = value
+            line = self.next()
+        return metadata
+    
+    def setMetadata(self, metadata) :
+        f = self.logfile
+        f.seek(0)
+        before = f.readline()
+        line = f.readline()
+        while line.startswith('METADATA ') :
+            line = f.readline()
+        after = line + f.read()
+        
+        lines = []
+        for name, value in metadata :
+            lines.append('METADATA %s : %s' % (name, value.encode('utf-8')))
+        metadata = '\n'.join(lines)
+        f.seek(0)
+        f.write(before)
+        f.write(metadata)
+        f.write(after)
+    
+    def close(self) :
+        self.logfile.close()
         
                 
 
@@ -232,5 +265,4 @@ class LogFilePlayer(PlayingScreenBase) :
             previousTicks = ticks
         
         self.stop()
-        
     
\ No newline at end of file