self.create_ui()
self.watch_clip('voice-dial')
+ self.outgoing = outgoing_list()
+
d = dnotify.dir('/var/run/gsm-state')
self.status_watcher = d.watch('status', self.check_status)
self.incoming_watcher = d.watch('incoming', self.check_incoming)
self.num.modify_text(gtk.STATE_NORMAL, gtk.gdk.color_parse("blue"))
if not self.oncall and key == '#' and self.num.get_text() == "":
key = '+'
+ sel = self.num.get_selection_bounds()
+ if sel:
+ self.num.delete_text(sel[0], sel[1])
self.num.insert_text(key, self.num.get_position())
self.num.set_position(self.num.get_position()+1)
if self.oncall:
if self.oncall:
self.endcall()
else:
+
p = self.num.get_position()
- if p > 0:
+ sel = self.num.get_selection_bounds()
+ if sel and sel[0]==0 and self.last_num and self.last_num < len(self.outgoing):
+ t = self.outgoing[self.last_num]
+ self.last_num+= 1
+ while (self.last_num + 1 < len(self.outgoing) and
+ self.outgoing[self.last_num][2] == t[2]):
+ self.last_num+= 1
+ self.num.set_text(t[2])
+ self.num.set_position(-1)
+ self.num.select_region(0, -1)
+ elif p > 0:
self.num.delete_text(p-1, p)
self.num.set_position(p-1)
+ else:
+ t = self.outgoing[0]
+ self.num.set_text(t[2])
+ self.num.set_position(-1)
+ self.last_num = 1
+ self.num.select_region(0, -1)
self.check_num_font()
n = self.num.get_text()
if len(n) <= 1:
record('dtmf',ch)
+import dnotify
+class incoming_list:
+ # present as a list of received calls
+ # and notify whenever it changes
+ # Each entry is a triple (start, end, number)
+ # start and end are (date, time)
+ def __init__(self, notify = None, file='incoming'):
+ self.list = []
+ self.notify = notify
+ self.watch = dnotify.dir("/var/log")
+ self.fwatch = self.watch.watch(file, self.changed)
+ self.changed()
+ def __len__(self):
+ return len(self.list)
+ def __getitem__(self, ind):
+ return self.list[-1-ind]
+ def flush_one(self, start, end, number):
+ if start:
+ self.lst.append((start, end, number))
+ def changed(self):
+ self.lst = []
+
+ try:
+ f = open("/var/log/incoming")
+ except IOError:
+ f = []
+ start = None; end=None; number=None
+ for l in f:
+ w = l.split()
+ if len(w) != 3:
+ continue
+ if w[2] == '-call-':
+ self.flush_one(start, end, number)
+ start = (w[0], w[1])
+ number = None; end = None
+ elif w[2] == '-end-':
+ end = (w[0], w[1])
+ self.flush_one(start, end, number)
+ start = None; end = None; number = None
+ else:
+ number = w[2]
+ if not start:
+ start = (w[0], w[1])
+ if number:
+ self.flush_one(start, end, number)
+ try:
+ f.close()
+ except AttributeError:
+ pass
+ self.list = self.lst
+ if self.notify:
+ self.notify()
+
+class outgoing_list(incoming_list):
+ # present similar list for outgoing calls
+ def __init__(self, notify = None):
+ incoming_list.__init__(self, notify, file='outgoing')
+
+ def changed(self):
+ self.lst = []
+ try:
+ f = open("/var/log/outgoing")
+ except IOError:
+ f = []
+ start = None; end=None; number=None
+ for l in f:
+ w = l.split()
+ if len(w) != 3:
+ continue
+ if w[2] == '-end-':
+ end = (w[0], w[1])
+ self.flush_one(start, end, number)
+ start = None; end = None; number = None
+ else:
+ self.flush_one(start, end, number)
+ start = (w[0], w[1])
+ number = w[2]
+ if number:
+ self.flush_one(start, end, number)
+ try:
+ f.close()
+ except AttributeError:
+ pass
+ self.list = self.lst
+ if self.notify:
+ self.notify()
+
+
+
o = Dialer()
gtk.main()