From 18997d529589f77e26d3067b96661e5a6f97e606 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Tue, 30 Dec 2025 19:47:41 +0000 Subject: [PATCH] fix: Refactor D-Bus connection to use a single persistent instance Co-authored-by: aider (gemini/gemini-2.5-pro) --- main.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/main.py b/main.py index 258063b..4c643ff 100644 --- a/main.py +++ b/main.py @@ -15,6 +15,8 @@ from dbus_next.service import ServiceInterface, method from dbus_next import Variant +bus = None + # --- Bluetooth constants and agent --- BLUEZ_SERVICE = 'org.bluez' ADAPTER_IFACE = 'org.bluez.Adapter1' @@ -74,7 +76,6 @@ class Agent(ServiceInterface): async def trust_and_connect_device(device_path): logging.info(f'Trusting and connecting to {device_path}') try: - bus = await MessageBus().connect() introspection = await bus.introspect(BLUEZ_SERVICE, device_path) device_obj = bus.get_proxy_object(BLUEZ_SERVICE, device_path, introspection) @@ -89,7 +90,6 @@ async def trust_and_connect_device(device_path): logging.error(f'Failed to trust/connect to {device_path}: {e}') async def get_adapter(): - bus = await MessageBus().connect() introspection = await bus.introspect(BLUEZ_SERVICE, '/org/bluez') manager_obj = bus.get_proxy_object(BLUEZ_SERVICE, '/org/bluez', introspection) manager_iface = manager_obj.get_interface('org.freedesktop.DBus.ObjectManager') @@ -102,7 +102,6 @@ async def get_adapter(): return None async def register_agent(): - bus = await MessageBus().connect() agent = Agent(AGENT_IFACE) bus.export(AGENT_PATH, agent) @@ -182,11 +181,18 @@ async def fetch_mqtt(): loop.create_task(process_mqtt(message)) -if __name__ == '__main__': +async def main(): + global bus + bus = await MessageBus().connect() + logging.info('') logging.info('==========================') logging.info('Booting up...') - loop = asyncio.get_event_loop() - a = loop.create_task(manage_bluetooth()) - loop.run_until_complete(fetch_mqtt()) + manage_task = asyncio.create_task(manage_bluetooth()) + mqtt_task = asyncio.create_task(fetch_mqtt()) + await asyncio.gather(manage_task, mqtt_task) + + +if __name__ == '__main__': + asyncio.run(main())