diff -uNr pympd-0.07.old/src/glade/pympd.glade pympd-0.07/src/glade/pympd.glade
--- pympd-0.07.old/src/glade/pympd.glade 2007-11-11 17:04:59.000000000 +0000
+++ pympd-0.07/src/glade/pympd.glade 2007-11-11 17:05:11.000000000 +0000
@@ -2206,7 +2206,7 @@
GTK_UPDATE_ALWAYS
False
False
- 1 0 100 1 10 10
+ 1 1 100 1 10 10
1
diff -uNr pympd-0.07.old/src/modules/mpdlib2.py pympd-0.07/src/modules/mpdlib2.py
--- pympd-0.07.old/src/modules/mpdlib2.py 2007-11-11 17:04:59.000000000 +0000
+++ pympd-0.07/src/modules/mpdlib2.py 2007-11-11 17:05:11.000000000 +0000
@@ -6,13 +6,39 @@
# OK
# ACK
+def get_socket(host, port, timeout):
+ sock_err = sock = sock_addrinfo = None
+ sock_addrinfo = socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM)
+
+ for res in sock_addrinfo:
+ sock_domain, sock_type, sock_proto, canonname, sock_addr = res
+ sock_err = None
+ try:
+ sock = socket.socket(sock_domain, sock_type, sock_proto)
+ sock.settimeout(timeout)
+ except socket.error, sock_err:
+ continue
+
+ try:
+ sock.connect(sock_addr)
+ except socket.error, sock_err:
+ sock.close()
+ continue
+
+ break
+
+ if sock_err:
+ raise sock_err
+
+ return sock
+
class socket_talker(object):
- def __init__(self, host, port):
+ def __init__(self, host, port, timeout):
self.host = host
self.port = port
- self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- self.sock.connect((host, port))
+ self.timeout = timeout
+ self.sock = get_socket(host, port, timeout)
self.file = self.sock.makefile("rb+")
self.current_line = ''
self.ack = ''
@@ -285,8 +311,8 @@
'\n }>')
class mpd_connection(object):
- def __init__(self, host, port):
- self.talker = socket_talker(host, port)
+ def __init__(self, host, port, timeout):
+ self.talker = socket_talker(host, port, timeout)
self.send = command_sender(self.talker)
self.fetch = response_fetcher(self.talker)
self.do = sender_n_fetcher(self.send, self.fetch)
@@ -321,8 +347,9 @@
password, host = parse_host(os.environ.get('MPD_HOST', 'localhost'))
host = kw.get('host', host)
password = kw.get('password', password)
+ timeout = kw.get('timeout', 1)
- conn = mpd_connection(host, port)
+ conn = mpd_connection(host, port, timeout)
if password:
conn.password(password)
return conn
diff -uNr pympd-0.07.old/src/modules/pympdclient2.py pympd-0.07/src/modules/pympdclient2.py
--- pympd-0.07.old/src/modules/pympdclient2.py 2007-11-11 17:04:59.000000000 +0000
+++ pympd-0.07/src/modules/pympdclient2.py 2007-11-11 17:05:11.000000000 +0000
@@ -48,9 +48,9 @@
#updated
# connect in mpdclient2 takes keyword arguments.
- def _connect(self, mpd_host, mpd_port, mpd_password=None):
+ def _connect(self, mpd_host, mpd_port, mpd_timeout, mpd_password=None):
try:
- self.mpd = mpdlib2.connect(host=mpd_host, port=mpd_port, password=mpd_password)
+ self.mpd = mpdlib2.connect(host=mpd_host, port=mpd_port, password=mpd_password, timeout=mpd_timeout)
return True
except:
diff -uNr pympd-0.07.old/src/modules/pympdriver.py pympd-0.07/src/modules/pympdriver.py
--- pympd-0.07.old/src/modules/pympdriver.py 2007-11-11 17:04:59.000000000 +0000
+++ pympd-0.07/src/modules/pympdriver.py 2007-11-11 17:05:11.000000000 +0000
@@ -944,7 +944,10 @@
else:
password = None
- if self.pympd._connect(get('host'), int(get('port')), password):
+ set('timeout', self.prefConnTimeoutSpinner.get_value_as_int())
+
+ err_msg = self.pympd._connect(get('host'), int(get('port')), get('timeout'), password)
+ if not err_msg:
self.statusLabel.set_text("Connected")
self.connected = True
self.correctConnectionButtons()
@@ -956,7 +959,11 @@
self.hdStoreBuilt = False
gobject.timeout_add(500, self.statusUpdate)
else:
- self.statusLabel.set_text("Connection Failed")
+ self.statusLabel.set_text("Connection Failed: %s" % err_msg)
+ self.connected = False
+ self.correctConnectionButtons()
+ self.statsLabel.set_label("")
+ self.updateLabels(False)
def correctConnectionButtons(self):
if self.connected == True:
@@ -2067,6 +2074,7 @@
def prefs_close(self, obj):
set('host', self.prefConnHostEntry.get_text())
set('port', self.prefConnPortEntry.get_text())
+ set('timeout', self.prefConnTimeoutSpinner.get_text())
self.saveConfigParser(CONFIG_FILE)
self.prefsDialog.hide()