def main(): log.init('DAD_DEBUG') parser = optparse.OptionParser() parser.add_option('-p', '--playlist', action="store", dest="playlist", help="playlist to play from") parser.add_option('-r', '--random', action="store_true", dest="random", help="play tracks in random order") default = 'queue ! autoaudiosink' parser.add_option('-s', '--sink', action="store", dest="sink", help="GStreamer audio sink to output to (defaults to %s" % default, default=default) options, args = parser.parse_args(sys.argv[1:]) if len(args) < 1: print 'Please give a tracks pickle path' tracks = pickle.load(open(args[0])) # select two files to mix paths = args[1:] for p in paths: print 'Given %s' % p if len(paths) < 2: missing = 2 - len(paths) files = tracks.keys() if options.playlist: files = open(options.playlist).readlines() if options.random: paths.extend([random.choice(files) for i in range(missing)]) else: paths.extend(files[:missing]) for p in paths[2 - missing:]: print 'Chosen %s' % p paths = [path.strip() for path in paths] loop = gobject.MainLoop() mix = Mix(loop, tracks, options, paths[0], paths[1]) mix.setup() mix.start() loop.run()
def init(): externlog.init('DAD_DEBUG') externlog.setPackageScrubList('dad') externlog.debug('log', 'DAD logging initialized')
def main(): from twisted.internet import reactor from twisted.internet import defer defer.Deferred.debug = 1 log.init('DAD_DEBUG') log.logTwisted() log.debug('main', 'start') parser = optparse.OptionParser() parser.add_options(scouch.couchdb_option_list) parser.add_options(scouch.user_option_list) options, args = parser.parse_args() try: title = args[0] except: title = 'Love' # FIXME: allow customizing model and/or view(s) modelType = 'Couch' viewTypes = ['GTK', ] server = client.CouchDB(host=options.host, port=options.port) dbName = options.database db = daddb.DADDB(server, dbName) modelModule = 'dad%s.models.app.%sAppModel' % (modelType.lower(), modelType) amodel = reflect.namedAny(modelModule)(db) acontroller = app.AppController(amodel) for viewType in viewTypes: viewModule = 'dad%s.views.app.%sAppView' % (viewType.lower(), viewType) aview = reflect.namedAny(viewModule)() acontroller.addView(aview) # FIXME: gtk-specific aview.widget.connect('destroy', lambda _: reactor.stop()) controller, model, views = acontroller.getTriad('Track') view = trackv.TrackView() view = views[0] aview.add(view) # start loading artists and albums d = defer.Deferred() # get the first track matching the arg for title # FIXME: add an exception for a missing view d.addCallback(lambda _: db.viewDocs('view-tracks-title', couch.Track, include_docs=True, startkey=title, endkey=title + 'Z')) def eb(failure): log.warningFailure(failure) print 'track.py: FAILURE: ', failure reactor.stop() d.addCallback(lambda g: list(g)[0].id) d.addCallback(lambda t: controller.populate(t, userName=options.user)) d.addErrback(eb) d.callback(None) reactor.run()
from dad.extern.log import log log.init('DAD_DEBUG')
def main(): from twisted.internet import reactor from twisted.internet import defer defer.Deferred.debug = 1 log.init('DAD_DEBUG') log.logTwisted() log.debug('main', 'start') parser = optparse.OptionParser() parser.add_options(couch.couchdb_option_list) options, args = parser.parse_args() # FIXME: allow customizing model and/or view(s) modelType = 'Couch' viewTypes = ['GTK', ] # this rebinds and makes it break in views # db = client.CouchDB('localhost', dbName='dad') cache = client.MemoryCache() server = client.CouchDB(host=options.host, port=options.port, cache=cache) dbName = options.database db = daddb.DADDB(server, dbName) # cache artists from dadcouch.model import couch as mcouch d = db.viewDocs('artists', mcouch.Artist) def cacheCb(_): print 'THOMAS: cache: hits %r lookups %r' % ( db.db._cache.hits, db.db._cache.lookups) d.addCallback(cacheCb) modelModule = 'dad%s.models.app.%sAppModel' % (modelType.lower(), modelType) amodel = reflect.namedAny(modelModule)(db) acontroller = app.AppController(amodel) for viewType in viewTypes: viewModule = 'dad%s.views.app.%sAppView' % (viewType.lower(), viewType) aview = reflect.namedAny(viewModule)() acontroller.addView(aview) # FIXME: gtk-specific aview.widget.connect('destroy', lambda _: reactor.stop()) vbox = gtk.VBox() hbox = gtk.HBox() vbox.add(hbox) aview.widget.add(vbox) artistView = views.ArtistSelectorView() artistModel = daddb.ArtistSelectorModel(db) artistController = selector.ArtistSelectorController(artistModel) artistController.addView(artistView) acontroller.add(artistController) hbox.pack_start(artistView) albumView = views.AlbumSelectorView() albumModel = daddb.AlbumSelectorModel(db) albumController = selector.AlbumSelectorController(albumModel) albumController.addView(albumView) acontroller.add(albumController) hbox.pack_start(albumView) trackView = scheduler.TracksUI(selector=True) trackModel = daddb.TrackSelectorModel(db) trackController = selector.TrackSelectorController(trackModel) acontroller.add(trackController) trackController.addView(trackView) vbox.add(trackView) aview.widget.show_all() # listen to changes on artist selection so we can filter the albums view def artist_selected_cb(self, ids): album_ids = [] if ids: print 'THOMAS: selected artist ids', ids album_ids = albumModel.get_artists_albums(ids) albumView.set_album_ids(album_ids) trackView.set_artist_ids(ids) artistView.connect('selected', artist_selected_cb) def track_selected_cb(self, trackObj): w = gtk.Window() from dadgtk.views import track view = track.TrackView() w.add(view.widget) model = daddb.TrackModel(db) controller = trackc.TrackController(model) controller.addView(view) # FIXME: don't hardcode options.user = '******' d = controller.populate(trackObj.id, userName=options.user) d.addCallback(lambda _: w.set_title(trackObj.name)) w.show_all() trackView.connect('clicked', track_selected_cb) # start loading artists and albums d = defer.Deferred() d.addCallback(lambda _: artistController.populate()) d.addCallback(lambda _: albumController.populate()) d.addCallback(lambda _: trackController.populate()) d.addCallback(cacheCb) d.callback(None) reactor.run()