Poskus predelave na dbus msg (namesto sleep procesa). TODO: stestiraj do kraja. #10
This commit is contained in:
38
projector.py
38
projector.py
@@ -169,6 +169,7 @@ class SongProjector:
|
|||||||
"""
|
"""
|
||||||
Prepreči vklop ohranjevalnika zaslona ali spanja.
|
Prepreči vklop ohranjevalnika zaslona ali spanja.
|
||||||
"""
|
"""
|
||||||
|
self.inhibitor_cookie = None
|
||||||
try:
|
try:
|
||||||
if sys.platform.startswith("win"):
|
if sys.platform.startswith("win"):
|
||||||
# Windows: ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED
|
# Windows: ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED
|
||||||
@@ -176,14 +177,21 @@ class SongProjector:
|
|||||||
# Uporabimo c_uint za zagotovitev pravilnega tipa
|
# Uporabimo c_uint za zagotovitev pravilnega tipa
|
||||||
ctypes.windll.kernel32.SetThreadExecutionState(ctypes.c_uint(0x80000003))
|
ctypes.windll.kernel32.SetThreadExecutionState(ctypes.c_uint(0x80000003))
|
||||||
elif sys.platform == "linux":
|
elif sys.platform == "linux":
|
||||||
# Zaženi inhibitor, dokler tvoj program dela (hrani handle!)
|
# GNOME DBus inhibitor (org.gnome.SessionManager)
|
||||||
inhibitor = subprocess.Popen([
|
# Flags: 1=logout, 2=switch user, 4=suspend, 8=idle
|
||||||
"gnome-session-inhibit",
|
# Uporabimo 12 (4+8) za suspend in idle.
|
||||||
"--inhibit", "idle",
|
# toplevel_xid=0 (uint32:0)
|
||||||
"--inhibit", "suspend",
|
cmd = [
|
||||||
"--reason", "Projecting lyrics",
|
"dbus-send", "--print-reply", "--dest=org.gnome.SessionManager",
|
||||||
"sleep", "infinity"
|
"/org/gnome/SessionManager", "org.gnome.SessionManager.Inhibit",
|
||||||
])
|
"string:projector", "uint32:0", "string:Projecting lyrics", "uint32:12"
|
||||||
|
]
|
||||||
|
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT).decode()
|
||||||
|
# Output format: uint32 12345678
|
||||||
|
for line in output.splitlines():
|
||||||
|
if "uint32" in line:
|
||||||
|
self.inhibitor_cookie = line.split()[-1]
|
||||||
|
break
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Napaka pri preprečevanju spanja: {e}")
|
print(f"Napaka pri preprečevanju spanja: {e}")
|
||||||
@@ -510,13 +518,13 @@ class SongProjector:
|
|||||||
pass
|
pass
|
||||||
elif sys.platform == "linux":
|
elif sys.platform == "linux":
|
||||||
try:
|
try:
|
||||||
# Ponovno vklopi ohranjevalnik in DPMS (privzete vrednosti)
|
# Sprostimo DBus inhibitor, če ga imamo
|
||||||
subprocess.Popen(["xset", "s", "on", "+dpms"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
if hasattr(self, "inhibitor_cookie") and self.inhibitor_cookie:
|
||||||
|
subprocess.Popen([
|
||||||
# Za Wayland/DBus inhibit običajno ni treba eksplicitno sprostiti,
|
"dbus-send", "--dest=org.gnome.SessionManager",
|
||||||
# če se proces konča, vendar bi za popolnost lahko uporabili UnInhibit,
|
"/org/gnome/SessionManager", "org.gnome.SessionManager.UnInhibit",
|
||||||
# če bi shranili cookie. Ker ga nismo, se zanašamo na to, da DBus
|
f"uint32:{self.inhibitor_cookie}"
|
||||||
# samodejno sprosti inhibit ob zaprtju povezave/procesa.
|
], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user