Audio/AudioControl: Lots of fixes
[audiocontrol.git] / TimeMachine.py
1 import Views, Actions
2 import subprocess, curses
3
4 class TimeMachine(Views.View):
5
6     def __init__(self, context, name, x, y, dx, dy, ports, dir, buffer):
7         Views.View.__init__(self, context, name, x, y, dx, dy)
8         nul = file("/dev/null","w")
9         self._tm = subprocess.Popen(["timemachine", "-i", "-t", str(buffer)] + list(ports), cwd=dir, 
10                                     stdin=subprocess.PIPE, stdout=nul, stderr=nul)
11         self._recording = False
12
13     def start(self):
14         if not self._recording:
15             self._tm.stdin.write("start\n")
16             self._recording = True
17             self._redraw()
18
19     def stop(self):
20         if self._recording:
21             self._tm.stdin.write("stop\n")
22             self._recording = False
23             self._redraw()
24
25     def toggle(self):
26         if self._recording:
27             self.stop()
28         else:
29             self.start()
30
31     def _redraw(self, refresh=True):
32         self.win().addstr(1,2,"Status: ")
33         if self._recording:
34             self.win().addstr(1,10, "RECORDING", curses.A_BOLD)
35         else:
36             self.win().addstr(1,10, "Idle     ")
37         if refresh:
38             self.win().refresh()
39
40     def updateView(self, bindings):
41         pass
42
43     def init(self):
44         Views.View.init(self)
45         self._redraw()
46
47 class ToggleRecord(Actions.Action):
48
49     def __init__(self, name, tm):
50         Actions.Action.__init__(self, name)
51         self._tm = tm
52
53     def __call__(self, binding):
54         self._tm.toggle()
55         
56     
57 def register(viewmanager, context, name, x, y, dx, dy, ports, dir, buffer):
58     tm = TimeMachine(context, name, x, y, dx, dy, ports, dir, buffer)
59     viewmanager.registerView(tm)
60     return tm
61