calling `asyncio.get_running_loop()` will fail if there is no running event loop, so we should use `asyncio.run()` instead to create a new loop. Also, use events for infinite waiting instead of futures since there is no return value.
47 lines
1.3 KiB
Python
Executable File
47 lines
1.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import os
|
|
import sys
|
|
|
|
sys.path.append(os.path.abspath(os.path.dirname(__file__) + "/.."))
|
|
|
|
import asyncio
|
|
|
|
from dbus_fast.aio import MessageBus
|
|
|
|
|
|
async def main():
|
|
bus = await MessageBus().connect()
|
|
# the introspection xml would normally be included in your project, but
|
|
# this is convenient for development
|
|
introspection = await bus.introspect(
|
|
"org.mpris.MediaPlayer2.vlc", "/org/mpris/MediaPlayer2"
|
|
)
|
|
|
|
obj = bus.get_proxy_object(
|
|
"org.mpris.MediaPlayer2.vlc", "/org/mpris/MediaPlayer2", introspection
|
|
)
|
|
player = obj.get_interface("org.mpris.MediaPlayer2.Player")
|
|
properties = obj.get_interface("org.freedesktop.DBus.Properties")
|
|
|
|
# call methods on the interface (this causes the media player to play)
|
|
await player.call_play()
|
|
|
|
volume = await player.get_volume()
|
|
print(f"current volume: {volume}, setting to 0.5")
|
|
|
|
await player.set_volume(0.5)
|
|
|
|
# listen to signals
|
|
def on_properties_changed(
|
|
interface_name, changed_properties, invalidated_properties
|
|
):
|
|
for changed, variant in changed_properties.items():
|
|
print(f"property changed: {changed} - {variant.value}")
|
|
|
|
properties.on_properties_changed(on_properties_changed)
|
|
|
|
await bus.wait_for_disconnect()
|
|
|
|
|
|
asyncio.run(main())
|