Persist schedule. Drop shlex.

This commit is contained in:
Maurizio Porrato 2019-02-11 22:16:43 +00:00
parent e05c892eaf
commit d5bfbc27b6
1 changed files with 20 additions and 9 deletions

29
eufy.py
View File

@ -3,7 +3,7 @@
from cmd import Cmd from cmd import Cmd
from datetime import datetime, time from datetime import datetime, time
from inspect import signature, Signature from inspect import signature, Signature
from shlex import shlex import os
from time import sleep from time import sleep
@ -58,7 +58,12 @@ class EufyIR(EufyRawIR):
RETURN_BASE = 0xef RETURN_BASE = 0xef
def __init__(self): def __init__(self):
self._schedule = 0xff self._schedule_file = os.path.expanduser('~/.eufy-schedule')
try:
with open(os.path.expanduser(self._SCHEDULE_FILE), 'r') as f:
self._schedule = int(f.read(5))
except:
self._schedule = 0xff
def _message(self, code): def _message(self, code):
now = datetime.now() now = datetime.now()
@ -119,11 +124,17 @@ class EufyIR(EufyRawIR):
self.send(self.SET_TIME) self.send(self.SET_TIME)
def setSchedule(self, t): def setSchedule(self, t):
# FIXME: properly store schedule self._schedule = t.hour * 4 + t.minute // 15
self.send(self.SET_SCHEDULE, t) with open(self._schedule_file, 'w') as f:
f.write(str(self._schedule))
self.send(self.SET_SCHEDULE)
def cancelSchedule(self): def cancelSchedule(self):
# FIXME: properly store schedule self._schedule = 0xff
try:
os.remove(self._schedule_file)
except:
pass
self.send(self.CANCEL_SCHEDULE) self.send(self.CANCEL_SCHEDULE)
def returnBase(self): def returnBase(self):
@ -132,11 +143,11 @@ class EufyIR(EufyRawIR):
def lexer(f): def lexer(f):
def g(self, args): def g(self, args):
argv = tuple(x.lower() for x in shlex(args)) argv = tuple(x.lower() for x in args.split())
s = signature(f) s = signature(f)
maxargs = len(s.parameters) maxargs = len(s.parameters) - 1
minargs = len([x for _,x in s.parameters.items() if x.default is not Signature.empty]) minargs = len([x for _,x in s.parameters.items() if x.default is Signature.empty]) - 1
if minargs <= len(argv) + 1 <= maxargs: if minargs <= len(argv) <= maxargs:
return f(self, *argv) return f(self, *argv)
else: else:
self.stdout.write("*** Invalid arguments for {}\n".format(f.__name__[3:])) self.stdout.write("*** Invalid arguments for {}\n".format(f.__name__[3:]))