diff -urN 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:32:08.000000000 +0000
+++ pympd-0.07/src/glade/pympd.glade 2007-11-11 17:32:31.000000000 +0000
@@ -2148,7 +2148,7 @@
True
6
- 2
+ 1
False
8
7
@@ -2206,7 +2206,7 @@
GTK_UPDATE_ALWAYS
False
False
- 1 0 100 1 10 10
+ 1 1 100 1 10 10
1
@@ -2429,169 +2429,6 @@
True
-
-
-
- True
- GTK_BUTTONBOX_SPREAD
- 0
-
-
-
- True
- True
- True
- GTK_RELIEF_NORMAL
- True
-
-
-
-
- True
- 0.5
- 0.5
- 0
- 0
- 0
- 0
- 0
- 0
-
-
-
- True
- False
- 2
-
-
-
- True
- gtk-disconnect
- 4
- 0.5
- 0.5
- 0
- 0
-
-
- 0
- False
- False
-
-
-
-
-
- True
- Disconnect
- True
- False
- GTK_JUSTIFY_LEFT
- False
- False
- 0.5
- 0.5
- 0
- 0
- PANGO_ELLIPSIZE_NONE
- -1
- False
- 0
-
-
- 0
- False
- False
-
-
-
-
-
-
-
-
-
-
-
- True
- True
- True
- GTK_RELIEF_NORMAL
- True
-
-
-
-
- True
- 0.5
- 0.5
- 0
- 0
- 0
- 0
- 0
- 0
-
-
-
- True
- False
- 2
-
-
-
- True
- gtk-connect
- 4
- 0.5
- 0.5
- 0
- 0
-
-
- 0
- False
- False
-
-
-
-
-
- True
- Connect
- True
- False
- GTK_JUSTIFY_LEFT
- False
- False
- 0.5
- 0.5
- 0
- 0
- PANGO_ELLIPSIZE_NONE
- -1
- False
- 0
-
-
- 0
- False
- False
-
-
-
-
-
-
-
-
-
-
- 0
- False
- True
-
-
False
diff -urN 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:32:08.000000000 +0000
+++ pympd-0.07/src/modules/mpdlib2.py 2007-11-11 17:32:19.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 -urN 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:32:08.000000000 +0000
+++ pympd-0.07/src/modules/pympdclient2.py 2007-11-11 17:32:28.000000000 +0000
@@ -1,5 +1,7 @@
import mpdlib2
import threading
+import socket
+import errno
def fillSong(song):
if not song.has_key('artist'):
@@ -48,13 +50,19 @@
#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:
- return False
+ return ""
+ except socket.error, sock_err:
+ if isinstance(sock_err, socket.timeout):
+ return str(sock_err)
+ else:
+ return (sock_err[0] == errno.EINPROGRESS and os.strerror(errno.ETIMEDOUT) \
+ or sock_err[1])
+ except Exception, msg:
+ return msg
#updated
# should work without adjustments.
diff -urN 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:32:08.000000000 +0000
+++ pympd-0.07/src/modules/pympdriver.py 2007-11-11 17:32:31.000000000 +0000
@@ -705,8 +705,6 @@
self.prefDispAll = self.xml.get_widget("pref_client_dbALL")
self.prefStopQuit = self.xml.get_widget("pref_client_stopQuit")
self.prefDebug = self.xml.get_widget("pref_client_debug")
- self.disconnectButton = self.xml.get_widget("disconnect_btn")
- self.connectButton = self.xml.get_widget("connect_btn")
self.playlistPrefView = self.xml.get_widget("playlistPrefView")
self.keyView = self.xml.get_widget("keyView")
@@ -944,7 +942,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,19 +957,19 @@
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:
- self.connectButton.set_property('sensitive',False)
self.menuConnect.set_property('sensitive',False)
- self.disconnectButton.set_property('sensitive',True)
self.menuDisconnect.set_property('sensitive',True)
else:
- self.connectButton.set_property('sensitive',True)
self.menuConnect.set_property('sensitive',True)
- self.disconnectButton.set_property('sensitive',False)
self.menuDisconnect.set_property('sensitive',False)
def initListStores(self):
@@ -2067,6 +2068,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()