Code

options: configurable timeout for MPD connections
authorJon Sailor <jsailor@jesnetplus.com>
Thu, 22 Dec 2011 11:08:00 +0000 (12:08 +0100)
committerMax Kellermann <max@duempel.org>
Thu, 22 Dec 2011 11:08:00 +0000 (12:08 +0100)
NEWS
doc/ncmpc.1
src/conf.c
src/defaults.h
src/main.c
src/options.c
src/options.h

diff --git a/NEWS b/NEWS
index 4e0180bdc9d7e08645f3f0341d6bea732898605d..068baf26619a2c278d559262f057597d8caee559 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,7 @@ ncmpc 0.20 - not yet released
   range
 * add a doxygen configuration file. Documentation will be generated if the
   configure script is called with --enable-documentation
+* configurable timeout for MPD connections
 
 
 ncmpc 0.19 - (07/23/2011)
index 6f48734ba32c828d827fd80480cba1b44a08fa6f..78c082eaa9bd7582c6466ce30faabdfa93a73385 100644 (file)
@@ -76,6 +76,12 @@ Connect to mpd on the specified port.
 .TP
 .B password = PASSWORD
 Connect to mpd using the specified password.
+.TP
+.B timeout = TIMEOUT
+Attempt to reconnect to mpd if a response to a command is not received within
+TIMEOUT seconds. Specifying a value in the configuration file overrides the
+"MPD_TIMEOUT" environment variable. If no timeout is specified in the
+configuration file or in the environment, the default is 1.5 seconds.
 .SS Interface
 .TP
 .B enable\-mouse = yes|no
index 9d1f8828d8d28d59dab74bbc71cf8bed4fe54801..9754fbd4b31df78615ccc28c539e9e7d835fabc2 100644 (file)
@@ -68,6 +68,7 @@
 #define CONF_HOST "host"
 #define CONF_PORT "port"
 #define CONF_PASSWORD "password"
+#define CONF_TIMEOUT "timeout"
 #define CONF_LYRICS_TIMEOUT "lyrics-timeout"
 #define CONF_SCROLL "scroll"
 #define CONF_SCROLL_SEP "scroll-sep"
@@ -489,6 +490,9 @@ parse_line(char *line)
                options.port = atoi(get_format(value));
        else if (!strcasecmp(CONF_PASSWORD, name))
                options.password = get_format(value);
+       else if (!strcasecmp(CONF_TIMEOUT, name))
+               options.timeout_ms = atoi(get_format(value))
+                                    * 1000 /* seconds -> milliseconds */;
        else if (!strcasecmp(CONF_LYRICS_TIMEOUT, name))
 #ifdef ENABLE_LYRICS_SCREEN
                options.lyrics_timeout = atoi(get_format(value));
index fac784d2eaa64012f61cc481e2c9f83f18f659f4..b8bc81ad518bf65ab5abea71c8800834e9f8f4e7 100644 (file)
@@ -36,6 +36,8 @@
 
 #define DEFAULT_TEXT_EDITOR "editor"
 
+#define DEFAULT_MPD_TIMEOUT 5000 /* 5 seconds */
+
 #define DEFAULT_SCROLL TRUE
 #define DEFAULT_SCROLL_SEP " *** "
 
index 7e3e3df114055dabaa6087c172e6dbf462bc1010..1581e78875658f50fd487015c2cc566fd248d435 100644 (file)
@@ -320,7 +320,7 @@ timer_reconnect(G_GNUC_UNUSED gpointer data)
        mpdclient_disconnect(mpd);
        success = mpdclient_connect(mpd,
                                    options.host, options.port,
-                                   5000,
+                                   options.timeout_ms,
                                    options.password);
        if (!success) {
                /* try again in 5 seconds */
index 47fc3b9715e72829758d811642b426bac4d7012b..1b3e9af09cbfb31e7edf7e79ef41d39094214c92 100644 (file)
@@ -60,6 +60,7 @@ options_t options = {
        .audible_bell = true,
        .bell_on_wrap = true,
        .status_message_time = 3,
+       .timeout_ms = DEFAULT_MPD_TIMEOUT,
 #ifndef NCMPC_MINI
        .scroll = DEFAULT_SCROLL,
        .welcome_screen_list = true,
@@ -374,6 +375,9 @@ options_init(void)
 #ifndef NCMPC_MINI
        options.scroll_sep = g_strdup(DEFAULT_SCROLL_SEP);
 #endif
+       if (getenv("MPD_TIMEOUT") != NULL)
+               /* let libmpdclient parse the environment variable */
+               options.timeout_ms = 0;
 }
 
 void
index fc9f7a1e1c99682f4f7099568b3fe94dc2d2f883..6b1da8bfcc3f110b6925687056cd60369bc65704 100644 (file)
@@ -40,6 +40,7 @@ typedef struct {
        char **screen_list;
        bool display_remaining_time;
        int port;
+       int timeout_ms;
        int crossfade_time;
        int search_mode;
        int hide_cursor;