mopidy/mopidy/frontends/mpd/protocol/command_list.py
2010-08-10 02:08:59 +02:00

48 lines
1.9 KiB
Python

from mopidy.frontends.mpd import handle_pattern, MpdUnknownCommand
@handle_pattern(r'^command_list_begin$')
def command_list_begin(frontend):
"""
*musicpd.org, command list section:*
To facilitate faster adding of files etc. you can pass a list of
commands all at once using a command list. The command list begins
with ``command_list_begin`` or ``command_list_ok_begin`` and ends
with ``command_list_end``.
It does not execute any commands until the list has ended. The
return value is whatever the return for a list of commands is. On
success for all commands, ``OK`` is returned. If a command fails,
no more commands are executed and the appropriate ``ACK`` error is
returned. If ``command_list_ok_begin`` is used, ``list_OK`` is
returned for each successful command executed in the command list.
"""
frontend.command_list = []
frontend.command_list_ok = False
@handle_pattern(r'^command_list_end$')
def command_list_end(frontend):
"""See :meth:`command_list_begin()`."""
if frontend.command_list is False:
# Test for False exactly, and not e.g. empty list
raise MpdUnknownCommand(command='command_list_end')
(command_list, frontend.command_list) = (frontend.command_list, False)
(command_list_ok, frontend.command_list_ok) = (
frontend.command_list_ok, False)
result = []
for i, command in enumerate(command_list):
response = frontend.handle_request(command, command_list_index=i)
if response is not None:
result.append(response)
if response and response[-1].startswith(u'ACK'):
return result
if command_list_ok:
response.append(u'list_OK')
return result
@handle_pattern(r'^command_list_ok_begin$')
def command_list_ok_begin(frontend):
"""See :meth:`command_list_begin()`."""
frontend.command_list = []
frontend.command_list_ok = True