]> git.neil.brown.name Git - plato.git/commitdiff
plato: add 'discrete' setting.
authorNeilBrown <neilb@suse.de>
Thu, 19 Dec 2013 23:47:33 +0000 (10:47 +1100)
committerNeilBrown <neilb@suse.de>
Thu, 19 Dec 2013 23:47:33 +0000 (10:47 +1100)
This allows the phone to be set to silent for some number of minutes
or hours.

plato/plato_settings.py

index 8fe7cacc2c1576d79305ba0c84001d54e9598475..5ff00e44c8c8f7951de33200abf4a3e3b323829e 100644 (file)
@@ -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")