Пример #1
0
    def add_user_recursive(self, user, docs):
        """ adds a user and all the podcast and episodes it references """

        # User
        docs.add(user._id)

        # Suggestions
        suggestions = suggestions_for_user(user)
        docs.add(suggestions._id)

        progress(0, len(docs), '', stream=sys.stderr)

        # Podcast States
        for p_state in podcast_states_for_user(user):
            self.add_podcast_state(p_state, docs)

            progress(0, len(docs), p_state, stream=sys.stderr)

            # Podcast
            podcast = podcast_by_id(p_state.podcast)
            self.add_podcast(podcast, docs)

            progress(0, len(docs), podcast, stream=sys.stderr)

            # Episodes
            for episode in episodes_for_podcast(podcast):
                self.add_episode(episode, docs)
                progress(0, len(docs), episode, stream=sys.stderr)

                e_state = episode_state_for_user_episode(user, episode)
                self.add_episode_state(e_state, docs)
                progress(0, len(docs), e_state, stream=sys.stderr)
Пример #2
0
def update_suggestions(user, max_suggestions=15):
    """ updates the suggestions of a user """

    # get suggestions object
    suggestion = suggestions_for_user(user)

    # calculate possible suggestions
    subscribed_podcasts = list(set(user.get_subscribed_podcasts()))
    subscribed_podcasts = filter(None, subscribed_podcasts)
    related = chain.from_iterable([p.related_podcasts for p in subscribed_podcasts])

    # filter out blacklisted podcasts
    related = filter(lambda pid: not pid in suggestion.blacklist, related)

    # get most relevant
    counter = Counter(related)
    get_podcast_id = itemgetter(0)
    suggested = map(get_podcast_id, counter.most_common(max_suggestions))
    suggestion.podcasts = suggested

    try:
        # update suggestions object
        suggestion.save()

    except ResourceConflict as ex:
        raise update_suggestions.retry(exc=ex)
Пример #3
0
def suggestions(request):
    suggestion_obj = suggestions_for_user(request.user)
    suggestions = suggestion_obj.get_podcasts()
    current_site = RequestSite(request)
    return render(request, 'suggestions.html', {
        'entries': suggestions,
        'url': current_site
    })
Пример #4
0
def suggestions(request, count, format):
    count = parse_range(count, 1, 100, 100)

    suggestion_obj = suggestions_for_user(request.user)
    suggestions = suggestion_obj.get_podcasts(count)
    title = _('gpodder.net - %(count)d Suggestions') % {'count': len(suggestions)}
    domain = RequestSite(request).domain
    p_data = lambda p: podcast_data(p, domain)
    return format_podcast_list(suggestions, format, title, json_map=p_data, jsonp_padding=request.GET.get('jsonp'))
Пример #5
0
def rate_suggestions(request):
    rating_val = int(request.GET.get('rate', None))

    suggestion = suggestions_for_user(request.user)
    suggestion.rate(rating_val, request.user._id)
    suggestion.save()

    messages.success(request, _('Thanks for rating!'))

    return HttpResponseRedirect(reverse('suggestions'))
Пример #6
0
def blacklist(request, blacklisted_podcast):
    user = request.user

    suggestion = suggestions_for_user(user)

    @repeat_on_conflict(['suggestion'])
    def _update(suggestion, podcast_id):
        suggestion.blacklist.append(podcast_id)
        suggestion.save()

    _update(suggestion=suggestion, podcast_id=blacklisted_podcast.get_id())
    update_suggestions.delay(user)

    return HttpResponseRedirect(reverse('suggestions'))