from typing import TypeVar #from typing import Dict, List import platform import subprocess import ctypes import os #import pyatspi #from pyatspi import Accessible, StateType #from pyatspi import Component, Document #from pyatspi import Text as ATText #from pyatspi import Value as ATValue #from pyatspi import Action as ATAction #import lxml.etree #from lxml.etree import _Element import logging logger = logging.getLogger("desktopenv.getters.misc") R = TypeVar("Rule") def get_rule(env, config: R) -> R: """ Returns the rule as-is. """ return config["rules"] def get_desktop_path(*args): username = os.getlogin() # Get the current username if platform.system() == "Windows": return os.path.join("C:", "Users", username, "Desktop") elif platform.system() == "Darwin": # macOS is identified as 'Darwin' return os.path.join("/Users", username, "Desktop") elif platform.system() == "Linux": return os.path.join("/home", username, "Desktop") else: raise Exception("Unsupported operating system") def get_wallpaper(*args): def get_wallpaper_windows(): SPI_GETDESKWALLPAPER = 0x73 MAX_PATH = 260 buffer = ctypes.create_unicode_buffer(MAX_PATH) ctypes.windll.user32.SystemParametersInfoW(SPI_GETDESKWALLPAPER, MAX_PATH, buffer, 0) return buffer.value def get_wallpaper_macos(): script = """ tell application "System Events" to tell every desktop to get picture """ process = subprocess.Popen(['osascript', '-e', script], stdout=subprocess.PIPE) output, error = process.communicate() if error: logger.error("Error: %s", error) else: return output.strip().decode('utf-8') def get_wallpaper_linux(): try: output = subprocess.check_output(["gsettings", "get", "org.gnome.desktop.background", "picture-uri"]) return output.decode('utf-8').strip().replace('file://', '').replace("'", "") except Exception as e: logger.error("Error: %s", e) return None os_name = platform.system() if os_name == 'Windows': return get_wallpaper_windows() elif os_name == 'Darwin': return get_wallpaper_macos() elif os_name == 'Linux': return get_wallpaper_linux() else: return "Unsupported OS" #def get_accessibility_tree(*args) -> _Element: #desktop: Accessible = pyatspi.Registry.getDesktop(0) #desktop_xml: _Element = _create_node(desktop) #return desktop_xml def get_accessibility_tree(env, *args) -> str: accessibility_tree: str = env.controller.get_accessibility_tree() logger.debug("AT@eval: %s", accessibility_tree) return accessibility_tree #if __name__ == "__main__": #import sys #with open(sys.argv[1], "w") as f: #f.write( lxml.etree.tostring( get_accessibility_tree() #, encoding="unicode" #, pretty_print=True #) #)