Skip to content

Instantly share code, notes, and snippets.

@leighleighleigh
Created January 18, 2020 03:46
Show Gist options
  • Save leighleighleigh/29512cef63123c1c64f75d10b1b4b1dd to your computer and use it in GitHub Desktop.
Save leighleighleigh/29512cef63123c1c64f75d10b1b4b1dd to your computer and use it in GitHub Desktop.
#!/usr/bin/python3
import dbus, dbus.mainloop.glib, sys
from gi.repository import GLib
import datetime
from math import floor
track_dur = 0
def on_property_changed(interface, changed, invalidated):
global track_dur
if interface != 'org.bluez.MediaPlayer1':
return
for prop, value in changed.items():
if prop == 'Position':
print('Position: {}/{}s'.format(str(datetime.timedelta(seconds=floor(value/1000)))[2:],str(datetime.timedelta(seconds=track_dur/1000))[2:]))
elif prop == 'Status':
print('Playback Status: {}'.format(value))
elif prop == 'Track':
print('Music Info:')
track_dur = value.get('Duration','')
for key in ('Title', 'Artist', 'Album'):
print(' {}: {}'.format(key, value.get(key, '')))
def on_playback_control(fd, condition):
str = fd.readline()
if str.startswith('play'):
player_iface.Play()
elif str.startswith('pause'):
player_iface.Pause()
elif str.startswith('next'):
player_iface.Next()
elif str.startswith('prev'):
player_iface.Previous()
return True
if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
obj = bus.get_object('org.bluez', "/")
mgr = dbus.Interface(obj, 'org.freedesktop.DBus.ObjectManager')
for path, ifaces in mgr.GetManagedObjects().items():
adapter = ifaces.get('org.bluez.MediaPlayer1')
if not adapter:
continue
player = bus.get_object('org.bluez',path)
player_iface = dbus.Interface(
player,
dbus_interface='org.bluez.MediaPlayer1')
break
if not adapter:
sys.exit('Error: Media Player not found.')
device_props = dbus.Interface(player_iface,"org.freedesktop.DBus.Properties")
track_props = device_props.Get("org.bluez.MediaPlayer1","Track")
track_dur = track_props.get('Duration','')
bus.add_signal_receiver(
on_property_changed,
bus_name='org.bluez',
signal_name='PropertiesChanged',
dbus_interface='org.freedesktop.DBus.Properties')
GLib.io_add_watch(sys.stdin, GLib.IO_IN, on_playback_control)
GLib.MainLoop().run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment