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, })
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 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, })
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
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, })
def _wrap_historyentry(action): from mygpo.users.models import HistoryEntry return HistoryEntry.from_action_dict(action['value'])