Created
July 24, 2015 00:18
-
-
Save winny-/21ed5dfadc7cb0432fac to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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