X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/573a33bd102b37f058c0a750e68f62eca164e67d..ac9049029faddf79272076e79c3f4ab33da778a6:/python/disorder.py.in diff --git a/python/disorder.py.in b/python/disorder.py.in index 16685f5..fe054a9 100644 --- a/python/disorder.py.in +++ b/python/disorder.py.in @@ -1,20 +1,18 @@ # # Copyright (C) 2004, 2005, 2007, 2008 Richard Kettlewell # -# This program is free software; you can redistribute it and/or modify +# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or +# the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -# USA +# along with this program. If not, see . # """Python support for DisOrder @@ -52,7 +50,7 @@ import os import pwd import socket import binascii -import sha +import hashlib import sys import locale @@ -68,6 +66,18 @@ _unquoted = re.compile("[^\"' \\t\\n\\r][^ \t\n\r]*") _response = re.compile("([0-9]{3}) ?(.*)") +# hashes +_hashes = { + "sha1": hashlib.sha1, + "SHA1": hashlib.sha1, + "sha256": hashlib.sha256, + "SHA256": hashlib.sha256, + "sha384": hashlib.sha384, + "SHA384": hashlib.sha384, + "sha512": hashlib.sha512, + "SHA512": hashlib.sha512, +}; + version = "_version_" ######################################################################## @@ -389,8 +399,7 @@ class client: password = self.config['password'] else: password = self.password - # TODO support algorithms other than SHA-1 - h = sha.sha() + h = _hashes[algo]() h.update(password) h.update(binascii.unhexlify(challenge)) self._simple("user", user, h.hexdigest()) @@ -430,6 +439,16 @@ class client: res, details = self._simple("play", track) return unicode(details) # because it's unicode in queue() output + def playafter(self, target, tracks): + """Insert tracks into a specific point in the queue. + + Arguments: + target -- target ID or None to insert at start of queue + tracks -- a list of tracks to play""" + if target is None: + target = '' + self._simple("playafter", target, *tracks) + def remove(self, track): """Remove a track from the queue. @@ -909,9 +928,15 @@ class client: """Add a scheduled event""" self._simple("schedule-add", str(when), priority, action, *rest) + def adopt(self, id): + """Adopt a randomly picked track""" + self._simple("adopt", id) + def playlist_delete(self, playlist): """Delete a playlist""" - self._simple("playlist-delete", playlist) + res, details = self._simple("playlist-delete", playlist) + if res == 555: + raise operationError(res, details, "playlist-delete") def playlist_get(self, playlist): """Get the contents of a playlist @@ -937,7 +962,7 @@ class client: Arguments: playlist -- Playlist to set tracks -- Array of tracks""" - self._simple_body("playlist-set", tracks, playlist) + self._simple_body(tracks, "playlist-set", playlist) def playlist_set_share(self, playlist, share): """Set the sharing status of a playlist""" @@ -950,6 +975,11 @@ class client: return None return _split(details)[0] + def playlists(self): + """Returns the list of visible playlists""" + self._simple("playlists") + return self._body() + ######################################################################## # I/O infrastructure