Audio/AudioControl: Commit loads of long uncommited changes
[audiocontrol.git] / Logger.py
index ab98615..93bc12e 100644 (file)
--- a/Logger.py
+++ b/Logger.py
@@ -2,13 +2,13 @@ import textwrap, time
 
 logger = None
 
-def init(viewmanager, x, y, dx, dy):
+def init(viewmanager, x, y, dx, dy, logfile=None):
     global logger
-    logger = Logger(viewmanager.win(), x, y, dx, dy)
+    logger = Logger(viewmanager.win(), x, y, dx, dy, logfile)
 
 class Logger(object):
 
-    def __init__(self, win, x, y, dx, dy):
+    def __init__(self, win, x, y, dx, dy, logfile=None):
         self._win = win.derwin(dy,dx,y,x)
         self._win.border()
         self._win.addstr(0,2,' Log ')
@@ -17,12 +17,19 @@ class Logger(object):
         self._textwin.scrollok(1)
         self._wrapper = textwrap.TextWrapper(width = dx-4,
                                              subsequent_indent = ' '*4)
+        if logfile:
+            self._logfile = file(logfile,"a")
+        else:
+            self._logfile = None
         
     def log(self, src, msg):
-        lines = self._wrapper.wrap(
-            '[%s] (%s) %s' %  (time.strftime("%H:%M:%S",time.localtime()),src, msg))
+        text = '[%s] (%s) %s' %  (time.strftime("%H:%M:%S",time.localtime()),src, msg)
+        if self._logfile:
+            self._logfile.write(text+"\n")
+        lines = self._wrapper.wrap(text)
+        lines = lines[max(0,len(lines)-self._textwin.getmaxyx()[0]):]
         self._textwin.scroll(len(lines))
-        for i in range(len(lines)):
+        for i in range(min(len(lines),self._textwin.getmaxyx()[0]-2)):
             self._textwin.addstr(self._textwin.getmaxyx()[0]-len(lines)+i,0,
                                  lines[i])
         self._textwin.nooutrefresh()