debian/ 0000755 0000000 0000000 00000000000 12150667214 007172 5 ustar debian/compat 0000644 0000000 0000000 00000000002 11474024510 010362 0 ustar 7
debian/deejayd.dirs 0000644 0000000 0000000 00000000020 11445731323 011451 0 ustar var/lib/deejayd
debian/patches/ 0000755 0000000 0000000 00000000000 12150576552 010625 5 ustar debian/patches/mobileuifix 0000644 0000000 0000000 00000002353 12150576552 013067 0 ustar diff -r 0606583c7506 data/htdocs/themes/mobile/default.css
--- a/data/htdocs/themes/mobile/default.css Fri Jun 11 20:57:43 2010 +0200
+++ b/data/htdocs/themes/mobile/default.css Mon Jul 05 21:44:41 2010 +0200
@@ -102,7 +102,6 @@
#playing-block #playing-cover {
z-index: 0;
height: 311px;
- width: 311px;
}
#playing-control {
position: fixed; left: 0px; top: 301px;
diff -r 0606583c7506 deejayd/webui/mobile.py
--- a/deejayd/webui/mobile.py Fri Jun 11 20:57:43 2010 +0200
+++ b/deejayd/webui/mobile.py Mon Jul 05 21:44:41 2010 +0200
@@ -27,7 +27,6 @@
def header(self):
return """
-
@@ -91,6 +90,7 @@
Deejayd Webui
+
%(header)s
debian/patches/xul-webui-firefox-version 0000644 0000000 0000000 00000000625 12150576552 015617 0 ustar --- deejayd-0.10.0.orig/extensions/deejayd-webui/install.rdf
+++ deejayd-0.10.0/extensions/deejayd-webui/install.rdf
@@ -14,7 +14,7 @@
{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
3
- 3.6.*
+ 8.0.*
debian/patches/set_volume_by_media_type 0000644 0000000 0000000 00000016731 12150576552 015634 0 ustar changeset: 1641:d24cb0b83aa4
user: Mickael Royer
date: Wed Nov 03 09:07:28 2010 +0100
summary: [player] Set volume by media type (song, video, webradio) and save all volume states when deejayd quit
Index: deejayd.new/deejayd/player/_base.py
===================================================================
--- deejayd.new.orig/deejayd/player/_base.py 2010-11-26 22:24:37.000000000 +0100
+++ deejayd.new/deejayd/player/_base.py 2010-11-26 22:32:14.499757031 +0100
@@ -17,6 +17,7 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
import os,subprocess
+import cPickle as pickle
from deejayd.component import SignalingComponent
from deejayd.plugins import PluginError, IPlayerPlugin
@@ -47,11 +48,16 @@
self._source = None
self._media_file = None
self._replaygain = config.getboolean("general","replaygain")
-
+ self.__volume = {"song": 100, "video": 100, "webradio": 100}
def load_state(self):
# Restore volume
- self.set_volume(float(self.db.get_state("volume")))
+ recorded_volume = self.db.get_state("volume")
+ try:
+ self.__volume = pickle.loads(recorded_volume.encode("utf-8"))
+ except pickle.UnpicklingError: # old record
+ self.__volume["song"] = int(recorded_volume)
+
# Restore current media
media_pos = int(self.db.get_state("current"))
source = self.db.get_state("current_source")
@@ -123,11 +129,41 @@
self._change_file(self._source.get(nb,type,source))
def get_volume(self):
- raise NotImplementedError
+ return self.__volume[self.__get_vol_type()]
+
+ def set_volume(self, v, sig = True):
+ new_volume = min(100, int(v))
+ type = self.__get_vol_type()
+ self.__volume[type] = new_volume
+
+ # replaygain support
+ vol = self.__volume[type]
+ if self._replaygain and self._media_file is not None:
+ try: scale = self._media_file.replay_gain()
+ except AttributeError: pass # replaygain not supported
+ else:
+ vol = max(0.0, min(4.0, float(vol)/100.0 * scale))
+ vol = min(100, int(vol * 100))
+
+ # specific player implementation
+ self._set_volume(vol, sig)
- def set_volume(self,v):
+ def _set_volume(self, v, sig = True):
raise NotImplementedError
+ def __get_vol_type(self):
+ if self._media_file is None:
+ mediatype_by_source = {
+ "playlist": "song",
+ "panel": "song",
+ "video": "video",
+ "dvd": "video",
+ "webradio": "webradio"
+ }
+ return mediatype_by_source[self._source.current]
+ else:
+ return self._media_file['type']
+
def get_position(self):
raise NotImplementedError
@@ -242,7 +278,7 @@
# save state
current = self._media_file or {"pos": "-1", "source": "none"}
states = [
- (str(self.get_volume()), "volume"),
+ (pickle.dumps(self.__volume), "volume"),
(current["pos"], "current"),
(current["source"], "current_source"),
(str(self.get_position()), "current_pos"),
Index: deejayd.new/deejayd/player/gstreamer.py
===================================================================
--- deejayd.new.orig/deejayd/player/gstreamer.py 2010-11-26 22:24:37.000000000 +0100
+++ deejayd.new/deejayd/player/gstreamer.py 2010-11-26 22:32:14.499757031 +0100
@@ -34,7 +34,6 @@
def __init__(self, db, plugin_manager, config):
UnknownPlayer.__init__(self, db, plugin_manager, config)
- self.__volume = 100
# Open a Audio pipeline
pipeline = self.config.get("gstreamer", "audio_output")
@@ -152,26 +151,16 @@
self.start_play()
# replaygain reset
- self.set_volume(self.__volume, sig=False)
+ self.set_volume(self.get_volume(), sig=False)
if sig: self.dispatch_signame('player.status')
self.dispatch_signame('player.current')
- def get_volume(self):
- return self.__volume
-
- def set_volume(self, vol, sig=True):
- self.__volume = min(100, int(vol))
- v = float(self.__volume)/100
- # replaygain support
- if self._replaygain and self._media_file is not None:
- try: scale = self._media_file.replay_gain()
- except AttributeError: pass # replaygain not supported
- else:
- v = max(0.0, min(4.0, v * scale))
- v = float(min(100, int(v * 100)))/100
+ def _set_volume(self, vol, sig=True):
+ v = float(vol)/100
self.bin.set_property('volume', v)
- if sig: self.dispatch_signame('player.status')
+ if sig:
+ self.dispatch_signame('player.status')
def get_position(self):
if gst.STATE_NULL != self.__get_gst_state() and \
Index: deejayd.new/deejayd/player/xine.py
===================================================================
--- deejayd.new.orig/deejayd/player/xine.py 2010-11-26 22:24:37.000000000 +0100
+++ deejayd.new/deejayd/player/xine.py 2010-11-26 22:32:26.447757007 +0100
@@ -59,9 +59,6 @@
# init vars
self.__supports_gapless = self.__xine.has_gapless()
- self.__audio_volume = 100
- self.__video_volume = 100
-
self.__window = None
self.__stream = None
self.__osd = None
@@ -101,7 +98,7 @@
{"lang": _("Audio channel %d") % (i+1,), "ix": i})
self._media_file["audio"] = audio_channels
- needs_video = self.current_is_video()
+ needs_video = self._media_file["type"] == "video"
if self.__stream:
stream_should_change = (needs_video and\
not self.__stream.has_video())\
@@ -142,7 +139,7 @@
raise ex
if self.__window:
- self.__window.show(self.current_is_video())
+ self.__window.show(needs_video)
# init video information
if needs_video:
@@ -246,27 +243,7 @@
def _player_get_slang(self):
return self.__stream.get_param(xine.Stream.XINE_PARAM_SPU_CHANNEL)
- def get_volume(self):
- if self.current_is_video():
- return self.__video_volume
- else:
- return self.__audio_volume
-
- def set_volume(self, vol, sig = True):
- new_volume = min(100, int(vol))
- if self.current_is_video():
- self.__video_volume = new_volume
- else:
- self.__audio_volume = new_volume
-
- # replaygain support
- vol = self.get_volume()
- if self._replaygain and self._media_file is not None:
- try: scale = self._media_file.replay_gain()
- except AttributeError: pass # replaygain not supported
- else:
- vol = max(0.0, min(4.0, float(vol)/100.0 * scale))
- vol = min(100, int(vol * 100))
+ def _set_volume(self, vol, sig = True):
if self.__stream:
self.__stream.set_volume(vol)
if sig:
@@ -310,10 +287,6 @@
self.supported_extensions = self.__xine.get_supported_extensions()
return format.strip(".") in self.supported_extensions
- def current_is_video(self):
- return self._media_file is not None\
- and self._media_file['type'] == 'video'
-
def close(self):
UnknownPlayer.close(self)
self.__xine.destroy()
debian/patches/series 0000644 0000000 0000000 00000000174 12150576552 012044 0 ustar set_volume_by_media_type
lastfmfixes
libraryfixes
webradiofixes
xinetypo
mobileuifix
xul-webui-firefox-version
inotifyfixes
debian/patches/lastfmfixes 0000644 0000000 0000000 00000001216 12150576552 013075 0 ustar changeset: 1549:99edecb6a727
parent: 1542:8ac1ba1c56e0
user: Mickael Royer
date: Wed Apr 21 12:54:13 2010 +0200
summary: [lastfm] fix possible UnicodeDecode error
diff --git a/deejayd/plugins/lastfm.py b/deejayd/plugins/lastfm.py
--- a/deejayd/plugins/lastfm.py
+++ b/deejayd/plugins/lastfm.py
@@ -185,7 +185,7 @@
self.enabled = False
break
except AudioScrobblerError, ex: # log error and try later
- log.err(str(ex))
+ log.err(ex)
else:
tracks = []
if not self.queue.empty():
debian/patches/libraryfixes 0000644 0000000 0000000 00000032245 12150576552 013261 0 ustar changeset: 1550:f11e7ad893a2
user: Mickael Royer
date: Wed Apr 21 13:04:30 2010 +0200
summary: [library] Correctly encode root path to avoid UnicodeError exception
Index: deejayd/deejayd/mediadb/library.py
===================================================================
--- deejayd.orig/deejayd/mediadb/library.py 2011-03-08 09:03:53.000000000 +0100
+++ deejayd/deejayd/mediadb/library.py 2011-03-10 16:27:42.508157867 +0100
@@ -25,7 +25,7 @@
from deejayd.interfaces import DeejaydError
from deejayd.component import SignalingComponent
from deejayd.mediadb import formats
-from deejayd.utils import quote_uri, str_encode
+from deejayd.utils import quote_uri, str_decode
from deejayd import database, mediafilters
from deejayd.ui import log
@@ -39,8 +39,8 @@
def inotify_action_func(*__args, **__kw):
self = __args[0]
try:
- name = self._encode(__args[1])
- path = self._encode(__args[2])
+ name = self.fs_charset2unicode(__args[1])
+ path = self.fs_charset2unicode(__args[2])
except UnicodeError:
return
@@ -70,10 +70,11 @@
self._changes_cb = {}
self._changes_cb_id = 0
- self._path = os.path.abspath(path)
+ self._path = self.fs_charset2unicode(os.path.abspath(path))
# test library path
if not os.path.isdir(self._path):
- msg = _("Unable to find directory %s") % self._encode(self._path)
+ msg = _("Unable to find directory %s") \
+ % self.fs_charset2unicode(self._path)
raise NotFoundException(msg)
# Connection to the database
@@ -87,8 +88,12 @@
self.watcher = None
- def _encode(self, data):
- return str_encode(data, self._fs_charset)
+ def fs_charset2unicode(self, path, errors='strict'):
+ """
+ This function translate file paths from the filesystem encoded form to
+ unicode for internal processing.
+ """
+ return str_decode(path, self._fs_charset, errors)
def _build_supported_extension(self, player):
raise NotImplementedError
@@ -113,7 +118,7 @@
dirs = []
for dir_id, dir_path in dirs_rsp:
root, d = os.path.split(dir_path.rstrip("/"))
- if d != "" and root == self._encode(dir):
+ if d != "" and root == self.fs_charset2unicode(dir):
dirs.append(d)
return {'files': files_rsp, 'dirs': dirs}
@@ -235,6 +240,8 @@
return False
def _update_dir(self, dir, force = False, dispatch_signal = True):
+ dir = self.fs_charset2unicode(dir)
+
# dirname/filename : (id, lastmodified)
library_files = dict([(os.path.join(it[1],it[3]), (it[2],it[4]))\
for it in self.db_con.get_all_files(dir,self.type)])
@@ -303,8 +310,11 @@
changes = []
for root, dirs, files in os.walk(walk_root):
- try: root = self._encode(root)
+ try:
+ root = self.fs_charset2unicode(root)
except UnicodeError: # skip this directory
+ log.info("Directory %s skipped because of unhandled characters."\
+ % self.fs_charset2unicode(root, 'replace'))
continue
try: dir_id = library_dirs[root]
@@ -315,14 +325,17 @@
# search symlinks
for dir in dirs:
- try: dir = self._encode(dir)
+ try:
+ dir = self.fs_charset2unicode(dir)
+ dir_path = os.path.join(root, dir)
except UnicodeError: # skip this directory
+ log.info("Directory %s skipped because of unhandled characters."\
+ % self.fs_charset2unicode(dir_path, 'replace'))
continue
# Walk only symlinks that aren't in library root or in one of
# the additional known root paths which consist in already
# crawled and out-of-main-root directories
# (i.e. other symlinks).
- dir_path = os.path.join(root, dir)
if os.path.islink(dir_path):
if not self.is_in_a_root(dir_path, forbidden_roots):
forbidden_roots.append(os.path.realpath(dir_path))
@@ -338,8 +351,11 @@
dispatch_signal))
# else update files
- changes.extend(self.update_files(root, dir_id, files,
- library_files, force, dispatch_signal))
+ dir_changes = self.update_files(root, dir_id,
+ map(self.fs_charset2unicode, files),
+ library_files,
+ force, dispatch_signal)
+ changes.extend(dir_changes)
return changes
@@ -356,9 +372,7 @@
force = False, dispatch_signal=True):
changes = []
for file in files:
- try: file = self._encode(file)
- except UnicodeError: # skip this file
- continue
+ assert type(file) is unicode
file_path = os.path.join(root, file)
try:
@@ -409,7 +423,7 @@
except Exception, ex:
log.err(_("Unable to get infos from %s, see traceback")%file_path)
log.err("------------------Traceback lines--------------------")
- log.err(self._encode(traceback.format_exc()))
+ log.err(self.fs_charset2unicode(traceback.format_exc()))
log.err("-----------------------------------------------------")
return None
return file_info
@@ -600,9 +614,7 @@
changes = []
if len(files): cover = self.__find_cover(root)
for file in files:
- try: file = self._encode(file)
- except UnicodeError: # skip this file
- continue
+ assert type(file) is unicode
file_path = os.path.join(root, file)
try:
Index: deejayd/deejayd/mediadb/inotify.py
===================================================================
--- deejayd.orig/deejayd/mediadb/inotify.py 2010-11-26 22:40:24.000000000 +0100
+++ deejayd/deejayd/mediadb/inotify.py 2011-03-10 16:27:42.504157086 +0100
@@ -18,7 +18,6 @@
import os, threading, traceback, Queue
from deejayd.ui import log
-from deejayd.utils import str_encode
import pyinotify
#############################################################################
@@ -93,8 +92,8 @@
self.__record_changes.extend(changes)
self.__need_update = True
except Exception, ex:
- path = str_encode(os.path.join(event.path, event.name),
- errors='replace')
+ path = os.path.join(event.path, event.name)
+ path = library.fs_charset2unicode(path)
log.err(_("Inotify problem for '%s', see traceback") % path)
log.err("------------------Traceback lines--------------------")
log.err(traceback.format_exc())
@@ -117,18 +116,15 @@
return file_path in library.get_root_paths()
def __execute(self, type, library, event):
- # first be sure that path are correct
- try:
- path = library._encode(event.path)
- name = library._encode(event.name)
- except UnicodeError: # skip this event
- return False
+ path = library.fs_charset2unicode(event.path)
+ name = library.fs_charset2unicode(event.name)
+ # A decoding error would be raised and logged.
if type == "create":
if self.__occured_on_dirlink(library, event):
return library.add_directory(path, name, True)
elif not self.is_on_dir(event):
- self.__created_files.append((path, name))
+ return library.add_file(path, name)
elif type == "delete":
if self.__occured_on_dirlink(library, event):
return library.remove_directory(path, name, True)
Index: deejayd/deejayd/net/protocol.py
===================================================================
--- deejayd.orig/deejayd/net/protocol.py 2010-11-26 22:40:24.000000000 +0100
+++ deejayd/deejayd/net/protocol.py 2011-03-10 16:27:42.528156948 +0100
@@ -26,7 +26,7 @@
from deejayd.interfaces import DeejaydSignal
from deejayd.mediafilters import *
from deejayd.ui import log
-from deejayd.utils import str_encode
+from deejayd.utils import str_decode
from deejayd.rpc import Fault, DEEJAYD_PROTOCOL_VERSION
from deejayd.rpc.jsonparsers import loads_request
from deejayd.rpc.jsonbuilders import JSONRPCResponse, DeejaydJSONSignal
@@ -73,7 +73,7 @@
try: result = function(*args)
except Exception, ex:
if not isinstance(ex, Fault):
- log.err(str_encode(traceback.format_exc()))
+ log.err(str_decode(traceback.format_exc()))
result = Fault(self.FAILURE, _("error, see deejayd log"))
else:
result = ex
Index: deejayd/deejayd/plugins/lastfm.py
===================================================================
--- deejayd.orig/deejayd/plugins/lastfm.py 2011-03-10 16:26:47.995657449 +0100
+++ deejayd/deejayd/plugins/lastfm.py 2011-03-10 16:27:42.528156948 +0100
@@ -26,7 +26,7 @@
from deejayd.interfaces import DeejaydError
from deejayd.ui import log
from deejayd.plugins import IPlayerPlugin, PluginError
-from deejayd.utils import str_encode
+from deejayd.utils import str_decode
class AudioScrobblerFatalError(DeejaydError): pass
class AudioScrobblerError(DeejaydError):
@@ -79,8 +79,8 @@
url_handle = urllib2.urlopen(request)
except urllib2.HTTPError, error:
err_msg = _("Unable to connect to server: %s - %s")
- code = str_encode(error.code, errors="ignore")
- msg = str_encode(error.msg, errors="ignore")
+ code = str_decode(error.code, errors="ignore")
+ msg = str_decode(error.msg, errors="ignore")
raise AudioScrobblerError(err_msg % (code, msg))
except urllib2.URLError, error:
args = getattr(error.reason, 'args', None)
@@ -92,8 +92,8 @@
elif len(args) == 2:
code = str(error.reason.args[0])
message = error.reason.args[1]
- code = str_encode(code, errors="ignore")
- message = str_encode(message, errors="ignore")
+ code = str_decode(code, errors="ignore")
+ message = str_decode(message, errors="ignore")
err_msg = _("Unable to connect to server: %s - %s")
raise AudioScrobblerError(err_msg % (code, message))
Index: deejayd/deejayd/utils.py
===================================================================
--- deejayd.orig/deejayd/utils.py 2010-11-26 22:40:24.000000000 +0100
+++ deejayd/deejayd/utils.py 2011-03-10 16:27:42.528156948 +0100
@@ -24,14 +24,18 @@
path = path.encode('utf-8')
return "file://%s" % urllib.quote(path)
-def str_encode(data, charset = 'utf-8', errors='strict'):
+def str_decode(data, charset='utf-8', errors='strict'):
+ """
+ Decode the string given a supplied charset into a unicode string, and
+ log errors.
+ """
if type(data) is unicode: return data
try: rs = data.decode(charset, errors)
except UnicodeError:
- log.err(_("%s string has wrong characters, skip it") %\
- data.decode(charset, "ignore").encode("utf-8","ignore"))
- raise UnicodeError
- return unicode(rs)
+ log.err(_("'%s' string has badly encoded characters") %\
+ data.decode(charset, "replace"))
+ raise
+ return rs
def format_time(time):
"""Turn a time value in seconds into hh:mm:ss or mm:ss."""
Index: deejayd/scripts/deejayd
===================================================================
--- deejayd.orig/scripts/deejayd 2010-11-26 22:40:24.000000000 +0100
+++ deejayd/scripts/deejayd 2011-03-10 16:27:42.531658374 +0100
@@ -220,10 +220,10 @@
from deejayd.core import DeejayDaemonCore
deejayd_core = DeejayDaemonCore(config)
except Exception, ex:
- from deejayd.utils import str_encode
+ from deejayd.utils import str_decode
log.err(\
_("Unable to launch deejayd core, see traceback for more details"))
- log.msg(str_encode(traceback.format_exc()))
+ log.msg(str_decode(traceback.format_exc()))
sys.exit(1)
service = False
Index: deejayd/scripts/testserver
===================================================================
--- deejayd.orig/scripts/testserver 2010-11-26 22:40:24.000000000 +0100
+++ deejayd/scripts/testserver 2011-03-10 16:27:42.531658374 +0100
@@ -72,10 +72,10 @@
try: deejayd_core.close()
except:
pass
- from deejayd.utils import str_encode
+ from deejayd.utils import str_decode
err = "Unable to launch deejayd core, see traceback for more details"
log.msg(err)
- log.msg(str_encode(traceback.format_exc()))
+ log.msg(str_decode(traceback.format_exc()))
os.write(2, 'stopped\n')
sys.exit()
debian/patches/xinetypo 0000644 0000000 0000000 00000001200 12150576552 012420 0 ustar changeset: 1541:8ab0f35eeebf
user: Alexandre Rossi
date: Tue Apr 06 23:02:47 2010 +0200
summary: [xine] fix typo in xine init exception handling
diff --git a/deejayd/player/xine.py b/deejayd/player/xine.py
--- a/deejayd/player/xine.py
+++ b/deejayd/player/xine.py
@@ -326,7 +326,7 @@
driver_name = self.config.get("xine", "audio_output")
try:
audio_port = xine.AudioDriver(self.__xine, driver_name)
- except xine.xineError:
+ except xine.XineError:
raise PlayerError(_("Unable to open audio driver"))
# open video driver
debian/patches/inotifyfixes 0000644 0000000 0000000 00000006574 12150576552 013304 0 ustar Index: deejayd/deejayd/database/queries.py
===================================================================
--- deejayd.orig/deejayd/database/queries.py 2010-09-20 21:15:31.000000000 +0200
+++ deejayd/deejayd/database/queries.py 2011-03-22 23:07:18.464149868 +0100
@@ -189,11 +189,13 @@
cursor.execute(query,(dir+u"%%", type))
@query_decorator("fetchall")
- def get_all_dirlinks(self, cursor, dirlink, type = 'audio'):
+ def get_all_dirlinks(self, cursor, dir, type = 'audio'):
+ if not dir[:-1] == '/': dir = dir+ u'/'
+
query = "SELECT DISTINCT id,name FROM library_dir\
WHERE name LIKE %s AND type='dirlink' AND lib_type = %s\
ORDER BY name"
- cursor.execute(query,(dirlink+u"%%", type))
+ cursor.execute(query,(dir+u"%%", type))
def _medialist_answer(self, answer, infos = []):
files = []
Index: deejayd/deejayd/mediadb/inotify.py
===================================================================
--- deejayd.orig/deejayd/mediadb/inotify.py 2011-03-22 23:04:20.052108862 +0100
+++ deejayd/deejayd/mediadb/inotify.py 2011-03-22 23:07:18.492108994 +0100
@@ -120,6 +120,11 @@
name = library.fs_charset2unicode(event.name)
# A decoding error would be raised and logged.
+ # Raised events use real paths, and in the libraries, paths follow
+ # symlinks on directories. Therefore, paths must be fixed to use
+ # symlinks before being passed on to the library.
+ path = library.library_path(path)
+
if type == "create":
if self.__occured_on_dirlink(library, event):
return library.add_directory(path, name, True)
@@ -190,16 +195,17 @@
def watch_dir(self, dir_path, library):
if self.is_watched(dir_path):
raise ValueError('dir %s is already watched' % dir_path)
- wdd = self.__wm.add_watch(dir_path, self.EVENT_MASK,
+ realpath = os.path.realpath(dir_path)
+ wdd = self.__wm.add_watch(realpath, self.EVENT_MASK,
proc_fun=InotifyWatcher(library,self.__queue), rec=True,
auto_add=True)
- self.__watched_dirs[dir_path] = wdd
+ self.__watched_dirs[dir_path] = (realpath, wdd, )
def stop_watching_dir(self, dir_path):
if self.is_watched(dir_path):
- wdd = self.__watched_dirs[dir_path]
+ (realpath, wdd, ) = self.__watched_dirs[dir_path]
del self.__watched_dirs[dir_path]
- self.__wm.rm_watch(wdd[dir_path], rec=True)
+ self.__wm.rm_watch(wdd[realpath], rec=True)
def run(self):
notifier = self.notifier(self.__wm)
Index: deejayd/deejayd/mediadb/library.py
===================================================================
--- deejayd.orig/deejayd/mediadb/library.py 2011-03-22 23:04:20.019608901 +0100
+++ deejayd/deejayd/mediadb/library.py 2011-03-22 23:07:18.492108994 +0100
@@ -172,6 +172,14 @@
root_paths.append(dirlink)
return root_paths
+ def library_path(self, realpath):
+ for root in self.get_root_paths():
+ if os.path.islink(root):
+ realroot = os.path.realpath(root)
+ if realpath.startswith(realroot):
+ return os.path.join(root, realpath[len(realroot)+1:])
+ return realpath
+
def get_status(self):
status = []
if not self._update_end:
debian/patches/webradiofixes 0000644 0000000 0000000 00000001623 12150576552 013405 0 ustar changeset: 1555:0606583c7506
parent: 1542:8ac1ba1c56e0
user: Alexandre Rossi
date: Fri Jun 11 20:57:43 2010 +0200
summary: [xine] handle the case when a stream (i.e. all its mirrors) dies
diff --git a/deejayd/player/xine.py b/deejayd/player/xine.py
--- a/deejayd/player/xine.py
+++ b/deejayd/player/xine.py
@@ -392,7 +392,11 @@
self._media_file["uri"] = \
self._media_file["urls"]\
[self._media_file["url-index"]].encode("utf-8")
- self.start_play()
+ try:
+ self.start_play()
+ except PlayerError:
+ # This stream is really dead, all its mirrors
+ pass
return False
else:
try: self._media_file.played()
debian/deejayd.install 0000644 0000000 0000000 00000001551 12150576552 012175 0 ustar usr/bin/deejayd
usr/lib/python*/*-packages/deejayd/core.py
usr/lib/python*/*-packages/deejayd/component.py
usr/lib/python*/*-packages/deejayd/utils.py
usr/lib/python*/*-packages/deejayd/xmlobject.py
usr/lib/python*/*-packages/deejayd/rpc/protocol.py
usr/lib/python*/*-packages/deejayd/rpc/rdfbuilder.py
usr/lib/python*/*-packages/deejayd/rpc/jsonrpc.py
usr/lib/python*/*-packages/deejayd/net/protocol.py
usr/lib/python*/*-packages/deejayd/mediadb/*
usr/lib/python*/*-packages/deejayd/player/__init__.py
usr/lib/python*/*-packages/deejayd/player/_base.py
usr/lib/python*/*-packages/deejayd/plugins/*.py
usr/lib/python*/*-packages/deejayd/sources/*.py
usr/lib/python*/*-packages/deejayd/ui/*
usr/lib/python*/*-packages/deejayd/database/*
usr/share/locale/*/LC_MESSAGES/deejayd.mo
etc/deejayd.conf
debian/deejayd.xinitrc etc
debian/50deejayd_steal-session etc/X11/Xsession.d/
debian/deejayd-webui.logrotate 0000644 0000000 0000000 00000000504 11445731323 013630 0 ustar /var/log/deejayd-webui.log /var/log/deejayd-webui.*.log {
rotate 4
weekly
compress
copytruncate
missingok
notifempty
sharedscripts
postrotate
if invoke-rc.d --quiet deejayd status > /dev/null; then
invoke-rc.d --quiet deejayd reload > /dev/null
fi
endscript
}
debian/deejayd.manpages 0000644 0000000 0000000 00000000041 11445731323 012306 0 ustar man/deejayd.1
man/deejayd.conf.5
debian/deejayd-webui.install 0000644 0000000 0000000 00000000111 11445731323 013270 0 ustar usr/lib/python*/*-packages/deejayd/webui/*.py
usr/share/deejayd/htdocs/*
debian/rules 0000755 0000000 0000000 00000001537 12150576552 010264 0 ustar #!/usr/bin/make -f
# -*- makefile -*-
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
%:
dh $@ --with python2
override_dh_install:
# Fixing example conffile location as dh_install cannot rename
mkdir -p $(CURDIR)/debian/tmp/etc
cp -a $(CURDIR)/deejayd/ui/defaults.conf\
$(CURDIR)/debian/tmp/etc/deejayd.conf
# Removing jquery embedded copy, see debian/deejayd-webui.links
rm $(CURDIR)/debian/tmp/usr/share/deejayd/htdocs/js/lib/jquery.js
dh_install
# Install XUL extension using helper
install-xpi -p xul-ext-deejayd-webui extensions/deejayd-webui.xpi
override_dh_installinit:
# Inspired by mpd packaging, so that ALSA scripts can run first
dh_installinit -u"defaults 30 15"
# Inspired by gdm packaging
dh_installinit --name=deejayd-xserver -u"defaults 30 01"
override_dh_python2:
dh_python2 -Ndeejayd-webui-extension
debian/xul-ext-deejayd-webui.install 0000644 0000000 0000000 00000000564 12150576552 014715 0 ustar ../../extensions/deejayd-webui/chrome /usr/share/mozilla-extensions/deejayd-webui/
../../extensions/deejayd-webui/chrome.manifest /usr/share/mozilla-extensions/deejayd-webui/
../../extensions/deejayd-webui/defaults /usr/share/mozilla-extensions/deejayd-webui/
../../extensions/deejayd-webui/install.rdf /usr/share/mozilla-extensions/deejayd-webui/
debian/deejayd.deejayd-xserver.init 0000755 0000000 0000000 00000015750 11445731323 014576 0 ustar #!/bin/sh
### BEGIN INIT INFO
# Provides: deejayd-xserver
# Required-Start: $local_fs $remote_fs x11-common
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Launch the deejayd dedicated X server.
# Description: Prepare environement and launch a minimalistic X session.
### END INIT INFO
# Author: Alexandre Rossi
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Deejayd media player daemon dedicated X server"
NAME=deejayd-xserver
DAEMON=/usr/bin/X
DAEMON_USER=deejayd
HOME=/var/lib/$DAEMON_USER
PIDFILE=/var/run/$NAME.pid
AUTHFILE=/var/run/$NAME.authfile
XCLIENTS_PIDFILE=/var/run/$NAME-xclients.pid
LOGFILE=/var/log/$NAME.log
SCRIPTNAME=/etc/init.d/$NAME
# Exit if xorg is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/deejayd ] && . /etc/default/deejayd
# Exit if this method of starting Xorg for deejayd is disabled
[ "$DEEJAYD_XSERVER_METHOD" = "standalone" ] || exit 0
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
DEEJAYD_DISPLAYNAME=${DEEJAYD_DISPLAYNAME:=:0.0}
DEEJAYD_XAUTHORITY=${DEEJAYD_XAUTHORITY:=/var/lib/deejayd/Xauthority}
XAUTHORITY=$DEEJAYD_XAUTHORITY
DISPLAY=$DEEJAYD_DISPLAYNAME
export DISPLAY XAUTHORITY
# check for GNU hostname
if hostname --version > /dev/null 2>&1; then
if [ -z "`hostname --version 2>&1 | grep GNU`" ]; then
hostname=`hostname -f`
fi
fi
if [ -z "$hostname" ]; then
hostname=`hostname`
fi
authdisplay=${DEEJAYD_DISPLAYNAME:-:0}
authdisplaynet=$hostname$authdisplay
# Generate a MIT MAGIC COOKIE for authentification with the X server. This
# is stolen from /usr/bin/startx .
gen_auth_cookie()
{
# set up default Xauth info for this machine
mcookie=`/usr/bin/mcookie`
if test x"$mcookie" = x; then
echo "Couldn't create cookie"
exit 1
fi
dummy=0
# create a file with auth information for the server. ':0' is a dummy.
xserverauthfile=`mktemp -t serverauth.XXXXXXXXXX`
xauth -q -f $xserverauthfile << EOF
add :$dummy . $mcookie
EOF
echo $xserverauthfile > $AUTHFILE
# now add the same credentials to the client authority file
# if '$displayname' already exists do not overwrite it as another
# server man need it. Add them to the '$xserverauthfile' instead.
for displayname in $authdisplay $authdisplaynet; do
authcookie=`xauth list "$displayname" 2> /dev/null\
| sed -n "s/.*$displayname[[:space:]*].*[[:space:]*]//p"` 2>/dev/null;
if [ "z${authcookie}" = "z" ] ; then
xauth -q 2> /dev/null << EOF
add $displayname . $mcookie
EOF
else
dummy=$(($dummy+1));
xauth -q -f $xserverauthfile 2> /dev/null << EOF
add :$dummy . $authcookie
EOF
fi
done
for authfile in $DEEJAYD_XAUTHORITY $xserverauthfile; do
chgrp video $authfile && chmod g+r $authfile
done
}
do_start()
{
gen_auth_cookie
DAEMON_ARGS="$DEEJAYD_DISPLAYNAME $DEEJAYD_XORG_DAEMON_OPTS -auth $xserverauthfile"
# Return
# 0 if daemon has been started
# 2 if daemon could not be started
is_alive && return 0
start-stop-daemon --start --pidfile $PIDFILE --make-pidfile\
--exec $DAEMON\
-b -c $DAEMON_USER -- $DAEMON_ARGS \
|| return 2
# Wait for the X server to accept X connections.
maxtries=40
tries=0
while [ "`xorg_ping`" != "pong" ] && [ $tries -lt $maxtries ]
do
tries=`expr $tries + 1`
sleep 0.5
done
}
do_start_xclients()
{
# Start the X init script also as a daemon.
start-stop-daemon --start --pidfile $XCLIENTS_PIDFILE --make-pidfile\
--exec /bin/sh\
-b -c $DAEMON_USER -- $DEEJAYD_XINITRC\
|| return 2
}
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
# Xorg is suid so no user filter for start-stop-daemon
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
rm -f $PIDFILE
xauth remove $authdisplay $authdisplaynet
if [ -e $AUTHFILE ]; then
xserverauthfile=`cat $AUTHFILE`
rm -f $xserverauthfile
rm -f $AUTHFILE
fi
return "$RETVAL"
}
do_stop_xclients()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --user $DAEMON_USER --stop --quiet --retry=TERM/30/KILL/5 --pidfile $XCLIENTS_PIDFILE
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
rm -f $XCLIENTS_PIDFILE
return "$RETVAL"
}
is_alive () {
ret=1
if [ -r "$PIDFILE" ] ; then
pid=`cat $PIDFILE`
if [ -e /proc/$pid ] ; then
procname=`/bin/ps h -p $pid -C $NAME`
[ -n "$procname" ] && ret=0
fi
fi
return $ret
}
xorg_ping () {
# This function checks if a basic X client can probe the X server.
/usr/bin/xprop -root -display $authdisplay > /dev/null 2> /dev/null
case "$?" in
0) echo "pong" && return 0;;
*) echo "fail" && return 1;;
esac
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
[ "$VERBOSE" != no ] && log_daemon_msg "xclients"
do_start_xclients
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop_xclients
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
[ "$VERBOSE" != no ] && log_daemon_msg "xclients"
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop_xclients
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
do_start_xclients
;;
status)
echo -n "Status of $DESC: "
if is_alive ; then
echo "alive."
else
echo "dead."
exit 1
fi
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
exit 3
;;
esac
:
# vim: ts=4 sw=4 expandtab
debian/deejayd-client.manpages 0000644 0000000 0000000 00000000012 11445731323 013560 0 ustar man/djc.1
debian/control 0000644 0000000 0000000 00000006523 12150667150 010602 0 ustar Source: deejayd
Section: sound
Priority: extra
Maintainer: Alexandre Rossi
Build-Depends: debhelper (>= 7.0.50~), python (>= 2.6.6-3)
Build-Depends-Indep: gettext, xsltproc, docbook-xsl,
mozilla-devscripts (>>0.16~)
Standards-Version: 3.9.2.0
X-Python-Version: >= 2.4
Homepage: http://mroy31.dyndns.org/~roy/projects/deejayd
Vcs-Hg: http://mroy31.dyndns.org/repository/deejayd
Vcs-Browser: http://mroy31.dyndns.org/repository/deejayd
Package: deejayd
Architecture: all
Depends: ${misc:Depends}, ${python:Depends},
lsb-base (>= 3.0-6), logrotate, adduser,
deejayd-client (= ${binary:Version}),
deejayd-xine (= ${binary:Version}) | deejayd-gstreamer (= ${binary:Version}),
python-twisted,
python-pysqlite2 | python-mysqldb,
python-lxml, python-mutagen, python-kaa-metadata (>= 0.7.3)
Recommends: python-pyinotify (>= 0.6.0)
Suggests: deejayd-webui,
xserver-xorg, xauth, x11-utils, x11-common,
python-zope.interface
Breaks: deejayd-client (<< 0.8.4)
Description: Network controllable media player daemon
Deejayd is a multi purpose media player that can be completely controlled
through the network using XML messages.
It suppports playlists, searching, many media tags. It can playback many
music and video formats using either its xine (recommended) or its GStreamer
backend.
Package: deejayd-webui
Architecture: all
Depends: ${misc:Depends}, ${python:Depends},
deejayd (= ${binary:Version}), logrotate,
python-twisted-web, libjs-jquery
Description: Web interface for deejayd
This package provides, in order to control your deejayd server:
- a XUL web interface and,
- a pure HTML and AJAX web interface optimized for small screens.
.
The required webserver is embedded in the deejayd daemon.
Package: deejayd-client
Architecture: all
Depends: ${misc:Depends}, ${python:Depends}, python-simplejson | python (>= 2.6)
Breaks: djc (<= 0.8.1)
Replaces: djc
Description: Client library and command line tool to access the deejayd server
This package provides easy to use classes to manipulate the deejayd server,
abstracting XML message processing and network operations. It fully implements
the set of features exploitable from the server.
.
It also includes djc, which provides a subset of deejayd commands for your
deejayd server to be reachable from the command line.
Package: deejayd-xine
Section: video
Architecture: all
Depends: ${misc:Depends}, ${python:Depends},
python-ctypes (>= 1.0.0) | python (>= 2.5),
libxine1-x, libx11-6, libxext6
Description: Deejayd XINE backend
The deejayd media backend using the XINE library.
Package: deejayd-gstreamer
Architecture: all
Depends: ${misc:Depends}, ${python:Depends},
gstreamer0.10-plugins-base, python-gst0.10
Recommends: gstreamer0.10-gnomevfs, lsdvd
Description: Deejayd GStreamer backend
The deejayd media backend using the GStreamer library.
Package: xul-ext-deejayd-webui
Architecture: all
Depends: ${misc:Depends}, ${xpi:Depends}, iceweasel
Recommends: ${xpi:Recommends}
Provides: ${xpi:Provides}
Enhances: ${xpi:Enhances}
Breaks: deejayd-webui-extension
Replaces: deejayd-webui-extension
Description: Deejayd web user interface XUL extension
The Deejayd Iceweasel browser extension provides a richer user interface to
use as a client to the Deejayd server.
debian/deejayd.init 0000755 0000000 0000000 00000012131 11445731452 011467 0 ustar #! /bin/sh
### BEGIN INIT INFO
# Provides: deejayd
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: alsa-utils
# Should-Stop: alsa-utils
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Launch deejayd media player daemon.
# Description: Prepare environement and launch the deejayd music player
# daemon.
### END INIT INFO
# Author: Alexandre Rossi
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Deejayd media player daemon"
NAME=deejayd
DAEMON=/usr/bin/$NAME
DAEMON_USER=$NAME
HOME=/var/lib/$DAEMON_USER
PIDFILE=/var/run/$NAME.pid
LOGFILE=/var/log/$NAME.log
WEBUI_LOGFILE=/var/log/$NAME-webui.log
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Exit if daemon run by initscript is disabled
[ "$DEEJAYD_INITSCRIPT_ENABLED" = "true" ] || exit 0
DAEMON_ARGS="-u $DAEMON_USER -g audio,cdrom,video -p $PIDFILE -l $LOGFILE -w $WEBUI_LOGFILE $DEEJAYD_DAEMON_OPTS"
# Create logfiles if they do not exist
for FILE in "$LOGFILE" "$WEBUI_LOGFILE"
do
if [ ! -r "$FILE" ]
then
touch $FILE
chown deejayd:adm $FILE
fi
done
# If X method is managed by Deejayd scripts (not "off"), create, if it does not
# exist, a dummy auth file with appropriate permissions:
# - for the user that starts X to be able to load auth cookies in it in
# "reuse" mode,
# - and for users in the 'video' group to be able to contact the X server
# in "standalone" mode.
if [ ! -z "$DEEJAYD_XSERVER_METHOD" ] &&\
[ "$DEEJAYD_XSERVER_METHOD" != "off" ]; then
export XAUTHORITY=$DEEJAYD_XAUTHORITY
if [ ! -e "$DEEJAYD_XAUTHORITY" ]; then
# Just create a dummy auth file to make it have to appropriate file
# permissions.
touch $DEEJAYD_XAUTHORITY
chgrp video $DEEJAYD_XAUTHORITY && chmod 640 $DEEJAYD_XAUTHORITY
if [ "$DEEJAYD_XSERVER_METHOD" = "reuse" ]; then
chmod g+w $DEEJAYD_XAUTHORITY
fi
fi
fi
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
do_start()
{
# Return
# 0 if daemon has been started
# 2 if daemon could not be started
is_alive && return 0
start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON -- \
$DAEMON_ARGS \
|| return 2
}
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --user $DAEMON_USER --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --user $DAEMON_USER --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
rm -f $PIDFILE
return "$RETVAL"
}
do_reload() {
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
start-stop-daemon --user $DAEMON_USER --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
return 0
}
is_alive () {
ret=1
if [ -r $PIDFILE ] ; then
pid=`cat $PIDFILE`
if [ -e /proc/$pid ] ; then
procname=`/bin/ps h -p $pid -C $NAME`
[ -n "$procname" ] && ret=0
fi
fi
return $ret
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
reload|force-reload)
log_daemon_msg "Reloading $DESC" "$NAME"
do_reload
log_end_msg $?
;;
restart)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
status)
echo -n "Status of $DESC: "
if is_alive ; then
echo "alive."
else
echo "dead."
exit 1
fi
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload|status}" >&2
exit 3
;;
esac
:
# vim: ts=4 sw=4 expandtab
debian/deejayd-client.install 0000644 0000000 0000000 00000000643 12150576552 013452 0 ustar usr/lib/python*/*-packages/deejayd/__init__.py
usr/lib/python*/*-packages/deejayd/interfaces.py
usr/lib/python*/*-packages/deejayd/mediafilters.py
usr/lib/python*/*-packages/deejayd/rpc/__init__.py
usr/lib/python*/*-packages/deejayd/rpc/jsonbuilders.py
usr/lib/python*/*-packages/deejayd/rpc/jsonparsers.py
usr/lib/python*/*-packages/deejayd/net/client.py
usr/lib/python*/*-packages/deejayd/net/__init__.py
usr/bin/djc
debian/changelog 0000644 0000000 0000000 00000026165 12150667214 011056 0 ustar deejayd (0.10.0-5) unstable; urgency=low
* Fix typo in mozilla-devscripts versionned dep.
-- Alexandre Rossi Mon, 27 May 2013 14:32:13 +0000
deejayd (0.10.0-4) unstable; urgency=low
* Add upstream inotify fixes.
* Remove ${python:Breaks} and build dependency on python-support which
are not useful anymore with dh_python2.
* Update policy to 3.9.2: Nothing to do.
* deejayd-webui-extension :
- Set compatibility to Firefox 8.
- Rename to xul-ext-deejayd-webui per draft policy.
- Use mozilla-devscripts for install target (Closes: #638483).
-- Alexandre Rossi Sat, 03 Sep 2011 16:07:29 +0200
deejayd (0.10.0-3) unstable; urgency=low
* Add more upstream bug fixes.
* Add patch for Android mobile web ui fix.
* Simplify a lot debian/rules thanks to debhelper 7.
* Add upstream feature : save volume by media type.
* Add patch for XUL ext compatibility with Firefox 4.
* Use dh_python2 (Closes: #616787).
* Drop end dates in debian/copyright in order to avoid further updates.
-- Alexandre Rossi Tue, 15 Mar 2011 22:56:31 +0100
deejayd (0.10.0-2) unstable; urgency=low
* Add the ability to disable the deejayd initscript in /etc/default/deejayd.
* Switch to dpkg-source 3.0 (quilt) format
* Add some upstream bugfixes.
-- Alexandre Rossi Mon, 28 Jun 2010 22:14:35 +0200
deejayd (0.10.0-1) UNRELEASED; urgency=low
* New upstream version.
* Make deejayd-xserver init script depend on x11-common in the start
sequence.
* Add suggests of python-zope.interface for plugins.
* Add debian source format 1.0 .
-- Alexandre Rossi Sat, 03 Apr 2010 16:29:15 +0200
deejayd (0.9.0-4) unstable; urgency=low
* Add missing ${misc:Depends} dependency to all binary packages.
* Depend on libxine1-x instead of libxine1 for deejayd-xine (dh_xine is *NOT*
used because of the big useless builddep on libxine-dev) (Closes: #575118).
* Fix spelling mistake in deejayd.conf manual page (usefull → useful).
* Update Vcs-* fields in debian/control te reflect Hg switch.
* Update policy to 3.9.1: Handle djc binary package removal with
Breaks/Replaces instead of Conflicts.
* Fix override disparity of binary package deejayd-xine by allocating it to
section 'video'.
-- Alexandre Rossi Mon, 20 Sep 2010 21:18:57 +0200
deejayd (0.9.0-3) unstable; urgency=low
* Simplify debian/rules by removing per-python-version targets which are
not needed (Closes: #587326).
* Drop the 'current' keyword in the 'XS-Python-Version' debian/control
field to ensure compatibility with newer Python versions without
rebuilding.
-- Alexandre Rossi Mon, 20 Sep 2010 15:38:40 +0200
deejayd (0.9.0-2) unstable; urgency=low
* Xorg related scripts : fix auth files created in / by passing -t to mktemp.
* Fix another bashism in /etc/init.d/deejayd.
* Really fix build with python2.6 by applying patch from Kumar Appaiah
(Closes: #547815).
-- Alexandre Rossi Tue, 13 Oct 2009 20:48:47 +0200
deejayd (0.9.0-1) unstable; urgency=low
* New upstream version.
-- Alexandre Rossi Tue, 22 Sep 2009 07:58:33 +0200
deejayd (0.8.3-2) unstable; urgency=low
* Xorg connection scripts :
- do not force mktemp to use /tmp.
- fix possible bashisms in related scripts.
- ensure required variables have default values.
- change [ -r $filepath ] to [ -r "$filepath" ] in scripts to ensure proper
behaviour.
- when using the provided Xorg initscript, ensure the X server is ready to
accept connections before trying to launch the X clients.
* Update to policy 3.8.3 (nothing to do).
-- Alexandre Rossi Wed, 26 Aug 2009 22:05:34 +0200
deejayd (0.8.3-1) UNRELEASED; urgency=low
* New upstream release ensuring compatility with Firefox/Iceweasel >= 3.5 .
* Improve how Deejayd can connect to Xorg, see README.Debian and comments
in /etc/default/deejayd .
* Update to policy 3.8.2 (nothing to do).
-- Alexandre Rossi Mon, 06 Jul 2009 07:25:10 +0200
deejayd (0.8.2-1) UNRELEASED; urgency=low
* New upstream version fixing playback of albums lacking album art.
-- Alexandre Rossi Sun, 24 May 2009 10:30:52 +0200
deejayd (0.8.1-1) UNRELEASED; urgency=low
* New upstream version.
* Add new deejayd-webui-extension binary package.
* Remove the djc binary package and include the djc script in the
deejayd-client binary package.
* Improve debian/rules clean target by making it remove all .pyc files.
* Bump standards version to 3.8.1 :
- Ensure the start action of the init script does not start the daemon
again.
* Fixed default file (/etc/default/deejayd).
* Do not process the deejayd-webui-extension packages with dh_pycentral.
* Added NEWS to installed doc.
* Update Vcs-Browser field.
* Simplify clean rule thanks to upstream improvements (Closes: #535374).
* Add upstream tarball embbedded JQuery copy licence information to
debian/copyright.
* Fix build with Python 2.6 as distutils file locations change from
site-packages to dist-packages, for public modules (LP: #351626).
-- Alexandre Rossi Thu, 21 May 2009 15:09:11 +0200
deejayd (0.7.2-2) unstable; urgency=low
* Update to policy 3.8.0 (nothing to do).
* Add a README.Debian files for configuration information.
* Allow whitespace characters in activated_modes configuration variable.
* Upstream provided fixes for Firefox 3 in the XUL webui (search box and
others).
* Remove Debian specific manpages which have been included upstream (and
backport build system into this version).
* Some cleanups in debian/rules clean target.
-- Alexandre Rossi Wed, 23 Jul 2008 00:06:48 +0200
deejayd (0.7.2-1) unstable; urgency=low
* New upstream release.
* Added replaygain scanning script to installed files (in docs).
-- Alexandre Rossi Thu, 15 May 2008 21:20:56 +0200
deejayd (0.7.1-3) unstable; urgency=low
* Fix medialist sql request.
-- Alexandre Rossi Mon, 05 May 2008 20:17:38 +0200
deejayd (0.7.1-2) unstable; urgency=low
* Handle permission denied on rdf dir for webui.
* Put back bind_adresses comment in config file.
* Ensure that what is out of the sqlite db is utf-8, which prevents crashing
of at least the add-to-playlist command when used with non-ascii characters.
-- Alexandre Rossi Sat, 03 May 2008 11:35:17 +0200
deejayd (0.7.1-1) unstable; urgency=low
* New upstream release.
* Add missing build indep dep on gettext.
* Ensure binary packages versions consistency.
* Minor fix to short description.
* Make deps compatible with python (>= 2.5) with celementtree and ctypes in
the standard library.
-- Alexandre Rossi Wed, 16 Apr 2008 21:59:42 +0200
deejayd (0.7.0-1) unstable; urgency=low
* New upstream release.
* Do not declare a useless virtual package deejayd-mediabackend
(Closes: #472451).
* Fix log rotation using new log reopen on SIGHUP feature.
* Add upstream NEWS to docs.
* Fix watch file.
-- Alexandre Rossi Sat, 29 Mar 2008 19:22:16 +0100
deejayd (0.6.3-6) unstable; urgency=low
* Initial upload to Debian (Closes: #463973).
* Fix debian/copyright to state that some uptream files are GPL v2 only.
* pycentral Bug 452227 is fixed so removed related workaround in
debian/rules.
-- Alexandre Rossi Tue, 18 Mar 2008 07:55:11 +0100
deejayd (0.6.3-5) unstable; urgency=low
* Remove useless mediadb dir in default config.
* Make audio/video drivers default to auto.
* Logrotate support.
* Listen on localhost by default.
-- Alexandre Rossi Mon, 10 Mar 2008 23:13:40 +0100
deejayd (0.6.3-4) unstable; urgency=low
* Backported upstream patches :
- [webui] do not make tagless media files crash the javascript
- [mediadb] asf support
- do not fail to start if webui is not installed
- [webui] fix title
- [djc] fix audio_search args order to be consistent with doc
- [deejayd] add Flac support
* Remove useless tests.py file in debian diff.
* Point VCS browser link directly to src/ dir.
-- Alexandre Rossi Sat, 08 Mar 2008 12:54:21 +0100
deejayd (0.6.3-3) unstable; urgency=low
* Fixes thanks to comments from Steve Greenland :
- Remove duplicate debian/debian content.
- Use a GNU Make pattern rule to build manpages in debian/rules.
-- Alexandre Rossi Thu, 06 Mar 2008 07:35:18 +0100
deejayd (0.6.3-2) unstable; urgency=low
* Fixes thanks to comments from nijel@d.o (LSB, Build-Depends-Indep).
-- Alexandre Rossi Thu, 28 Feb 2008 19:01:14 +0100
deejayd (0.6.3-1) unstable; urgency=low
* New upstream release.
-- Alexandre Rossi Sun, 10 Feb 2008 22:12:45 +0100
deejayd (0.6.2-1) UNRELEASED; urgency=low
* 0.6.2 Release.
* Changes since 0.6.1
* fix in xine backend
* correctly hide cursor
* fix xine event callback
* fix in mediadb (skip file with bad caracter)
-- Mickael Royer Sun, 03 Feb 2008 09:47:15 +0100
deejayd (0.6.1-1) UNRELEASED; urgency=low
* 0.6.1 Release.
* Changes since 0.6.0
* fix important bug in xine backend
* fix symlinks support in audio/video library
-- Mickael Royer Mon, 28 Jan 2008 23:08:19 +0100
deejayd (0.6.0-1) UNRELEASED; urgency=low
* 0.6.0 Release.
* Changes since 0.5.0
* rewrite xine backend to use ctypes
* xine : add gapless support
* improve video mode
* add signaling support
* add inotify support to update audio/video library
* improve webui performance
* add i18n support (only french translation is available for now)
* A lot of cleanups and bugfixes
-- Mickael Royer Sat, 26 Jan 2008 17:22:49 +0100
deejayd (0.5.0-1) UNRELEASED; urgency=low
* 0.5.0 Release.
* Changes since 0.4.1
* xine backend : close stream when no media has been played
* integrate webui in deejayd. Ajaxdj is useless now
* support all commands in library client and djc
* A lot of cleanups and bugfixes
-- Mickael Royer Wed, 26 Dec 2007 10:42:18 +0100
deejayd (0.4.1-1) UNRELEASED; urgency=low
* 0.4.1 Release.
* Changes since 0.4
* Fix bugs in mediadb and video source
* Fix documentation generation and update it
-- Mickael Royer Sat, 10 Nov 2007 23:57:08 +0100
deejayd (0.4-1) UNRELEASED; urgency=low
* 0.4 Release.
* Changes since 0.2
* Add dvd support
* Add a python library client
* Add a command line client : djc
* Improve performance and memory usage with the use of celementtree module
* A lot of cleanups and bugfixes
-- Mickael Royer Sun, 4 Nov 2007 18:32:31 +0100
debian/dirs 0000644 0000000 0000000 00000000010 11445731323 010044 0 ustar usr/bin
debian/deejayd-webui.links 0000644 0000000 0000000 00000000122 12150576552 012751 0 ustar /usr/share/javascript/jquery/jquery.js /usr/share/deejayd/htdocs/js/lib/jquery.js
debian/deejayd.docs 0000644 0000000 0000000 00000000050 11445731323 011443 0 ustar debian/tmp/usr/share/doc/deejayd/*
NEWS
debian/deejayd.default 0000644 0000000 0000000 00000003611 11445731452 012150 0 ustar # Defaults for deejayd initscripts
# Whether to run the daemon using the supplied initscript
DEEJAYD_INITSCRIPT_ENABLED="false"
# Additional options that are passed to the Daemon.
DEEJAYD_DAEMON_OPTS=""
# Because Deejayd supports video, it makes sense for it to connect to an X
# server, even when it runs as a daemon with the privileges of a dedicated
# user. The following methods are available :
#
# - "off" (default)
# Do not try to connect deejayd to a X server.
#
# - "standalone"
# A dedicated X server is launched for the deejayd user.
#
# Please note that in order to setup this mode, you :
# - can edit /etc/deejayd.xinitrc in order to setup X clients to hold
# the X session.
# - must allow users not logged into a console to start the X server. This
# is done using the following command :
#
# # dpkg-reconfigure x11-common
#
# Also note that in this mode, a X cookie is available for users that
# are in the 'video' group in $DEEJAYD_XAUTHORITY (see below for path).
# Therefore, accessing the Deejayd dedicated X server for other users
# than the deejayd user is just a matter of adding the following lines to
# your shell startup script (e.g. ~/.bashrc) :
#
# XAUTHORITY=/var/lib/deejayd/Xauthority
# export XAUTHORITY
#
# - "reuse"
# An existing X session is reused by making the X Cookie available to
# the Deejayd daemon at X session startup. This is done in
# /etc/X11/Xsession.d/50deejayd_steal-session and therefore your session
# needs to be restarted for this setting to be taken into account.
#
#DEEJAYD_XSERVER_METHOD=off
#
# "standalone" and "reuse" mode specific options
#
DEEJAYD_DISPLAYNAME=:0
DEEJAYD_XAUTHORITY=/var/lib/deejayd/Xauthority
#
# "standalone" mode specific options
#
DEEJAYD_XINITRC=/etc/deejayd.xinitrc
DEEJAYD_XORG_DAEMON_OPTS="-nolisten tcp"
debian/deejayd.logrotate 0000644 0000000 0000000 00000000470 11445731323 012521 0 ustar /var/log/deejayd.log /var/log/deejayd.*.log {
rotate 4
weekly
compress
copytruncate
missingok
notifempty
sharedscripts
postrotate
if invoke-rc.d --quiet deejayd status > /dev/null; then
invoke-rc.d --quiet deejayd reload > /dev/null
fi
endscript
}
debian/README.Debian 0000644 0000000 0000000 00000003423 11445731323 011234 0 ustar = Deejayd for Debian =
== Daemon Configuration ==
All of the configuration for the daemon is kept in /etc/deejayd.conf . As for
many daemons, for the changes in the configuration file to be taken into
account, the daemon must be restarted.
$ sudo invoke-rc.d deejayd restart
The default configuration for deejayd is pretty minimal and you'll probably
want to change the following items from their default value :
- in the 'general' section, maybe enable more modes using the activated_modes
variable. The default does not enable video related modes.
activated_modes = playlist,webradio,video,dvd,panel
(this is new in version 0.7.0)
- in the 'webui' section, enable it using the 'enabled' configuration variable.
- you may want the daemon to be controllable from machines other than the one it
is running on. In the 'net' and 'webui' sections, you may want to change the
'bind_adresses' configuration variable to something other than 'localhost'.
'all' or the IP addresses of an interface you want to listen on should do the
trick.
- in the 'mediadb' section, you want to change the 'music_directory' and the
'video_directory' configuration variables to point to where those are on your
machine, though symlinks in the default directories would also work.
== Connection to an X server for video support ==
Deejayd supports video. But it will not try to establish a connection to a
X server until it is asked to play a video and if the 'video' mode is enabled.
The Debian packaging provides two modes of operation in that regard:
- 'standalone': Deejayd launches its own dedicated X server,
- 'reuse': Deejayd connects to an existing X session (e.g. launched by
(x|g|k)dm).
Configuration should be easy enough, and details are available in the comments
in /etc/default/deejayd .
debian/copyright 0000644 0000000 0000000 00000003271 12150576552 011134 0 ustar This package was debianized by Alexandre Rossi .
It was downloaded from
Upstream Authors:
Mickaël Royer
Alexandre Rossi
Copyright:
Copyright © 2006 Mickaël Royer
License:
This package 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
(at your option) any later version.
This package 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 package; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
On Debian systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.
The Debian packaging is © 2007, Alexandre Rossi
and is licensed under the GPL, see above.
The Gentoo packaging, which is part of the upstream tarball, is licensed under
the GPL v2. This consists of the files located under the gentoo/ directory.
On Debian systems, the complete text of the GNU General Public
License can be found in `/usr/share/common-licenses/GPL-2'.
The upstream tarball contains an embedded copy of JQuery, which is © 2008 John
Resig (jquery.com), and is dual licensed under the MIT and GPL v2 licenses.
debian/deejayd-xine.install 0000644 0000000 0000000 00000000131 11445731323 013122 0 ustar usr/lib/python*/*-packages/deejayd/player/xine.py
usr/lib/python*/*-packages/pytyxi/*.py
debian/source/ 0000755 0000000 0000000 00000000000 11472533346 010476 5 ustar debian/source/format 0000644 0000000 0000000 00000000014 11445731452 011702 0 ustar 3.0 (quilt)
debian/deejayd-gstreamer.install 0000644 0000000 0000000 00000000067 11445731323 014160 0 ustar usr/lib/python*/*-packages/deejayd/player/gstreamer.py
debian/50deejayd_steal-session 0000644 0000000 0000000 00000002761 11445731323 013545 0 ustar # This file is sourced by Xsession(5), not executed.
# Steal X session for the deejayd user if that is configured to do so
if [ -r /etc/default/deejayd ]; then
. /etc/default/deejayd
if [ "$DEEJAYD_XSERVER_METHOD" = "reuse" ]; then
# If we have an auth cookie matching the Deejayd configured DISPLAY,
# add it to the Deejayd auth cookie file. Also cleanup old auth cookies
# matching the same display.
DEEJAYD_DISPLAYNAME=${DEEJAYD_DISPLAYNAME:=:0.0}
if [ ! -z "$XAUTHORITY" ] && [ -r "$XAUTHORITY" ]; then
authcookie=`xauth list "$DEEJAYD_DISPLAYNAME" 2> /dev/null\
| sed -n "s/.*$DEEJAYD_DISPLAYNAME[[:space:]*].*[[:space:]*]//p"` 2>/dev/null;
if [ -r "$DEEJAYD_XAUTHORITY" ]; then
# To change the $DEEJAYD_XAUTHORITY file, we must use a
# temporary file because xauth uses one of its own in the
# same directory, and we do not have write permission in this
# directory.
tmpauthfile=`mktemp -t deejayd-reuse.XXXXXX`
cp $DEEJAYD_XAUTHORITY $tmpauthfile
xauth -f $tmpauthfile remove $DEEJAYD_DISPLAYNAME
if [ "z${authcookie}" != "z" ]; then
xauth -f $tmpauthfile << EOF
add $DEEJAYD_DISPLAYNAME . $authcookie
EOF
fi
cp $tmpauthfile $DEEJAYD_XAUTHORITY
rm $tmpauthfile
fi
fi
fi
fi
# vim:set ai et sts=2 sw=2 tw=80:
debian/deejayd.postinst 0000755 0000000 0000000 00000001163 11445731323 012407 0 ustar #!/bin/sh -e
DEEJAYD_USER=deejayd
if ! getent passwd $DEEJAYD_USER >/dev/null; then
adduser --quiet --ingroup audio --system --no-create-home \
--home /var/lib/deejayd $DEEJAYD_USER
fi
# add deejayd to required groups
for group in audio video cdrom; do
if groups $DEEJAYD_USER | grep -w -q -v $group; then
adduser $DEEJAYD_USER $group
fi
done
for i in /var/log/deejayd.log /var/lib/deejayd;
do
if ! dpkg-statoverride --list --quiet "$i" >/dev/null; then
dpkg-statoverride --force --quiet --update \
--add deejayd audio 0755 "$i"
fi
done
#DEBHELPER#
debian/watch 0000644 0000000 0000000 00000000202 11445731323 010214 0 ustar # Compulsory line, this is a version 3 file
version=3
http://mroy31.dyndns.org/~roy/archives/deejayd/ deejayd-([\d\.]*)\.tar\.gz
debian/deejayd.xinitrc 0000644 0000000 0000000 00000001101 11445731323 012171 0 ustar # The following lines require the appropiate tool to be installed.
# Change the default resolution.
#xrandr -s 1920x1200
# Set a background picture.
#xloadimage -onroot -quiet -fullscreen /path/to/bg.jpg
# Allocate some keyboard shortcuts.
#xbindkeys -f /etc/deejayd.xbindkeys
# The last line can contain an X client that will hold the session. It
# ususally is a window manager, but in our case, as we do not need window
# borders for deejayd with a standalone X server, it can be a simple clock.
#exec xdaliclock -24 -noseconds -transparent -fg black -geometry +1400+850