chiark
/
gitweb
/
~mdw
/
disorder
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge tag 'branchpoint-5.1' into release
[disorder]
/
python
/
disorder.py.in
diff --git
a/python/disorder.py.in
b/python/disorder.py.in
index 47d7090337d63f0ce55fc48e0b0f1d6ad831e3b8..8a758c9bc11a586a631d6dc5f96722ba368cee51 100644
(file)
--- a/
python/disorder.py.in
+++ b/
python/disorder.py.in
@@
-1,20
+1,18
@@
#
# Copyright (C) 2004, 2005, 2007, 2008 Richard Kettlewell
#
#
# 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
# 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.
#
# (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
+# G
NU G
eneral Public License for more details.
+#
# You should have received a copy of the GNU General Public License
# 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 <http://www.gnu.org/licenses/>.
#
"""Python support for DisOrder
#
"""Python support for DisOrder
@@
-52,7
+50,7
@@
import os
import pwd
import socket
import binascii
import pwd
import socket
import binascii
-import
sha
+import
hashlib
import sys
import locale
import sys
import locale
@@
-68,6
+66,18
@@
_unquoted = re.compile("[^\"' \\t\\n\\r][^ \t\n\r]*")
_response = re.compile("([0-9]{3}) ?(.*)")
_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_"
########################################################################
version = "_version_"
########################################################################
@@
-77,6
+87,7
@@
class Error(Exception):
"""Base class for DisOrder exceptions."""
class _splitError(Error):
"""Base class for DisOrder exceptions."""
class _splitError(Error):
+ """Error parsing a quoted string list"""
# _split failed
def __init__(self, value):
self.value = value
# _split failed
def __init__(self, value):
self.value = value
@@
-389,8
+400,7
@@
class client:
password = self.config['password']
else:
password = self.password
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())
h.update(password)
h.update(binascii.unhexlify(challenge))
self._simple("user", user, h.hexdigest())
@@
-430,6
+440,16
@@
class client:
res, details = self._simple("play", track)
return unicode(details) # because it's unicode in queue() output
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.
def remove(self, track):
"""Remove a track from the queue.
@@
-604,7
+624,7
@@
class client:
track -- the track to modify
key -- the preference to remove
"""
track -- the track to modify
key -- the preference to remove
"""
- self._simple("set", track, key
, value
)
+ self._simple("set", track, key)
def get(self, track, key):
"""Get a preference value.
def get(self, track, key):
"""Get a preference value.
@@
-824,7
+844,7
@@
class client:
Arguments:
key -- the preference to remove
"""
Arguments:
key -- the preference to remove
"""
- self._simple("set-global", key
, value
)
+ self._simple("set-global", key)
def getglobal(self, key):
"""Get a global preference value.
def getglobal(self, key):
"""Get a global preference value.
@@
-909,6
+929,10
@@
class client:
"""Add a scheduled event"""
self._simple("schedule-add", str(when), priority, action, *rest)
"""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"""
res, details = self._simple("playlist-delete", playlist)
def playlist_delete(self, playlist):
"""Delete a playlist"""
res, details = self._simple("playlist-delete", playlist)