Skip to content

Instantly share code, notes, and snippets.

@winny-
Created July 24, 2015 00:18
Show Gist options
  • Select an option

  • Save winny-/21ed5dfadc7cb0432fac to your computer and use it in GitHub Desktop.

Select an option

Save winny-/21ed5dfadc7cb0432fac to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
import dbus
import argparse
import sys
def get_session_bus():
global session_bus
try:
session_bus
except NameError:
session_bus = dbus.SessionBus()
return session_bus
def get_mpris2_buses():
session_bus = get_session_bus()
d = session_bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus')
names = d.ListNames(dbus_interface='org.freedesktop.DBus')
return [bus for bus in names if bus.startswith('org.mpris.MediaPlayer2.')]
def get_mpris2_objects():
session_bus = get_session_bus()
buses = get_mpris2_buses()
return [session_bus.get_object(bus, '/org/mpris/MediaPlayer2') for bus in buses]
def main():
parser = argparse.ArgumentParser(description='Control MPris2 compatible media players')
parser.add_argument('command_or_player')
parser.add_argument('command', nargs='?')
args = parser.parse_args()
if args.command is None:
command = args.command_or_player
try:
player = get_mpris2_objects()[0]
except IndexError:
print('No Mpris2 compatible players are running.')
sys.exit(1)
else:
command = args.command
requested_player = args.command_or_player.lower().strip()
try:
player = [obj for obj in get_mpris2_objects() if obj.requested_bus_name.replace('org.mpris.MediaPlayer2.', '', 1).lower() == requested_player][0]
except IndexError:
print('Player {} is not running.'.format(requested_player))
sys.exit(1)
player = dbus.Interface(player, 'org.mpris.MediaPlayer2.Player')
command = command.lower().strip()
if command in ['pp', 'playpause', 'toggle']:
player.PlayPause()
elif command == 'pause':
player.Pause()
elif command == 'play':
player.Play()
elif command in ['next', 'skip']:
player.Next()
elif comand in ['back', 'previous', 'prev']:
player.Previous()
elif command not in ['status', 'stat', 'info']:
parser.print_usage()
sys.exit(1)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment