1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
from mopidy_mpd import exceptions, protocol
from mopidy_mpd.protocol import tagtype_list
@protocol.commands.add("close", auth_required=False)
def close(context):
"""
*musicpd.org, connection section:*
``close``
Closes the connection to MPD.
"""
context.session.close()
@protocol.commands.add("kill", list_command=False)
def kill(context):
"""
*musicpd.org, connection section:*
``kill``
Kills MPD.
"""
raise exceptions.MpdPermissionError(command="kill")
@protocol.commands.add("password", auth_required=False)
def password(context, password):
"""
*musicpd.org, connection section:*
``password {PASSWORD}``
This is used for authentication with the server. ``PASSWORD`` is
simply the plaintext password.
"""
if password == context.password:
context.dispatcher.authenticated = True
else:
raise exceptions.MpdPasswordError("incorrect password")
@protocol.commands.add("ping", auth_required=False)
def ping(context):
"""
*musicpd.org, connection section:*
``ping``
Does nothing but return ``OK``.
"""
pass
@protocol.commands.add("tagtypes")
def tagtypes(context, *parameters):
"""
*mpd.readthedocs.io, connection settings section:*
``tagtypes``
Shows a list of available song metadata.
``tagtypes disable {NAME...}``
Remove one or more tags from the list of tag types the client is interested in.
``tagtypes enable {NAME...}``
Re-enable one or more tags from the list of tag types for this client.
``tagtypes clear``
Clear the list of tag types this client is interested in.
``tagtypes all``
Announce that this client is interested in all tag types.
"""
parameters = list(parameters)
if parameters:
subcommand = parameters.pop(0).lower()
if subcommand not in ("all", "clear", "disable", "enable"):
raise exceptions.MpdArgError("Unknown sub command")
elif subcommand == "all":
context.session.tagtypes.update(tagtype_list.TAGTYPE_LIST)
elif subcommand == "clear":
context.session.tagtypes.clear()
elif subcommand == "disable":
_validate_tagtypes(parameters)
context.session.tagtypes.difference_update(parameters)
elif subcommand == "enable":
_validate_tagtypes(parameters)
context.session.tagtypes.update(parameters)
return
return [("tagtype", tagtype) for tagtype in context.session.tagtypes]
def _validate_tagtypes(parameters):
param_set = set(parameters)
if not param_set:
raise exceptions.MpdArgError("Not enough arguments")
if not param_set.issubset(tagtype_list.TAGTYPE_LIST):
raise exceptions.MpdArgError("Unknown tag type")
|