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)
def episodes(request, podcast): if not check_publisher_permission(request.user, podcast): return HttpResponseForbidden() episodes = episodes_for_podcast(podcast, descending=True) listeners = dict(episode_listener_counts(podcast)) max_listeners = max(listeners.values() + [0]) def annotate_episode(episode): listener_count = listeners.get(episode._id, None) return proxy_object(episode, listeners=listener_count) episodes = map(annotate_episode, episodes) return render(request, 'publisher/episodes.html', { 'podcast': podcast, 'episodes': episodes, 'max_listeners': max_listeners })