1. Luke Plant
  2. playerdo


playerdo / player_do

#!/usr/bin/env python

# Wrapper for controlling various music players, so that you can define
# keyboard shortcuts that work for whatever player you are using.  Ideally it
# will still work even if multiple players are running if all but one are
# 'stopped', but some music players do not have such a state or it cannot be
# determined.

from playerdo.main import do_test, do_command, find_players
from playerdo.backends.base import Player
from playerdo import install
import sys

def usage(players):
    # Print help and list of supported players
    help = """Usage: player_do <command>

  Media players that are currently running will be detected, and the command
  will be passed on to the first, giving priority to players that seem to be

<command> is one of:
    max_len = len(sorted(commands, key=lambda c: len(c[0]))[-1][0])
    for name, doc, f in commands:
        help += " " + name + " " * (max_len - len(name) + 2) + doc + "\n"

    help += """
Not all operations are supported or fully supported by all players.

Currently supported players (in the order they will currently be used):
    for p in players:
        n = getattr(p, 'friendly_name', None)
        if n is not None:
            help += " " + n + "\n"

    return help

def print_usage(players):

# List of commands: (name, docstring, callable)
# The callable must accept a single argument, a list of players.
commands = []

for c in ["play", "pause", "unpause", "togglepause",
          "playpause", "stop", "next", "prev", "osd"]:
    def mk_command(name):
        def command(players):
            return do_command(name, players)
        return command
                     getattr(Player, c).__doc__.strip().replace("\n", " "),

    ("test", "Tests that all dependencies are available.", do_test),
    ("help", "Prints help.", print_usage),
    ("install_gnome", "Install keybindings for GNOME and launch keybinding editor",
     lambda *args: install.install_gnome())

command_dict = dict((name, f) for name, doc, f in commands)

def main(argv):
    players = find_players()
    if len(argv) < 2:

    name = argv[1]
    command = command_dict.get(name, None)
    if command is None:
        sys.stderr.write("Unrecognised command '%s'.\n\n" % name)

if __name__ == '__main__':