Commit c0d7a1b8 authored by Michael Mayr's avatar Michael Mayr

Addeded methods to parse the server version and fail if a server does not...

Addeded methods to parse the server version and fail if a server does not support a specific command because it's too old
parent 980443c1
...@@ -33,6 +33,7 @@ class VLCClient(object): ...@@ -33,6 +33,7 @@ class VLCClient(object):
self.password = password self.password = password
self.telnet = None self.telnet = None
self.server_version = None
def connect(self): def connect(self):
"""Connect to VLC and login""" """Connect to VLC and login"""
...@@ -40,6 +41,13 @@ class VLCClient(object): ...@@ -40,6 +41,13 @@ class VLCClient(object):
self.telnet = telnetlib.Telnet() self.telnet = telnetlib.Telnet()
self.telnet.open(self.server, self.port) self.telnet.open(self.server, self.port)
# Parse version
result = self.telnet.expect([
"VLC media player ([\d.]+)",
])
self.server_version = result[1].group(1)
self.server_version_tuple = self.server_version.split('.')
# Login # Login
self.telnet.read_until("Password: ") self.telnet.read_until("Password: ")
self.telnet.write(self.password) self.telnet.write(self.password)
...@@ -64,6 +72,14 @@ class VLCClient(object): ...@@ -64,6 +72,14 @@ class VLCClient(object):
self.telnet.write(line + "\n") self.telnet.write(line + "\n")
return self.telnet.read_until(">")[1:-3] return self.telnet.read_until(">")[1:-3]
def _require_version(self, command, version):
if isinstance(version, basestring):
version = version.split('.')
if version > self.server_version_tuple:
raise OldServerVersion("Command '{0} requires at least VLC {1}".format(
command, ".".join(version)
))
# #
# Commands # Commands
# #
...@@ -73,6 +89,7 @@ class VLCClient(object): ...@@ -73,6 +89,7 @@ class VLCClient(object):
def status(self): def status(self):
"""current playlist status""" """current playlist status"""
self._require_version("status", "2.0.0")
return self.send_command("status") return self.send_command("status")
def info(self): def info(self):
...@@ -144,9 +161,13 @@ class VLCClient(object): ...@@ -144,9 +161,13 @@ class VLCClient(object):
class WrongPasswordError(Exception): class WrongPasswordError(Exception):
pass pass
class OldServerVersion(Exception):
pass
def main(): def main():
vlc = VLCClient("::1") vlc = VLCClient("ubuntu.local")
vlc.connect() vlc.connect()
print "Connected to VLC {0}".format(vlc.server_version)
try: try:
command = getattr(vlc, sys.argv[1]) command = getattr(vlc, sys.argv[1])
...@@ -154,11 +175,13 @@ def main(): ...@@ -154,11 +175,13 @@ def main():
print "usage: vlcclient.py command [argument]" print "usage: vlcclient.py command [argument]"
sys.exit(1) sys.exit(1)
attr = sys.argv[2] if len(sys.argv) > 2 else None
try: try:
print command(attr) attr = sys.argv[2] if len(sys.argv) > 2 else None
except TypeError: try:
print command() print command(attr)
except TypeError:
print command()
except OldServerVersion as e:
print "Error:", e
if __name__ == '__main__': if __name__ == '__main__':
main() main()
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment