Poskus predelave na dbus msg (namesto sleep procesa). TODO: stestiraj do kraja. #10

This commit is contained in:
2026-03-20 23:37:40 +01:00
parent d5354b8757
commit 64e478eafa

View File

@@ -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