Source

playerdo / player_do

Full commit
Luke Plant e91216b 


Luke Plant e61579d 




Luke Plant e91216b 

Luke Plant 1543776 

Luke Plant e91216b 


Luke Plant 1543776 



Luke Plant e61579d 


Luke Plant 1543776 




Luke Plant e61579d 
Luke Plant 1543776 






Luke Plant abe4477 


Luke Plant 1543776 










Luke Plant e61579d 

Luke Plant 1543776 













Luke Plant e91216b 


Luke Plant 1543776 



Luke Plant e91216b 
Luke Plant 1543776 






#!/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
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
  active.

<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 are:
"""
    for P in players:
        n = getattr(P, 'friendly_name', None)
        if n is not None:
            help += " " + n + "\n"

    return help


def print_usage(players):
    sys.stdout.write(usage(players))


# List of commands: (name, docstring, callable)
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
    commands.append((c,
                     getattr(Player, c).__doc__.strip().replace("\n", " "),
                     mk_command(c)))

commands.extend([
    ("test", "Tests that all dependencies are available.", do_test),
    ("help", "Prints help.", print_usage),
])

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


if __name__ == '__main__':
    players = find_players()
    if len(sys.argv) < 2:
        print_usage(players)
        sys.exit(1)

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