]> git.neil.brown.name Git - plato.git/commitdiff
dialer: allow previously dialed numbers to be easily accessed.
authorNeilBrown <neilb@suse.de>
Mon, 14 Jan 2013 07:41:04 +0000 (18:41 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 14 Jan 2013 07:44:24 +0000 (18:44 +1100)
Just press 'backspace' when no number present and it goes to previous number.

Signed-off-by: NeilBrown <neilb@suse.de>
utils/dialer.py

index 0f67243ed61ab3209b2eb4c2efeed1edaf854cbc..3bb9587f9df7ef697fb73d187b0e10dac8b6381e 100644 (file)
@@ -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()