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, })