fix typs introduce WatchTime class

This commit is contained in:
Stefan Schmidt-Bilkenroth 2021-06-10 13:38:42 +02:00
parent 445993ab49
commit 4836308cc9

View file

@ -48,8 +48,6 @@ movie_extensions = ['mov', 'mp4', 'm4v']
update=0 update=0
#some variables related to system clock and energy savings and timed events #some variables related to system clock and energy savings and timed events
clockInSync=False
clockTimer=None
energySavingMode = 0 energySavingMode = 0
energySavingStart = time.gmtime(0) energySavingStart = time.gmtime(0)
energySavingEnd = time.gmtime(0) energySavingEnd = time.gmtime(0)
@ -104,7 +102,7 @@ def readConfig(configFile=None):
needsWrite=True needsWrite=True
energySavingMode = val energySavingMode = val
if enenergySavingMode > 0: if energySavingMode > 0:
#when energy saving is disabled we do not need this stuff #when energy saving is disabled we do not need this stuff
h = 0 h = 0
m = 0 m = 0
@ -120,7 +118,7 @@ def readConfig(configFile=None):
energySavingStart.tm_minute = m energySavingStart.tm_minute = m
except: except:
energySavingMode = 0 energySavingMode = 0
config.set('energy','mode',0) config.set('energy','mode',"0")
config.set('energy','start',"0:00") config.set('energy','start',"0:00")
config.set('energy','stop',"0:00") config.set('energy','stop',"0:00")
needsWrite=True needsWrite=True
@ -129,13 +127,13 @@ def readConfig(configFile=None):
# we only needs this for wakeup blanked screen # we only needs this for wakeup blanked screen
try: try:
val = config.get('energy','stop') val = config.get('energy','stop')
h=int(val.split(":")[0]) h=int(val.split(":")[0])
m=int(val.split(":")[1]) m=int(val.split(":")[1])
energySavingStop.tm_hour = h energySavingStop.tm_hour = h
energySavingStop.tm_minute = m energySavingStop.tm_minute = m
except: except:
energySavingMode = 0 energySavingMode = 0
config.set('energy','mode',0) config.set('energy','mode',"0")
config.set('energy','start',"0:00") config.set('energy','start',"0:00")
config.set('energy','stop',"0:00") config.set('energy','stop',"0:00")
needsWrite=True needsWrite=True
@ -209,6 +207,54 @@ class RemoteData:
localPathExists = True localPathExists = True
return True return True
# this class will handle events related to time
# this will be energy savings and scheduling for updates
class WatchTime():
def init(self):
self.receiver = None # object which receives messages
self.synced = False # is the RasPi synched to NTP
self.startuptime = time.localtime()
self.timer = None # reoccuring call
self.enegerySaving = False # on restart we surely do not run in energy saving mode
def setReceiver(self,receiver=None):
if receiver == None:
return
self.receiver = receiver
return
def checkNTPClock(self):
if self.synced != True:
# timedatectl show tells me, if the clock is synchronized via NTP
for line in subprocess.check_output(["timedatectl","show"]).split():
if line.decode().split("=")[0] == "NTPSynchronized" and line.decode().split("=")[1] == "yes":
self.synced=True
def checkTimedEvents(self):
if energySavingMode == 0:
#if energy saving is off, we have nothing to do
return
elif energySavingMode == 1:
#if energy saving is set to shutdown, check if it is time to sutdown
return
elif energySavingMode == 2:
#if energysaving is set to blank screen, check if we need to change someting
return
else:
#we should never reach here
abort()
def update(self):
if self.receiver == None:
return
print("WatchTime.update()"+time.asctime())
#check is clock is synced to NTP
self.checkNTPClock()
#check if a timed event is up
self.checkTimedEvents()
#repeat every Minute
self.timer = self.receiver.after(60000,self.update)
# this class creates an invisible window to catch keboard events # this class creates an invisible window to catch keboard events
class HiddenRoot(tk.Tk): class HiddenRoot(tk.Tk):
def __init__(self): def __init__(self):
@ -251,14 +297,16 @@ class Mediafile:
self.valid = False self.valid = False
extension = os.path.basename(filename).split(".")[-1] extension = os.path.basename(filename).split(".")[-1]
if extension in image_extensions: if extension in image_extensions:
print("image file: "+os.path.basename(filename)) if DEBUG_PREVIEW == True:
print("image file: "+os.path.basename(filename))
self.valid = True self.valid = True
elif extension in movie_extensions: elif extension in movie_extensions:
media = caller.instance.media_new(filename) media = caller.instance.media_new(filename)
media.parse() media.parse()
self.duration = media.get_duration() self.duration = media.get_duration()
self.valid = True self.valid = True
print("movie file: "+os.path.basename(filename)+ " (%d Sekunden)"%(self.duration/1000)) if DEBUG_PREVIEW == True:
print("movie file: "+os.path.basename(filename)+ " (%d Sekunden)"%(self.duration/1000))
else: else:
print("unknwon file type: "+os.path.basename(filename)) print("unknwon file type: "+os.path.basename(filename))
@ -455,15 +503,6 @@ class MySlideShow(tk.Toplevel):
self.updateMedia() self.updateMedia()
subprocess.check_call(["vcgencmd","display_power","1"]) subprocess.check_call(["vcgencmd","display_power","1"])
def checkNTPClock(self):
global clockInSync
# timedatectl show tells me, if the clock is synchronized via NTP
for line in subprocess.check_output(["timedatectl","show"]).split():
if line.decode().split("=")[0] == "NTPSynchronized" and line.decode().split("=")[1] == "yes":
clockInSync=True
#if clockInSync == False:
# clockTimer=self.after(60*1000,self.checkNTPClock)
def GetHandle(self): def GetHandle(self):
return self.videopanel.winfo_id() return self.videopanel.winfo_id()
@ -471,6 +510,9 @@ class MySlideShow(tk.Toplevel):
readConfig() readConfig()
slideShow = HiddenRoot() slideShow = HiddenRoot()
timedEvents = WatchTime()
timedEvents.setReceiver(slideShow)
timedEvents.update()
slideShow.bind("<Escape>", lambda e: slideShow.destroy()) # exit on esc slideShow.bind("<Escape>", lambda e: slideShow.destroy()) # exit on esc
slideShow.bind("<Right>", lambda e: slideShow.nextMedia()) # right-arrow key for next image slideShow.bind("<Right>", lambda e: slideShow.nextMedia()) # right-arrow key for next image
@ -479,6 +521,7 @@ slideShow.bind("U", lambda e: slideShow.window.updateMedia()) # start download o
slideShow.bind("P", lambda e: slideShow.window.togglePlayback()) # toggle playback slideShow.bind("P", lambda e: slideShow.window.togglePlayback()) # toggle playback
slideShow.bind("i", lambda e: slideShow.window.toggleInfo()) # toggle display of info widget slideShow.bind("i", lambda e: slideShow.window.toggleInfo()) # toggle display of info widget
if DEBUG_PREVIEW == 1: if DEBUG_PREVIEW == 1:
#some featurres are only availade whith DEBUG Preview enabled #some featurres are only availade whith DEBUG Preview enabled
slideShow.bind("B", lambda e: slideShow.window.blankScreenOn()) # briefly test blank screen feature slideShow.bind("B", lambda e: slideShow.window.blankScreenOn()) # briefly test blank screen feature