X-Git-Url: http://git.kaliko.me/?p=python-musicpd.git;a=blobdiff_plain;f=mpd.py;h=674f71451cf18af4677d01df3da5a0a859f4aea6;hp=f18356bc8934c4f491467e1bfaec5271aaf905c0;hb=0f466f78e48c24cdf0f5e39645c19d58e3654012;hpb=41739e1aecb43642963e2cbb6164994c841cee1d diff --git a/mpd.py b/mpd.py index f18356b..674f714 100644 --- a/mpd.py +++ b/mpd.py @@ -58,89 +58,95 @@ class MPDClient(object): self._reset() self._commands = { # Status Commands - "clearerror": self._fetch_nothing, - "currentsong": self._fetch_object, - "idle": self._fetch_list, - "noidle": None, - "status": self._fetch_object, - "stats": self._fetch_object, + "clearerror": self._fetch_nothing, + "currentsong": self._fetch_object, + "idle": self._fetch_list, + "noidle": None, + "status": self._fetch_object, + "stats": self._fetch_object, # Playback Option Commands - "consume": self._fetch_nothing, - "crossfade": self._fetch_nothing, - "random": self._fetch_nothing, - "repeat": self._fetch_nothing, - "setvol": self._fetch_nothing, - "single": self._fetch_nothing, - "volume": self._fetch_nothing, + "consume": self._fetch_nothing, + "crossfade": self._fetch_nothing, + "mixrampdb": self._fetch_nothing, + "mixrampdelay": self._fetch_nothing, + "random": self._fetch_nothing, + "repeat": self._fetch_nothing, + "setvol": self._fetch_nothing, + "single": self._fetch_nothing, + "replay_gain_mode": self._fetch_nothing, + "replay_gain_status": self._fetch_item, + "volume": self._fetch_nothing, # Playback Control Commands - "next": self._fetch_nothing, - "pause": self._fetch_nothing, - "play": self._fetch_nothing, - "playid": self._fetch_nothing, - "previous": self._fetch_nothing, - "seek": self._fetch_nothing, - "seekid": self._fetch_nothing, - "stop": self._fetch_nothing, + "next": self._fetch_nothing, + "pause": self._fetch_nothing, + "play": self._fetch_nothing, + "playid": self._fetch_nothing, + "previous": self._fetch_nothing, + "seek": self._fetch_nothing, + "seekid": self._fetch_nothing, + "stop": self._fetch_nothing, # Playlist Commands - "add": self._fetch_nothing, - "addid": self._fetch_item, - "clear": self._fetch_nothing, - "delete": self._fetch_nothing, - "deleteid": self._fetch_nothing, - "move": self._fetch_nothing, - "moveid": self._fetch_nothing, - "playlist": self._fetch_playlist, - "playlistfind": self._fetch_songs, - "playlistid": self._fetch_songs, - "playlistinfo": self._fetch_songs, - "playlistsearch": self._fetch_songs, - "plchanges": self._fetch_songs, - "plchangesposid": self._fetch_changes, - "shuffle": self._fetch_nothing, - "swap": self._fetch_nothing, - "swapid": self._fetch_nothing, + "add": self._fetch_nothing, + "addid": self._fetch_item, + "clear": self._fetch_nothing, + "delete": self._fetch_nothing, + "deleteid": self._fetch_nothing, + "move": self._fetch_nothing, + "moveid": self._fetch_nothing, + "playlist": self._fetch_playlist, + "playlistfind": self._fetch_songs, + "playlistid": self._fetch_songs, + "playlistinfo": self._fetch_songs, + "playlistsearch": self._fetch_songs, + "plchanges": self._fetch_songs, + "plchangesposid": self._fetch_changes, + "shuffle": self._fetch_nothing, + "swap": self._fetch_nothing, + "swapid": self._fetch_nothing, # Stored Playlist Commands - "listplaylist": self._fetch_list, - "listplaylistinfo": self._fetch_songs, - "listplaylists": self._fetch_playlists, - "load": self._fetch_nothing, - "playlistadd": self._fetch_nothing, - "playlistclear": self._fetch_nothing, - "playlistdelete": self._fetch_nothing, - "playlistmove": self._fetch_nothing, - "rename": self._fetch_nothing, - "rm": self._fetch_nothing, - "save": self._fetch_nothing, + "listplaylist": self._fetch_list, + "listplaylistinfo": self._fetch_songs, + "listplaylists": self._fetch_playlists, + "load": self._fetch_nothing, + "playlistadd": self._fetch_nothing, + "playlistclear": self._fetch_nothing, + "playlistdelete": self._fetch_nothing, + "playlistmove": self._fetch_nothing, + "rename": self._fetch_nothing, + "rm": self._fetch_nothing, + "save": self._fetch_nothing, # Database Commands - "count": self._fetch_object, - "find": self._fetch_songs, - "list": self._fetch_list, - "listall": self._fetch_database, - "listallinfo": self._fetch_database, - "lsinfo": self._fetch_database, - "search": self._fetch_songs, - "update": self._fetch_item, + "count": self._fetch_object, + "find": self._fetch_songs, + "findadd": self._fetch_nothing, + "list": self._fetch_list, + "listall": self._fetch_database, + "listallinfo": self._fetch_database, + "lsinfo": self._fetch_database, + "search": self._fetch_songs, + "update": self._fetch_item, + "rescan": self._fetch_item, # Sticker Commands - "sticker get": self._fetch_item, - "sticker set": self._fetch_nothing, - "sticker delete": self._fetch_nothing, - "sticker list": self._fetch_list, - "sticker find": self._fetch_songs, + "sticker get": self._fetch_item, + "sticker set": self._fetch_nothing, + "sticker delete": self._fetch_nothing, + "sticker list": self._fetch_list, + "sticker find": self._fetch_songs, # Connection Commands - "close": None, - "kill": None, - "password": self._fetch_nothing, - "ping": self._fetch_nothing, + "close": None, + "kill": None, + "password": self._fetch_nothing, + "ping": self._fetch_nothing, # Audio Output Commands - "disableoutput": self._fetch_nothing, - "enableoutput": self._fetch_nothing, - "outputs": self._fetch_outputs, + "disableoutput": self._fetch_nothing, + "enableoutput": self._fetch_nothing, + "outputs": self._fetch_outputs, # Reflection Commands - "commands": self._fetch_list, - "notcommands": self._fetch_list, - "tagtypes": self._fetch_list, - "urlhandlers": self._fetch_list, - "decoders": self._fetch_plugins, + "commands": self._fetch_list, + "notcommands": self._fetch_list, + "tagtypes": self._fetch_list, + "urlhandlers": self._fetch_list, + "decoders": self._fetch_plugins, } def __getattr__(self, attr): @@ -153,10 +159,11 @@ class MPDClient(object): else: command = attr wrapper = self._execute - command = command.replace("_", " ") if command not in self._commands: - raise AttributeError("'%s' object has no attribute '%s'" % - (self.__class__.__name__, attr)) + command = command.replace("_", " ") + if command not in self._commands: + raise AttributeError("'%s' object has no attribute '%s'" % + (self.__class__.__name__, attr)) return lambda *args: wrapper(command, args) def _send(self, command, args): @@ -164,7 +171,9 @@ class MPDClient(object): raise CommandListError("Cannot use send_%s in a command list" % command.replace(" ", "_")) self._write_command(command, args) - self._pending.append(command) + retval = self._commands[command] + if retval is not None: + self._pending.append(command) def _fetch(self, command, args=None): if self._command_list is not None: @@ -182,6 +191,7 @@ class MPDClient(object): retval = self._commands[command] if callable(retval): return retval() + return retval def _execute(self, command, args): if self._iterating: @@ -386,7 +396,8 @@ class MPDClient(object): sock = socket.socket(af, socktype, proto) sock.connect(sa) return sock - except socket.error, err: + except socket.error as socket_err: + err = socket_err if sock is not None: sock.close() if err is not None: @@ -401,8 +412,8 @@ class MPDClient(object): self._sock = self._connect_unix(host) else: self._sock = self._connect_tcp(host, port) - self._rfile = self._sock.makefile("rb") - self._wfile = self._sock.makefile("wb") + self._rfile = self._sock.makefile("r") + self._wfile = self._sock.makefile("w") try: self._hello() except: