implement list_OK/command_list_ok_begin
update COMMANDS git-svn-id: https://svn.musicpd.org/mpd/trunk@1344 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
parent
69d787b3e1
commit
a8a8aacdb3
11
doc/COMMANDS
11
doc/COMMANDS
@ -110,6 +110,10 @@ playlistinfo <int song>
|
||||
displays list of songs in the playlist
|
||||
_song_ is optional and species a single song to displa info for
|
||||
|
||||
plchanges <playlist version>
|
||||
displays changed songs currently in the playlist since
|
||||
_playlist version_
|
||||
|
||||
previous
|
||||
plays previous song in playlist
|
||||
|
||||
@ -198,6 +202,10 @@ at once using a command list. The command list beings with:
|
||||
|
||||
command_list_begin
|
||||
|
||||
or:
|
||||
|
||||
command_list_ok_begin
|
||||
|
||||
And ends with:
|
||||
|
||||
command_list_end
|
||||
@ -205,4 +213,5 @@ 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.
|
||||
are executed and the appropriate ACK error is returned. If "command_list_ok_begin is used", "list_OK\n" is returned for each successful command executed
|
||||
in the command list.
|
||||
|
@ -786,7 +786,7 @@ int processCommandInternal(FILE * fp, unsigned int * permission,
|
||||
}
|
||||
|
||||
int proccessListOfCommands(FILE * fp, int * permission, int * expired,
|
||||
List * list)
|
||||
int listOK, List * list)
|
||||
{
|
||||
ListNode * node = list->firstNode;
|
||||
ListNode * tempNode;
|
||||
@ -804,6 +804,7 @@ int proccessListOfCommands(FILE * fp, int * permission, int * expired,
|
||||
deleteNodeFromList(list,node);
|
||||
node = tempNode;
|
||||
if(ret!=0 || (*expired)!=0) node = NULL;
|
||||
else if(listOK) myfprintf(fp, "list_OK\n");
|
||||
command_listNum++;
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@ extern char * current_command;
|
||||
extern int command_listNum;
|
||||
|
||||
int proccessListOfCommands(FILE * fp, int * permission, int * expired,
|
||||
List * list);
|
||||
int listOK, List * list);
|
||||
|
||||
int processCommand(FILE * fp, unsigned int * permission, char * commandString);
|
||||
|
||||
|
@ -205,13 +205,16 @@ void putOggCommentsIntoDecoderControlMetadata(DecoderControl * dc,
|
||||
{
|
||||
MpdTag * tag;
|
||||
|
||||
if(dc->metadataSet) return;
|
||||
|
||||
tag = oggCommentsParse(comments);
|
||||
if(!tag) return;
|
||||
|
||||
copyMpdTagToDecoderControlMetadata(dc, tag);
|
||||
|
||||
/*if(tag->artist) printf("Artist: %s\n", tag->artist);
|
||||
if(tag->album) printf("Album: %s\n", tag->album);
|
||||
if(tag->track) printf("Track: %s\n", tag->track);
|
||||
if(tag->title) printf("Title: %s\n", tag->title);*/
|
||||
|
||||
freeMpdTag(tag);
|
||||
}
|
||||
|
||||
@ -229,7 +232,7 @@ int ogg_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream)
|
||||
int chunkpos = 0;
|
||||
long bitRate = 0;
|
||||
long test;
|
||||
float replayGainScale;
|
||||
float replayGainScale = 1.0;
|
||||
char ** comments;
|
||||
|
||||
data.inStream = inStream;
|
||||
@ -253,24 +256,10 @@ int ogg_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream)
|
||||
return 0;
|
||||
}
|
||||
|
||||
{
|
||||
vorbis_info *vi=ov_info(&vf,-1);
|
||||
dc->audioFormat.bits = 16;
|
||||
dc->audioFormat.channels = vi->channels;
|
||||
dc->audioFormat.sampleRate = vi->rate;
|
||||
getOutputAudioFormat(&(dc->audioFormat),&(cb->audioFormat));
|
||||
}
|
||||
|
||||
dc->totalTime = ov_time_total(&vf,-1);
|
||||
if(dc->totalTime < 0) dc->totalTime = 0;
|
||||
if(dc->totalTime < 0) dc->totalTime = 0;
|
||||
|
||||
comments = ov_comment(&vf, -1)->user_comments;
|
||||
|
||||
putOggCommentsIntoDecoderControlMetadata(dc, comments);
|
||||
|
||||
dc->state = DECODE_STATE_DECODE;
|
||||
|
||||
replayGainScale = ogg_getReplayGainScale(comments);
|
||||
dc->audioFormat.bits = 16;
|
||||
|
||||
while(!eof) {
|
||||
if(dc->seek) {
|
||||
@ -286,7 +275,17 @@ int ogg_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream)
|
||||
OGG_DECODE_USE_BIGENDIAN,
|
||||
2, 1, ¤t_section);
|
||||
|
||||
if(current_section!=prev_section) printf("song changed!\n");
|
||||
if(current_section!=prev_section) {
|
||||
/*printf("new song!\n");*/
|
||||
vorbis_info *vi=ov_info(&vf,-1);
|
||||
dc->audioFormat.channels = vi->channels;
|
||||
dc->audioFormat.sampleRate = vi->rate;
|
||||
getOutputAudioFormat(&(dc->audioFormat),&(cb->audioFormat));
|
||||
comments = ov_comment(&vf, -1)->user_comments;
|
||||
putOggCommentsIntoDecoderControlMetadata(dc, comments);
|
||||
dc->state = DECODE_STATE_DECODE;
|
||||
replayGainScale = ogg_getReplayGainScale(comments);
|
||||
}
|
||||
|
||||
prev_section = current_section;
|
||||
|
||||
|
@ -45,6 +45,7 @@
|
||||
|
||||
#define INTERFACE_MAX_BUFFER_LENGTH MAXPATHLEN+1024
|
||||
#define INTERFACE_LIST_MODE_BEGIN "command_list_begin"
|
||||
#define INTERFACE_LIST_OK_MODE_BEGIN "command_list_ok_begin"
|
||||
#define INTERFACE_LIST_MODE_END "command_list_end"
|
||||
#define INTERFACE_DEFAULT_OUT_BUFFER_SIZE 4096
|
||||
|
||||
@ -62,6 +63,7 @@ typedef struct _Interface {
|
||||
unsigned int permission;
|
||||
time_t lastTime;
|
||||
List * commandList; /* for when in list mode */
|
||||
int commandListOK; /* print OK after each command execution */
|
||||
unsigned long long commandListSize; /* mem commandList consumes */
|
||||
List * bufferList; /* for output if client is slow */
|
||||
unsigned long long outputBufferSize; /* mem bufferList consumes */
|
||||
@ -230,6 +232,7 @@ int interfaceReadInput(Interface * interface) {
|
||||
interface->fp,
|
||||
&(interface->permission),
|
||||
&(interface->expired),
|
||||
interface->commandListOK,
|
||||
interface->commandList);
|
||||
DEBUG("interface %i: process command "
|
||||
"list returned %i\n",
|
||||
@ -281,27 +284,27 @@ int interfaceReadInput(Interface * interface) {
|
||||
interface->commandList = makeList(free);
|
||||
interface->commandListSize =
|
||||
sizeof(List);
|
||||
interface->commandListOK = 0;
|
||||
ret = 1;
|
||||
}
|
||||
else if(strcmp(interface->buffer,
|
||||
INTERFACE_LIST_OK_MODE_BEGIN)
|
||||
==0)
|
||||
{
|
||||
interface->commandList = makeList(free);
|
||||
interface->commandListSize =
|
||||
sizeof(List);
|
||||
interface->commandListOK = 1;
|
||||
ret = 1;
|
||||
}
|
||||
else {
|
||||
if(strcmp(interface->buffer,
|
||||
INTERFACE_LIST_MODE_END)
|
||||
==0)
|
||||
{
|
||||
commandError(interface->fp,
|
||||
ACK_ERROR_NOT_LIST,
|
||||
"not in command list mode");
|
||||
ret = -1;
|
||||
}
|
||||
else {
|
||||
DEBUG("interface %i: process command \"%s\"\n",interface->num,interface->buffer);
|
||||
ret = processCommand(
|
||||
DEBUG("interface %i: process command \"%s\"\n",interface->num,interface->buffer);
|
||||
ret = processCommand(
|
||||
interface->fp,
|
||||
&(interface->
|
||||
permission),
|
||||
interface->buffer);
|
||||
DEBUG("interface %i: command returned %i\n",interface->num,ret);
|
||||
}
|
||||
DEBUG("interface %i: command returned %i\n",interface->num,ret);
|
||||
if(ret==0) {
|
||||
commandSuccess(interface->fp);
|
||||
}
|
||||
@ -648,4 +651,3 @@ void printInterfaceOutBuffer(Interface * interface) {
|
||||
|
||||
interface->outBuflen = 0;
|
||||
}
|
||||
/* vim:set shiftwidth=4 tabstop=8 expandtab: */
|
||||
|
Loading…
Reference in New Issue
Block a user