It also removes some trailing spaces...

Signed-off-by: Romain Bignon <rom...@peerfuse.org>
---
 doc/mpc-bashrc     |    8 ++++----
 doc/mpc.1          |    7 +++++--
 src/command.c      |   42 ++++++++++++++++++++++++++++++++----------
 src/command.h      |    3 ++-
 src/libmpdclient.c |   14 +++++++++++++-
 src/libmpdclient.h |    4 ++++
 src/main.c         |    3 ++-
 src/status.c       |   16 ++++++++++------
 8 files changed, 72 insertions(+), 25 deletions(-)

diff --git a/doc/mpc-bashrc b/doc/mpc-bashrc
index 946c85a..07f2580 100644
--- a/doc/mpc-bashrc
+++ b/doc/mpc-bashrc
@@ -9,13 +9,13 @@
        cur="${COMP_WORDS[COMP_CWORD]}"
        first=${COMP_WORDS[1]}
        hold="";
-       
+
        # add more escape stuff as it's needed
        # because bash is a woman:
        scrub="s/\([><()\";\`']\)/\\\1/g";
-       
+
        case "$first" in
-               add) 
+               add)
                hold=`mpc tab ${cur} | sed "$scrub"`;
                COMPREPLY=($(compgen -W "${hold}"))
                return 0
@@ -57,7 +57,7 @@
                COMPREPLY=($(compgen -W "${hold}" | sed "$scrub"))
                return 0
                ;;
-               repeat|random)
+               repeat|random|single)
                COMPREPLY=($(compgen -W "0 1 true false yes no on off" 
"${cur}"))
                return 0
                ;;
diff --git a/doc/mpc.1 b/doc/mpc.1
index dd5d88b..77740a5 100644
--- a/doc/mpc.1
+++ b/doc/mpc.1
@@ -34,7 +34,7 @@ This command also takes the following defined escape 
sequences:
 .br
 Prevents the current song status from being printed on completion of some of
 the commands.
-.SH COMMANDS 
+.SH COMMANDS
 .TP
 .B add <file>
 Adds a song from the music database to the playlist. Can also read input from 
pipes. Use "mpc ls | mpc add" to add all files to the playlist.
@@ -71,7 +71,7 @@ Lists all files/folders in <directory>. If no <directory> is 
specified, lists al
 .TP
 .B lsplaylists
 Lists available playlists.
-.TP 
+.TP
 .B move <from> <to>
 Moves song at position <from> to the position <to> in the playlist.
 .TP
@@ -99,6 +99,9 @@ Toggle random mode if state ("on" or "off") is not specified.
 .B repeat <on|off>
 Toggle repeat mode if state ("on" or "off") is not specified.
 .TP
+.B single <on|off>
+Toggle single mode if state ("on" or "off") is not specified.
+.TP
 .B rm <file>
 Deletes a specific playlist.
 .TP
diff --git a/src/command.c b/src/command.c
index 2f40aa6..1cdef39 100644
--- a/src/command.c
+++ b/src/command.c
@@ -4,7 +4,7 @@
                                Daniel Brown <d...@cs.utexas.edu>
  * Copyright (C) 2008-2009 Max Kellermann <m...@duempel.org>
  * Project homepage: http://musicpd.org
- 
+
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -84,7 +84,7 @@ static mpd_Status * getStatus(mpd_Connection * conn) {
        return ret;
 }
 
-int cmd_add (int argc, char ** argv, mpd_Connection * conn ) 
+int cmd_add (int argc, char ** argv, mpd_Connection * conn )
 {
        int i;
 
@@ -136,7 +136,7 @@ cmd_crop(mpd_unused int argc, mpd_unused char **argv, 
mpd_Connection *conn)
 
        } else {
 
-               mpd_freeStatus(status); 
+               mpd_freeStatus(status);
                DIE( "You need to be playing to crop the playlist\n" );
 
        }
@@ -579,7 +579,7 @@ int cmd_listall ( int argc, char ** argv, mpd_Connection * 
conn )
        return 0;
 }
 
-int cmd_update ( int argc, char ** argv, mpd_Connection * conn) 
+int cmd_update ( int argc, char ** argv, mpd_Connection * conn)
 {
        const char * update = "";
        int i = 0;
@@ -705,7 +705,7 @@ int cmd_load ( int argc, char ** argv, mpd_Connection * 
conn )
        return 0;
 }
 
-static int do_search ( int argc, char ** argv, mpd_Connection * conn, int 
exact ) 
+static int do_search ( int argc, char ** argv, mpd_Connection * conn, int 
exact )
 {
        Constraint *constraints;
        int numconstraints;
@@ -737,17 +737,17 @@ static int do_search ( int argc, char ** argv, 
mpd_Connection * conn, int exact
        return 0;
 }
 
-int cmd_search ( int argc, char ** argv, mpd_Connection * conn ) 
+int cmd_search ( int argc, char ** argv, mpd_Connection * conn )
 {
        return do_search(argc, argv, conn, 0);
 }
 
-int cmd_find ( int argc, char ** argv, mpd_Connection * conn ) 
+int cmd_find ( int argc, char ** argv, mpd_Connection * conn )
 {
        return do_search(argc, argv, conn, 1);
 }
 
-int cmd_list ( int argc, char ** argv, mpd_Connection * conn ) 
+int cmd_list ( int argc, char ** argv, mpd_Connection * conn )
 {
        Constraint *constraints;
        int numconstraints = 0;
@@ -798,7 +798,7 @@ int cmd_list ( int argc, char ** argv, mpd_Connection * 
conn )
        return 0;
 }
 
-int cmd_volume ( int argc, char ** argv, mpd_Connection * conn ) 
+int cmd_volume ( int argc, char ** argv, mpd_Connection * conn )
 {
         struct int_value_change ch;
 
@@ -819,7 +819,7 @@ int cmd_volume ( int argc, char ** argv, mpd_Connection * 
conn )
 
        if (ch.is_relative)
                mpd_sendVolumeCommand(conn,ch.value);
-       else 
+       else
                mpd_sendSetvolCommand(conn,ch.value);
 
        my_finishCommand(conn);
@@ -882,6 +882,28 @@ int cmd_random ( int argc, char ** argv, mpd_Connection * 
conn )
        return 1;
 }
 
+int cmd_single ( int argc, char ** argv, mpd_Connection * conn )
+{
+       int mode;
+
+       if(argc==1) {
+               mode = get_boolean(argv[0]);
+               if (mode < 0)
+                       return -1;
+       }
+       else {
+               mpd_Status * status;
+               status = getStatus(conn);
+               mode = !status->single;
+               mpd_freeStatus(status);
+       }
+
+       mpd_sendSingleCommand(conn,mode);
+       my_finishCommand(conn);
+
+       return 1;
+}
+
 int cmd_crossfade ( int argc, char ** argv, mpd_Connection * conn )
 {
        int seconds;
diff --git a/src/command.h b/src/command.h
index 5a685d5..44ce035 100644
--- a/src/command.h
+++ b/src/command.h
@@ -4,7 +4,7 @@
                                Daniel Brown <d...@cs.utexas.edu>
  * Copyright (C) 2008-2009 Max Kellermann <m...@duempel.org>
  * Project homepage: http://musicpd.org
- 
+
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -50,6 +50,7 @@ int cmd_rm ( int argc, char ** argv, mpd_Connection * conn );
 int cmd_volume ( int argc, char ** argv, mpd_Connection * conn ) ;
 int cmd_repeat ( int argc, char ** argv, mpd_Connection * conn );
 int cmd_random ( int argc, char ** argv, mpd_Connection * conn );
+int cmd_single ( int argc, char ** argv, mpd_Connection * conn );
 int cmd_crossfade ( int argc, char ** argv, mpd_Connection * conn );
 int cmd_enable( int argc, char ** argv, mpd_Connection * conn );
 int cmd_disable( int argc, char ** argv, mpd_Connection * conn );
diff --git a/src/libmpdclient.c b/src/libmpdclient.c
index 74f0abc..74b6a80 100644
--- a/src/libmpdclient.c
+++ b/src/libmpdclient.c
@@ -678,6 +678,7 @@ mpd_Status * mpd_getStatus(mpd_Connection * connection) {
        status->volume = -1;
        status->repeat = 0;
        status->random = 0;
+       status->single = 0;
        status->playlist = -1;
        status->playlistLength = -1;
        status->state = -1;
@@ -708,6 +709,9 @@ mpd_Status * mpd_getStatus(mpd_Connection * connection) {
                else if(strcmp(re->name,"random")==0) {
                        status->random = atoi(re->value);
                }
+               else if(strcmp(re->name,"single")==0) {
+                       status->single = atoi(re->value);
+               }
                else if(strcmp(re->name,"playlist")==0) {
                        status->playlist = strtol(re->value,NULL,10);
                }
@@ -1315,7 +1319,7 @@ int mpd_sendAddIdCommand(mpd_Connection *connection, 
const char *file)
                retval = atoi(string);
                free(string);
        }
-       
+
        return retval;
 }
 
@@ -1510,6 +1514,14 @@ void mpd_sendRandomCommand(mpd_Connection * connection, 
int randomMode) {
        free(string);
 }
 
+void mpd_sendSingleCommand(mpd_Connection * connection, int singleMode) {
+       int len = strlen("single")+2+INTLEN+3;
+       char *string = malloc(len);
+       snprintf(string, len, "single \"%i\"\n", singleMode);
+       mpd_executeCommand(connection,string);
+       free(string);
+}
+
 void mpd_sendSetvolCommand(mpd_Connection * connection, int volumeChange) {
        int len = strlen("setvol")+2+INTLEN+3;
        char *string = malloc(len);
diff --git a/src/libmpdclient.h b/src/libmpdclient.h
index 24b23df..ef09e4c 100644
--- a/src/libmpdclient.h
+++ b/src/libmpdclient.h
@@ -235,6 +235,8 @@ typedef struct mpd_Status {
        int repeat;
        /* 1 if random is on, 0 otherwise */
        int random;
+       /* 1 if single is on, 0 otherwise */
+       int single;
        /* playlist length */
        int playlistLength;
        /* playlist, use this to determine when the playlist has changed */
@@ -507,6 +509,8 @@ void mpd_sendRepeatCommand(mpd_Connection * connection, int 
repeatMode);
 
 void mpd_sendRandomCommand(mpd_Connection * connection, int randomMode);
 
+void mpd_sendSingleCommand(mpd_Connection * connection, int singleMode);
+
 void mpd_sendSetvolCommand(mpd_Connection * connection, int volumeChange);
 
 /* WARNING: don't use volume command, its depreacted */
diff --git a/src/main.c b/src/main.c
index 6db8111..417edeb 100644
--- a/src/main.c
+++ b/src/main.c
@@ -4,7 +4,7 @@
                                Daniel Brown <d...@cs.utexas.edu>
  * Copyright (C) 2008-2009 Max Kellermann <m...@duempel.org>
  * Project homepage: http://musicpd.org
- 
+
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -82,6 +82,7 @@ static struct command {
        {"volume",      0,   1,   0,    cmd_volume,      "[+-]<num>", "Sets 
volume to <num> or adjusts by [+-]<num>"},
        {"repeat",      0,   1,   0,    cmd_repeat,      "<on|off>", "Toggle 
repeat mode, or specify state"},
        {"random",      0,   1,   0,    cmd_random,      "<on|off>", "Toggle 
random mode, or specify state"},
+       {"single",      0,   1,   0,    cmd_single,      "<on|off>", "Toggle 
single mode, or specify state"},
        {"search",      2,   -1,  0,    cmd_search,      "<type> <query>", 
"Search for a song"},
        {"find",        2,   -1,  0,    cmd_find,        "<type> <query>", 
"Find a song (exact match)"},
        {"list",        1,   -1,  0,    cmd_list,        "<type> [<type> 
<query>]", "Show all tags of <type>"},
diff --git a/src/status.c b/src/status.c
index 67e89b6..9da6942 100644
--- a/src/status.c
+++ b/src/status.c
@@ -4,7 +4,7 @@
                                Daniel Brown <d...@cs.utexas.edu>
  * Copyright (C) 2008-2009 Max Kellermann <m...@duempel.org>
  * Project homepage: http://musicpd.org
- 
+
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -47,17 +47,17 @@ void print_status (mpd_Connection *conn)
        status = mpd_getStatus(conn);
        printErrorAndExit(conn);
 
-       if(status->state == MPD_STATUS_STATE_PLAY || 
-                       status->state == MPD_STATUS_STATE_PAUSE) 
+       if(status->state == MPD_STATUS_STATE_PLAY ||
+                       status->state == MPD_STATUS_STATE_PAUSE)
        {
                float perc;
 
                mpd_nextListOkCommand(conn);
                printErrorAndExit(conn);
-                       
+
                while((entity = mpd_getNextInfoEntity(conn))) {
                        struct mpd_song *song = entity->info.song;
-                       
+
                        if(entity->type!=MPD_INFO_ENTITY_TYPE_SONG) {
                                mpd_freeInfoEntity(entity);
                                continue;
@@ -112,7 +112,11 @@ void print_status (mpd_Connection *conn)
        else printf("off   ");
 
        printf("random: ");
-       if(status->random) printf("on \n");
+       if(status->random) printf("on    ");
+       else printf("off   ");
+
+       printf("single: ");
+       if(status->single) printf("on \n");
        else printf("off\n");
 
        if (status->error != NULL)
-- 
1.5.6.5


------------------------------------------------------------------------------
_______________________________________________
Musicpd-dev-team mailing list
Musicpd-dev-team@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team

Reply via email to