Beispiel #1
0
def history(request, count=15, uid=None):

    page = parse_range(request.GET.get('page', None), 0, sys.maxint, 0)

    if uid:
        try:
            device = request.user.get_device_by_uid(uid, only_active=False)
        except DeviceDoesNotExist as e:
            messages.error(request, str(e))

    else:
        device = None

    history_obj = History(request.user, device)

    start = page*count
    end = start+count
    entries = list(history_obj[start:end])
    HistoryEntry.fetch_data(request.user, entries)

    return render(request, 'history.html', {
        'history': entries,
        'device': device,
        'page': page,
    })
Beispiel #2
0
def episode_list(podcast, user, offset=0, limit=None):
    """
    Returns a list of episodes, with their action-attribute set to the latest
    action. The attribute is unsert if there is no episode-action for
    the episode.
    """

    listeners = dict(episode_listener_counts(podcast))
    episodes = episodes_for_podcast(podcast, descending=True, skip=offset, limit=limit)

    if user.is_authenticated():

        # prepare pre-populated data for HistoryEntry.fetch_data
        podcasts_dict = dict( (p_id, podcast) for p_id in podcast.get_ids())
        episodes_dict = dict( (episode._id, episode) for episode in episodes)

        actions = get_podcasts_episode_states(podcast, user._id)
        actions = map(HistoryEntry.from_action_dict, actions)

        HistoryEntry.fetch_data(user, actions,
                podcasts=podcasts_dict, episodes=episodes_dict)

        episode_actions = dict( (action.episode_id, action) for action in actions)
    else:
        episode_actions = {}

    annotate_episode = partial(_annotate_episode, listeners, episode_actions)
    return map(annotate_episode, episodes)
Beispiel #3
0
def episode(request, episode):

    podcast = Podcast.get(episode.podcast)

    if not podcast:
        raise Http404

    if request.user.is_authenticated():

        episode_state = episode.get_user_state(request.user)
        is_fav = episode_state.is_favorite()


        # pre-populate data for fetch_data
        podcasts_dict = {podcast.get_id(): podcast}
        episodes_dict = {episode._id: episode}

        history = list(episode_state.get_history_entries())
        HistoryEntry.fetch_data(request.user, history,
                podcasts=podcasts_dict, episodes=episodes_dict)

        played_parts = EpisodeHeatmap(podcast.get_id(),
                episode._id, request.user._id, duration=episode.duration)

        devices = dict( (d.id, d.name) for d in request.user.devices )

    else:
        history = []
        is_fav = False
        played_parts = None
        devices = {}


    chapters = []
    for user, chapter in Chapter.for_episode(episode._id):
        chapter.is_own = request.user.is_authenticated() and \
                         user == request.user._id
        chapters.append(chapter)


    prev = podcast.get_episode_before(episode)
    next = podcast.get_episode_after(episode)

    return render(request, 'episode.html', {
        'episode': episode,
        'podcast': podcast,
        'prev': prev,
        'next': next,
        'history': history,
        'chapters': chapters,
        'is_favorite': is_fav,
        'played_parts': played_parts,
        'actions': EPISODE_ACTION_TYPES,
        'devices': devices,
    })
Beispiel #4
0
 def items(self, user):
     NUM_ITEMS = 20
     history = user.get_global_subscription_history(public=True)
     history = skip_pairs(history)
     history = list(history)[-NUM_ITEMS:]
     history = HistoryEntry.fetch_data(user, history)
     history = filter(lambda e:e.podcast, history)
     return history
Beispiel #5
0
def history(request, episode):
    """ shows the history of the episode """

    user = request.user
    podcast = podcast_by_id(episode.podcast)
    episode_state = episode_state_for_user_episode(user, episode)

    # pre-populate data for fetch_data
    podcasts_dict = {podcast.get_id(): podcast}
    episodes_dict = {episode._id: episode}

    history = list(episode_state.get_history_entries())
    HistoryEntry.fetch_data(user, history,
            podcasts=podcasts_dict, episodes=episodes_dict)

    devices = dict( (d.id, d.name) for d in user.devices )

    return render(request, 'episode-history.html', {
        'episode': episode,
        'podcast': podcast,
        'history': history,
        'actions': EPISODE_ACTION_TYPES,
        'devices': devices,
    })
Beispiel #6
0
def _wrap_historyentry(action):
    from mygpo.users.models import HistoryEntry
    return HistoryEntry.from_action_dict(action['value'])