Example #1
0
    def stream(self, **kwargs):

        user = cherrypy.request.user

        user.active = datetime.datetime.now()

        remotes.update_user(user)

        if 'dead' in kwargs and kwargs['dead'] == 'true':
            raise cherrypy.HTTPError(status=503)

        if 'User-Agent' in cherrypy.request.headers:
            user_agent = cherrypy.request.headers['User-Agent']
        else:
            user_agent = None

        # allow only one streaming client at once, or weird things might occur
        if (user.id in Play.STREAM_PLAYING and Play.STREAM_PLAYING[user.id] is not None and
                Play.STREAM_PLAYING[user.id] != user_agent):
            raise cherrypy.HTTPError(status=503)

        if user.id in Play.STREAM_MODE and Play.STREAM_MODE[user.id] is not None:
            mode = Play.STREAM_MODE[user.id]
        else:
            mode = 'regular'

        if mode == "random":
            track = queue_dao.get_random_track(user.id)
            current_seconds = 0
        else:
            queue = queue_dao.get_next(user.id)

            if queue is not None:
                track = queue.track
                current_seconds = queue.current_seconds
            else:
                track = None

        if track is None:
            raise cherrypy.HTTPError(status=409)

        transcoder, format = transcoding.determine_transcoder(
            track,
            user_agent,
            [accept.value for accept in cherrypy.request.headers.elements('Accept')]
        )

        cherrypy.log(
            '%s is streaming "%s" in %s (original was %s) with "%s"' %
            (user.login, track, format, track.format, user_agent)
        )

        cherrypy.response.headers['Content-Type'] = format

        def track_generator():
            yield track, current_seconds

        return transcoding.transcode(track_generator(), transcoder)
Example #2
0
    def default(self):
        roles = (get_database().query(Role).order_by(Role.name).all())
        users = (get_database().query(User).order_by(User.login).all())

        for user in users:
            remotes.update_user(user)

        return {
            'users': users,
            'roles': roles
        }
Example #3
0
    def default(self, *args):
        if len(args) == 1:
            raise cherrypy.InternalRedirect('/users/_user/%s' % args[0])

        users = (get_database().query(User).order_by(User.active.desc()).all())

        for user in users:
            remotes.update_user(user)

        return {
            'users': users,
        }
Example #4
0
    def _user(self, login):
        try:
            user = (get_database().query(User)
                    .filter_by(login=login)
                    .order_by(User.login).one())
        except NoResultFound:
            raise cherrypy.NotFound()

        remotes.update_user(user)
        remotes_user = remotes.get_user(user)

        Dashboard.update_recent_tracks()

        recently_listeneds = Dashboard.get_recently_listeneds(user)

        now = datetime.now()

        def get_year(year):
            return ('%s' % year, self._get_top_artists(user.id, datetime(year, 1, 1), datetime(year, 12, 31)))

        top_artists_categories = [
            ('Overall', self._get_top_artists(user.id, None, None)),
            get_year(now.year - 1),
            get_year(now.year - 2),
            get_year(now.year - 3),
            get_year(now.year - 4),
            get_year(now.year - 5),
            ('This Month', self._get_top_artists(user.id, datetime(now.year, now.month, 1), None)),
        ]

        uploaded_albums = library_dao.get_albums_by_created_user(user.id)

        return {
            'user': user,
            'uploaded_albums': uploaded_albums,
            'top_artists_categories': top_artists_categories,
            'recently_listeneds': recently_listeneds,
            'remotes_user': remotes_user
        }
Example #5
0
    def default(self):
        user = cherrypy.request.user

        auth_url = new_auth = None
        need_config = False

        cache_key = 'settings_lastfm_session_key_%d' % cherrypy.request.user.id

        if user.lastfm_session_key is None:
            session_key = cache.get(cache_key)

            if session_key is not None:
                auth_url = session_key.get_auth_url()
                key = session_key.get_session_key()

                if key is not None:
                    cache.set(cache_key, None)
                    user.lastfm_session_key = key
                    user.lastfm_user = lastfm.get_authenticated_user_name(key)
                    auth_url = None
                    new_auth = True
            else:
                try:
                    session_key = SessionKey()
                    auth_url = session_key.get_auth_url()
                    cache.set(cache_key, session_key)
                except LastfmError:
                    need_config = True

        remotes.update_user(user)

        return {
            "user": user,
            'need_config': need_config,
            'auth_url': auth_url,
            'new_auth': new_auth
        }