From: NeilBrown Date: Thu, 19 Dec 2013 23:47:33 +0000 (+1100) Subject: plato: add 'discrete' setting. X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=b5a4dd2940b98fa6bebc17c99652156476e2ae21;p=plato.git plato: add 'discrete' setting. This allows the phone to be set to silent for some number of minutes or hours. --- diff --git a/plato/plato_settings.py b/plato/plato_settings.py index 8fe7cac..5ff00e4 100644 --- a/plato/plato_settings.py +++ b/plato/plato_settings.py @@ -1,4 +1,4 @@ -import os, stat +import os, stat, time from subprocess import Popen class alert: @@ -11,7 +11,6 @@ class alert: self.embedded = lambda:None self.format = 'cmd' - self.timeout = None self.owner = owner try: self.mode = os.readlink("/etc/alert/normal") @@ -33,12 +32,75 @@ class alert: def get_name(self): return 'mode: ' + self.mode +class discrete: + """allow entering discrete mode for some period of + time. This creates /data/rules.d/99-discrete. + Buttons are: 'clear' '10m' '1hr'. + Times add to the current discression + """ + def __init__(self, name, owner): + self.embedded = lambda:None + self.format = 'cmd' + self.owner = owner + self.check_status() + + def get_name(self): + now = time.time() - 30 + if self.end < now: + return "Discrete: off" + dur = int((self.end - now)/60) + if dur < 90: + return "Discrete: %d mins" % dur + return "Discrete: %d:%02d" % (int(dur/60), dur%60) + + def buttons(self): + return ['Clear','+10m','+1hr'] + + def check_status(self): + self.end = 0 + try: + f = open("/data/rules.d/99-discrete") + l = f.readline() + start = os.fstat(f.fileno()).st_mtime + f.close() + if len(l) > 1 and l[0] == '<': + a = l[1:].split(':') + self.end = start + int(a[0].strip())*60 + 30 + except: + pass + + def set_status(self, offset): + self.check_status() + if self.end < self.now: + self.end = self.now + if offset == 0: + self.end = 0 + else: + self.end += offset * 60 + try: + if self.end == 0: + os.unlink("/data/rules.d/99-discrete") + else: + f = open("/data/rules.d/99-discrete","w") + f.write('<%d : volume=0\n' % ((self.end - self.now)/60)) + f.close() + except: + pass + + def press(self, ind): + self.now = time.time() + if ind == 0: + self.set_status(0) + if ind == 1: + self.set_status(10) + if ind == 2: + self.set_status(60) + self.owner.queue_draw() class gsmmode: def __init__(self, name, owner): self.embedded = lambda:None self.format = 'cmd' - self.timeout = None self.owner = owner try: fd = open("/var/lib/misc/gsm/mode") @@ -75,7 +137,6 @@ class rotate: def __init__(self,name, owner): self.embedded = lambda:None self.format = 'cmd' - self.timeout = None self.owner = owner self.mode = '??' self.names = ['Normal','Left','Invert','Right'] @@ -94,7 +155,6 @@ class off_mode: def __init__(self, name, owner): self.embedded = lambda:None self.format = 'cmd' - self.timeout = None self.owner = owner try: fd = open("/sys/kernel/debug/pm_debug/enable_off_mode")