changes by ssb

This commit is contained in:
Stefan Schmidt-Bilkenroth 2023-04-19 11:02:49 +02:00
parent 01d23d5e6e
commit d6f44ddf73
2 changed files with 113 additions and 50 deletions

View file

@ -171,11 +171,11 @@ class RemoteData:
ui.showInfo("Die Daten werden geladen:",True)
#print("download to %s" % self.localZIP)
with open(self.localZIP, "wb") as zipped:
for chunk in r.iter_content(chunk_size = 4096):
for chunk in r.iter_content(chunk_size = 4*1024):
if chunk:
zipped.write(chunk)
length += len(chunk)
ui.showInfo("Daten werden geladen: %d kB" % (length/1024))
ui.showInfo("Daten werden geladen: %d kB" % (length/1024), _clear = True)
#print("%d kB" % (length/1024), end="\r")
ui.showInfo("Daten wurden erfolgreich geladen: %d kB" % (length/1024))
time.sleep(1)
@ -235,6 +235,9 @@ class WatchTime():
return t['h'] * 60 + t['m']
def checkNTPClock(self):
if sys.platform.startswith('darwin') or sys.platform.startswith('win'):
# on macOS and WIndows timedatectl is not available, we assume the clock is sync'ed
self.synced = True
if self.synced != True:
# timedatectl show tells me, if the clock is synchronized via NTP
for line in subprocess.check_output(["timedatectl","show"]).split():
@ -427,19 +430,37 @@ class Mediafile:
img.save(filename)
w,h = img.size
img.close()
subname = os.path.basename(filename).split('.')[0]
if '_#s' in subname:
duration = int(subname.split('_#s')[-1])
if duration > 0:
self.duration = duration*1000
self.valid = True
if DEBUG_PREVIEW == True:
print("image file: "+os.path.basename(filename)+"(%d"%w+"x%d)"%h, "resized:",resize)
if self.duration == 0:
print("Bild Datei: "+os.path.basename(filename)+" (%d"%w+"x%d)"%h,
"skaliert:",int(resize), "Dauer: standard")
else:
print("Bild Datei: "+os.path.basename(filename)+" (%d"%w+"x%d)"%h,
"skaliert:",int(resize), "Dauer: %d Sekunden" % (self.duration/1000))
elif extension in movie_extensions:
media = caller.instance.media_new(filename)
media.parse()
self.duration = media.get_duration()
self.valid = True
if DEBUG_PREVIEW == True:
print("movie file: "+os.path.basename(filename)+ " (%d Sekunden)"%(self.duration/1000))
print("Film Datei: "+os.path.basename(filename)+ " (Dauer %d Sekunden)"%(self.duration/1000))
else:
print("unknwon file type: "+os.path.basename(filename))
print("unbekannte Datei: "+os.path.basename(filename))
if sys.platform.startswith('darwin'):
from ctypes import c_void_p, cdll
dylib = cdll.LoadLibrary('libtk8.6.dylib')
_GetNSView = dylib.TkMacOSXGetRootControl
_GetNSView.restype = c_void_p
_GetNSView.argtypes = (c_void_p,)
# print(_GetNSView)
del dylib
class MySlideShow(tk.Toplevel):
def __init__(self, *args, **kwargs):
@ -448,6 +469,7 @@ class MySlideShow(tk.Toplevel):
self.overrideredirect(True)
self.info = None
self.infoText = tk.StringVar()
self.infoText.set('')
#by default info widget is hidden
self.infoHidden = True
self.bg = (0,0,0)
@ -461,25 +483,31 @@ class MySlideShow(tk.Toplevel):
#set the geometry of the playback window
self.scr_w, self.scr_h = self.winfo_screenwidth(), self.winfo_screenheight()
if DEBUG_PREVIEW == None or DEBUG_PREVIEW == True:
self.scr_w = int(self.scr_w / 4)
self.scr_h = int(self.scr_h / 4)
self.scr_t = self.scr_h*3 - 10
self.scr_l = self.scr_w*3 - 10
self.font = "Courier 8"
self.scr_w = int(self.scr_w / 3.0)
self.scr_h = int(self.scr_w * 9.0 / 16.0)
self.scr_t = self.winfo_screenheight() - self.scr_h - 10
self.scr_l = self.winfo_screenwidth() - self.scr_w - 10
self.font = "Courier 10"
else:
self.scr_t = 0
self.scr_l = 0
self.font = "Courier 12"
# hide the mouse cursor if not in debug mode
self.config(cursor="none")
self.wm_attributes('-fullscreen',True)
self.wm_attributes('-topmost', True)
emptyMenu = tk.Menu(self)
self['menu'] = None
emptyMenu.delete(0,tk.END)
#This creates the widget where files are played back
self.player = None
self.videopanel = tk.Frame(self, bg="black")
self.videopanel.pack(side="top",fill=tk.BOTH,expand=1)
self.videopanel.update_idletasks()
#VLC player init
self.instance = vlc.Instance("--no-xlib --quiet --fullscreen --")
self.instance = vlc.Instance("--quiet --fullscreen --")
self.player = self.instance.media_player_new()
self.player.video_set_scale(0)
#self.player.video_set_aspect_ratio('16:9')
@ -489,7 +517,18 @@ class MySlideShow(tk.Toplevel):
#setup the window
self.wm_geometry("{}x{}+{}+{}".format(self.scr_w, self.scr_h,self.scr_l,self.scr_t))
self.player.set_xwindow(self.GetHandle()) # this line messes up windows
# different platforms require different assignment below
if sys.platform.startswith('linux'):
self.player.set_xwindow(self.GetHandle()) # this line messes up windows
elif sys.platform.startswith('darwin'):
# print(_GetNSView(self.GetHandle()))
self.player.set_nsobject(_GetNSView(self.GetHandle()))
elif sys.platform.startswith('win'):
self.player.set_hwnd(self.GetHandle()) # should work on windows
else:
print( "Unbekannte Platform (%s), das Skript wird abgebrochen:" % sys.platform )
exit(-1)
#some brief internal initializers
self.mediaList = list()
@ -511,21 +550,31 @@ class MySlideShow(tk.Toplevel):
# This creates an info widget
if self.infoHidden == True or self.info == None:
self.infoHidden = False
self.info = tk.Label(self, bg="#00FF44", font=self.font, height=-1, width=-1, textvariable=self.infoText, wraplength=self.scr_w-16)
self.info.place(x=8,y=6)
self.info = tk.Label(self, bg="#2F6B1A", font=self.font, height=-1, width=-1, textvariable=self.infoText, wraplength=self.scr_w-16)
self.info.place(x=16,y=32)
else:
self.infoHidden = True
self.info.destroy()
self.info = None
def showInfo(self,_text,_force=False):
def showInfo(self,_text,_force=False,_clear=False):
if self.infoHidden == True and _force == True:
self.toggleInfo()
self.infoText.set(_text)
if len(_text.strip()) == 0:
return
if _clear == True:
lines = []
else:
lines = self.infoText.get().strip().split('\n')
if len(lines) > 18:
lines = lines[1:]
lines.append(_text.strip())
self.infoText.set('\n'.join(lines).strip())
self.update()
def hideInfo(self):
self.infoText.set('')
if self.infoHidden == False:
self.toggleInfo()
@ -650,7 +699,11 @@ readConfig()
try:
slideShow = HiddenRoot()
except:
except Exception as e:
if hasattr(e, 'message'):
print(e.message)
else:
print(e)
print("Es ist ein Tcl-Fehler aufgetreten. Das Skript muss im Desktop-Modus gestartet werden.")
exit(0)
timedEvents = WatchTime()

View file

@ -17,6 +17,16 @@ try:
except:
modules.append("python-vlc")
try:
import PIL
except:
modules.append('pillow')
try:
import requests
except:
modules.append('requests')
master=None
# try:
# import crontab