From: NeilBrown Date: Mon, 14 Jan 2013 07:41:04 +0000 (+1100) Subject: dialer: allow previously dialed numbers to be easily accessed. X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=89a23d7843b7e7af4c25b4d2511223decf161115;p=plato.git dialer: allow previously dialed numbers to be easily accessed. Just press 'backspace' when no number present and it goes to previous number. Signed-off-by: NeilBrown --- diff --git a/utils/dialer.py b/utils/dialer.py index 0f67243..3bb9587 100644 --- a/utils/dialer.py +++ b/utils/dialer.py @@ -71,6 +71,8 @@ class Dialer(gtk.Window): 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) @@ -150,6 +152,9 @@ class Dialer(gtk.Window): 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: @@ -168,10 +173,27 @@ class Dialer(gtk.Window): 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: @@ -330,5 +352,94 @@ class Dialer(gtk.Window): 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()