From ce110811de4bb6fc3d70ea1d016976a84076e758 Mon Sep 17 00:00:00 2001 From: Seas0 Date: Sat, 23 Nov 2024 15:27:42 +0800 Subject: [PATCH] fix: utilize proper introspective method to get konsole sessions --- yin_yang/plugins/konsole.py | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/yin_yang/plugins/konsole.py b/yin_yang/plugins/konsole.py index 5d45813..8ed8123 100644 --- a/yin_yang/plugins/konsole.py +++ b/yin_yang/plugins/konsole.py @@ -1,7 +1,7 @@ import logging import os import re -import subprocess +from xml.etree import ElementTree as ET from configparser import ConfigParser from itertools import chain from pathlib import Path @@ -238,21 +238,16 @@ def set_profile(service: str, profile: str): # connect to the session bus connection = QDBusConnection.sessionBus() - # maybe it's possible with pyside6 dbus packages, but this was simpler and worked - try: - sessions = subprocess.check_output(f'qdbus {service} | grep "Sessions/"', shell=True) - except subprocess.CalledProcessError: - try: - sessions = subprocess.check_output( - f'qdbus org.kde.konsole | grep "Sessions/"', shell=True - ) - logger.debug(f'Found org.kde.konsole, use that instead') - service = "org.kde.konsole" - except subprocess.CalledProcessError: - # happens when dolphins konsole is not opened - logger.debug(f'No Konsole sessions available in service {service}, skipping') - return - sessions = sessions.decode('utf-8').removesuffix('\n').split('\n') + # better to get DBus service and session with proper DBus introspection + query = QDBusMessage.createMethodCall( + service, + '/Sessions', + 'org.freedesktop.DBus.Introspectable', + 'Introspect' + ) + response = connection.call(query) + root = ET.fromstring(response.arguments()[0]) + sessions = [f"/Sessions/{child.attrib['name']}" for child in root.findall('node')] # loop: process sessions for session in sessions: