Improved exception handling (#3746)
This commit is contained in:
parent
f37038921f
commit
1c24018fbb
1 changed files with 43 additions and 37 deletions
|
@ -79,18 +79,11 @@ class LogitechMediaServer(object):
|
||||||
|
|
||||||
def _get_http_port(self):
|
def _get_http_port(self):
|
||||||
"""Get http port from media server, it is used to get cover art."""
|
"""Get http port from media server, it is used to get cover art."""
|
||||||
http_port = None
|
http_port = self.query('pref', 'httpport', '?')
|
||||||
try:
|
if not http_port:
|
||||||
http_port = self.query('pref', 'httpport', '?')
|
_LOGGER.error("Failed to connect to server %s:%s",
|
||||||
if not http_port:
|
self.host, self.port)
|
||||||
_LOGGER.error("Unable to read data from server %s:%s",
|
return http_port
|
||||||
self.host, self.port)
|
|
||||||
return
|
|
||||||
return http_port
|
|
||||||
except ConnectionError as ex:
|
|
||||||
_LOGGER.error("Failed to connect to server %s:%s - %s",
|
|
||||||
self.host, self.port, ex)
|
|
||||||
return
|
|
||||||
|
|
||||||
def create_players(self):
|
def create_players(self):
|
||||||
"""Create a list of SqueezeBoxDevices connected to the LMS."""
|
"""Create a list of SqueezeBoxDevices connected to the LMS."""
|
||||||
|
@ -104,20 +97,27 @@ class LogitechMediaServer(object):
|
||||||
|
|
||||||
def query(self, *parameters):
|
def query(self, *parameters):
|
||||||
"""Send request and await response from server."""
|
"""Send request and await response from server."""
|
||||||
telnet = telnetlib.Telnet(self.host, self.port)
|
try:
|
||||||
if self._username and self._password:
|
telnet = telnetlib.Telnet(self.host, self.port)
|
||||||
telnet.write('login {username} {password}\n'.format(
|
if self._username and self._password:
|
||||||
username=self._username,
|
telnet.write('login {username} {password}\n'.format(
|
||||||
password=self._password).encode('UTF-8'))
|
username=self._username,
|
||||||
telnet.read_until(b'\n', timeout=3)
|
password=self._password).encode('UTF-8'))
|
||||||
message = '{}\n'.format(' '.join(parameters))
|
telnet.read_until(b'\n', timeout=3)
|
||||||
telnet.write(message.encode('UTF-8'))
|
message = '{}\n'.format(' '.join(parameters))
|
||||||
response = telnet.read_until(b'\n', timeout=3)\
|
telnet.write(message.encode('UTF-8'))
|
||||||
.decode('UTF-8')\
|
response = telnet.read_until(b'\n', timeout=3)\
|
||||||
.split(' ')[-1]\
|
.decode('UTF-8')\
|
||||||
.strip()
|
.split(' ')[-1]\
|
||||||
telnet.write(b'exit\n')
|
.strip()
|
||||||
return urllib.parse.unquote(response)
|
telnet.write(b'exit\n')
|
||||||
|
return urllib.parse.unquote(response)
|
||||||
|
except (OSError, ConnectionError) as error:
|
||||||
|
_LOGGER.error("Could not communicate with %s:%d: %s",
|
||||||
|
self.host,
|
||||||
|
self.port,
|
||||||
|
error)
|
||||||
|
return None
|
||||||
|
|
||||||
def get_player_status(self, player):
|
def get_player_status(self, player):
|
||||||
"""Get ithe status of a player."""
|
"""Get ithe status of a player."""
|
||||||
|
@ -128,18 +128,24 @@ class LogitechMediaServer(object):
|
||||||
# K (artwork_url): URL to remote artwork
|
# K (artwork_url): URL to remote artwork
|
||||||
tags = 'adK'
|
tags = 'adK'
|
||||||
new_status = {}
|
new_status = {}
|
||||||
telnet = telnetlib.Telnet(self.host, self.port)
|
try:
|
||||||
telnet.write('{player} status - 1 tags:{tags}\n'.format(
|
telnet = telnetlib.Telnet(self.host, self.port)
|
||||||
player=player,
|
telnet.write('{player} status - 1 tags:{tags}\n'.format(
|
||||||
tags=tags
|
player=player,
|
||||||
|
tags=tags
|
||||||
).encode('UTF-8'))
|
).encode('UTF-8'))
|
||||||
response = telnet.read_until(b'\n', timeout=3)\
|
response = telnet.read_until(b'\n', timeout=3)\
|
||||||
.decode('UTF-8')\
|
.decode('UTF-8')\
|
||||||
.split(' ')
|
.split(' ')
|
||||||
telnet.write(b'exit\n')
|
telnet.write(b'exit\n')
|
||||||
for item in response:
|
for item in response:
|
||||||
parts = urllib.parse.unquote(item).partition(':')
|
parts = urllib.parse.unquote(item).partition(':')
|
||||||
new_status[parts[0]] = parts[2]
|
new_status[parts[0]] = parts[2]
|
||||||
|
except (OSError, ConnectionError) as error:
|
||||||
|
_LOGGER.error("Could not communicate with %s:%d: %s",
|
||||||
|
self.host,
|
||||||
|
self.port,
|
||||||
|
error)
|
||||||
return new_status
|
return new_status
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue