import asyncio import logging import pathlib import asyncdbus import asyncdbus.message_bus import click from greendeck.config import Config from greendeck.lib.logging import setup_logging logger = logging.getLogger(__name__) async def _main(config: Config): async with asyncdbus.message_bus.MessageBus().connect() as bus: bus: asyncdbus.message_bus.MessageBus # print(type(bus)) # print(dir(bus)) # print(help(bus.introspect)) i = await bus.introspect("org.freedesktop.DBus", "/org/freedesktop/DBus") obj = await bus.get_proxy_object( "org.freedesktop.DBus", "/org/freedesktop/DBus", i ) # n = await obj.ListNames() dbus = await obj.get_interface("org.freedesktop.DBus") names = await dbus.call_list_names() found = False for name in names: if name.startswith("org.mpris.MediaPlayer2."): logger.info(f"{name}") found = True logger.info(f"{found}") introspection = await bus.introspect( "org.mpris.MediaPlayer2.Plexamp", "/org/mpris/MediaPlayer2" ) obj = await bus.get_proxy_object( "org.mpris.MediaPlayer2.Plexamp", "/org/mpris/MediaPlayer2", introspection ) player = await obj.get_interface("org.mpris.MediaPlayer2.Player") properties = await obj.get_interface("org.freedesktop.DBus.Properties") logger.info(f"{dir(properties)}") p = await properties.call_get_all("org.mpris.MediaPlayer2.Player") logger.info(f"{p}") def on_properties_changed( interface_name, changed_properties, invalidated_properties ): for changed, variant in changed_properties.items(): logger.info(f"property changed: {changed} - {variant.value}") await properties.on_properties_changed(on_properties_changed) await asyncio.sleep(1000000) @click.command @click.option( "--config", "config_path", type=click.Path( exists=True, file_okay=True, dir_okay=False, allow_dash=False, path_type=pathlib.Path, ), default="./config.yaml", ) def main( config_path: pathlib.Path, ): setup_logging() config = Config.parse_raw(config_path.read_bytes(), proto="yaml") asyncio.run(_main(config)) if __name__ == "__main__": main()