aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/COMMANDS11
-rw-r--r--src/command.c3
-rw-r--r--src/command.h2
-rw-r--r--src/inputPlugins/ogg_plugin.c39
-rw-r--r--src/interface.c32
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, &current_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: */