debian/0000755000000000000000000000000012150667214007172 5ustar debian/compat0000644000000000000000000000000211474024510010362 0ustar 7 debian/deejayd.dirs0000644000000000000000000000002011445731323011451 0ustar var/lib/deejayd debian/patches/0000755000000000000000000000000012150576552010625 5ustar debian/patches/mobileuifix0000644000000000000000000000235312150576552013067 0ustar 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-version0000644000000000000000000000062512150576552015617 0ustar --- 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_type0000644000000000000000000001673112150576552015634 0ustar 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/series0000644000000000000000000000017412150576552012044 0ustar set_volume_by_media_type lastfmfixes libraryfixes webradiofixes xinetypo mobileuifix xul-webui-firefox-version inotifyfixes debian/patches/lastfmfixes0000644000000000000000000000121612150576552013075 0ustar 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/libraryfixes0000644000000000000000000003224512150576552013261 0ustar 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/xinetypo0000644000000000000000000000120012150576552012420 0ustar 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/inotifyfixes0000644000000000000000000000657412150576552013304 0ustar 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/webradiofixes0000644000000000000000000000162312150576552013405 0ustar 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.install0000644000000000000000000000155112150576552012175 0ustar 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.logrotate0000644000000000000000000000050411445731323013630 0ustar /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.manpages0000644000000000000000000000004111445731323012306 0ustar man/deejayd.1 man/deejayd.conf.5 debian/deejayd-webui.install0000644000000000000000000000011111445731323013270 0ustar usr/lib/python*/*-packages/deejayd/webui/*.py usr/share/deejayd/htdocs/* debian/rules0000755000000000000000000000153712150576552010264 0ustar #!/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.install0000644000000000000000000000056412150576552014715 0ustar ../../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.init0000755000000000000000000001575011445731323014576 0ustar #!/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.manpages0000644000000000000000000000001211445731323013560 0ustar man/djc.1 debian/control0000644000000000000000000000652312150667150010602 0ustar 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.init0000755000000000000000000001213111445731452011467 0ustar #! /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.install0000644000000000000000000000064312150576552013452 0ustar 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/changelog0000644000000000000000000002616512150667214011056 0ustar 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/dirs0000644000000000000000000000001011445731323010044 0ustar usr/bin debian/deejayd-webui.links0000644000000000000000000000012212150576552012751 0ustar /usr/share/javascript/jquery/jquery.js /usr/share/deejayd/htdocs/js/lib/jquery.js debian/deejayd.docs0000644000000000000000000000005011445731323011443 0ustar debian/tmp/usr/share/doc/deejayd/* NEWS debian/deejayd.default0000644000000000000000000000361111445731452012150 0ustar # 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.logrotate0000644000000000000000000000047011445731323012521 0ustar /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.Debian0000644000000000000000000000342311445731323011234 0ustar = 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/copyright0000644000000000000000000000327112150576552011134 0ustar 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.install0000644000000000000000000000013111445731323013122 0ustar usr/lib/python*/*-packages/deejayd/player/xine.py usr/lib/python*/*-packages/pytyxi/*.py debian/source/0000755000000000000000000000000011472533346010476 5ustar debian/source/format0000644000000000000000000000001411445731452011702 0ustar 3.0 (quilt) debian/deejayd-gstreamer.install0000644000000000000000000000006711445731323014160 0ustar usr/lib/python*/*-packages/deejayd/player/gstreamer.py debian/50deejayd_steal-session0000644000000000000000000000276111445731323013545 0ustar # 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.postinst0000755000000000000000000000116311445731323012407 0ustar #!/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/watch0000644000000000000000000000020211445731323010214 0ustar # Compulsory line, this is a version 3 file version=3 http://mroy31.dyndns.org/~roy/archives/deejayd/ deejayd-([\d\.]*)\.tar\.gz debian/deejayd.xinitrc0000644000000000000000000000110111445731323012171 0ustar # 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