diff options
Diffstat (limited to '')
-rw-r--r-- | doc/COMMANDS | 11 | ||||
-rw-r--r-- | src/command.c | 3 | ||||
-rw-r--r-- | src/command.h | 2 | ||||
-rw-r--r-- | src/inputPlugins/ogg_plugin.c | 39 | ||||
-rw-r--r-- | src/interface.c | 32 |
5 files changed, 49 insertions, 38 deletions
diff --git a/doc/COMMANDS b/doc/COMMANDS index d739200fb..263e4f0a5 100644 --- a/doc/COMMANDS +++ b/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. diff --git a/src/command.c b/src/command.c index d87b7786c..72742e993 100644 --- a/src/command.c +++ b/src/command.c @@ -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++; } diff --git a/src/command.h b/src/command.h index 59f6e433f..f08ebb16a 100644 --- a/src/command.h +++ b/src/command.h @@ -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); diff --git a/src/inputPlugins/ogg_plugin.c b/src/inputPlugins/ogg_plugin.c index e25798eaf..9a27ad712 100644 --- a/src/inputPlugins/ogg_plugin.c +++ b/src/inputPlugins/ogg_plugin.c @@ -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; diff --git a/src/interface.c b/src/interface.c index 651a84380..89229050d 100644 --- a/src/interface.c +++ b/src/interface.c @@ -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: */ |