Beispiel #1
0
 def render(self, request):
     """calls the renderDAAP method and returns its result."""
     logger.log_debug("%s %s" % (request.method, request.path))
     logger.log_debug(str(request.args))
     try:
         return Response(200, {"content-type": x_dmap_tagged}, self.renderDAAP(request).render())
     except Exception, e:
         logger.log_error("command failed: %s" % e)
         return Response(400, {"content-type": MimeType("text", "plain")}, str(e))
Beispiel #2
0
 def render(self, request):
     song = Song.objects.filter(id=self.songid)
     if song == []:
         return Response(404)
     try:
         f = open(song[0].file.path, "rb")
     except:
         return Response(404)
     mimetype = str(song[0].file.mimetype)
     logger.log_debug("%s -> %s (%s)" % (request.path, song[0].file.path, mimetype))
     mimetype = MimeType.fromString(mimetype)
     return Response(200, {"content-type": x_dmap_tagged}, FileStream(f))
Beispiel #3
0
 def _render(self, revision):
     if revision > 0:
         logger.log_debug("UpdateStream: new revision is %i" % revision)
     else:
         logger.log_debug("UpdateStream: signaling disconnect (revision %i)" % revision)
     # if _caughtUpdate was not called, then disconnect from the signal
     if self._signal:
         db_changed.disconnect(self._signal)
         self._signal = None
     # delete the reference to self.deferred
     self.deferred = None
     self.length = 0
     # remove stream from service.streams
     del self._service.streams[self]
     # write response
     mupd = CodeBag("mupd")
     mupd.add(ContentCode("mstt", 200))
     mupd.add(ContentCode("musr", int(revision)))
     return str(mupd.render())
Beispiel #4
0
 def render(self, request):
     logger.log_debug("%s %s" % (request.method, request.path))
     logger.log_debug(str(request.args))
     try:
         # get session id
         sid = request.args.get("session-id", ["0"])
         sid = int(sid[0])
         if sid == 0 or not sid in self.service.sessions:
             raise Exception("session-id %i is invalid" % sid)
         # get revision number
         rid = request.args.get("revision-number", ["0"])
         rid = int(rid[0])
         logger.log_debug("UpdateCommand: revision-number is %i" % rid)
         # if revision-number is not current revision number
         if not rid == DaapPrivate.REVISION_NUMBER:
             if rid < 0:
                 raise Exception("invalid revision-number %s" % rid)
             # return the current revision number
             mupd = CodeBag("mupd")
             mupd.add(ContentCode("mstt", 200))
             mupd.add(ContentCode("musr", int(DaapPrivate.REVISION_NUMBER)))
             return Response(200, {"content-type": x_dmap_tagged}, mupd.render())
         # create a new update stream to listen for db-changed signal
         stream = UpdateStream(self.service)
         return Response(200, {"content-type": x_dmap_tagged}, stream)
     except Exception, e:
         logger.log_error("UpdateCommand failed: %s" % e)
         return Response(400, {"content-type": MimeType("text", "plain")}, str(e))
Beispiel #5
0
 def render(self, request):
     logger.log_debug("%s %s" % (request.method, request.path))
     logger.log_debug(str(request.args))
     apso = CodeBag("apso")
     apso.add(ContentCode("mstt", 200))  # status code
     apso.add(ContentCode("muty", 1))  # always 1?
     # a playlist id of 0 is special and means list all items in the database.
     if self.plsid == 0:
         songs = Song.objects.all()
     # otherwise look up the playlist with the specified id
     else:
         pls = Playlist.objects.get(id=self.plsid)
         songs = pls.list_songs()
     apso.add(ContentCode("mtco", len(songs)))  # total number of matching records
     apso.add(ContentCode("mrco", len(songs)))  # total number of records returned
     listing = CodeBag("mlcl")
     apso.add(listing)
     d = defer.Deferred()
     d.addCallback(self._renderDAAP)
     d.addErrback(self._errDAAP)
     reactor.callLater(0, self._retrieveSongs, d, apso, listing, iter(songs))
     return d
Beispiel #6
0
    def render(self, request):
        logger.log_debug("%s %s" % (request.method, request.path))
        try:
            meta = "".join(request.args["meta"])
            # log_debug("[daap] ListItemsCommand requesting metadata fields: %s" % meta)
            from content_codes import reverse_table

            for field in meta.split(","):
                try:
                    code = reverse_table[field]
                except:
                    logger.log_debug("ListItemsCommand: '%s' is not a recognized content code" % field)
        except Exception, e:
            logger.log_debug("ListItemsCommand caught exception: %s" % e)
Beispiel #7
0
 def close(self):
     self.deferred = None
     self.length = 0
     logger.log_debug("UpdateStream: closed stream")
Beispiel #8
0
 def read(self):
     if self.deferred:
         logger.log_debug("UpdateStream: waiting for new revision")
         return self.deferred
     logger.log_debug("UpdateStream: finished read")
     return None