[Migration] remove / rewrite get_latest_episode_ids
[mygpo.git] / mygpo / share / userpage.py
blob3d53d52f09c18531814000e80130d3432525f39f
1 from datetime import datetime, timedelta
3 from django.shortcuts import render
4 from django.views.generic.base import View
5 from django.utils.decorators import method_decorator
6 from django.contrib.sites.models import RequestSite
7 from django.contrib.auth import get_user_model
9 from mygpo.podcasts.models import Episode
10 from mygpo.users.models import HistoryEntry
11 from mygpo.users.settings import FLATTR_USERNAME
12 from mygpo.subscriptions import get_subscribed_podcasts
13 from mygpo.decorators import requires_token
14 from mygpo.podcastlists.models import PodcastList
15 from mygpo.users.subscriptions import PodcastPercentageListenedSorter
16 from mygpo.history.stats import num_played_episodes, last_played_episodes
17 from mygpo.db.couchdb.episode_state import favorite_episode_ids_for_user
18 from mygpo.db.couchdb.user import get_seconds_played
22 class UserpageView(View):
23 """ Shows the profile page for a user """
25 @method_decorator(requires_token(token_name='userpage_token',
26 denied_template='userpage-denied.html'))
27 def get(self, request, username):
29 User = get_user_model()
30 user = User.objects.get(username=username)
31 month_ago = datetime.today() - timedelta(days=31)
32 site = RequestSite(request)
34 context = {
35 'page_user': user,
36 'flattr_username': user.profile.get_wksetting(FLATTR_USERNAME),
37 'site': site.domain,
38 'subscriptions_token': user.profile.get_token('subscriptions_token'),
39 'favorite_feeds_token': user.profile.get_token('favorite_feeds_token'),
40 'lists': self.get_podcast_lists(user),
41 'subscriptions': self.get_subscriptions(user),
42 'recent_episodes': last_played_episodes(user),
43 'seconds_played_total': self.get_seconds_played_total(user),
44 'seconds_played_month': self.get_seconds_played_since( user, month_ago),
45 'favorite_episodes': self.get_favorite_episodes(user),
46 'num_played_episodes_total': num_played_episodes(user),
47 'num_played_episodes_month': num_played_episodes(user, month_ago),
50 return render(request, 'userpage.html', context)
53 def get_podcast_lists(self, user):
54 return PodcastList.objects.filter(user=user)
57 def get_subscriptions(self, user):
58 subscriptions = [sp.podcast for sp in get_subscribed_podcasts(user)]
59 return PodcastPercentageListenedSorter(subscriptions, user)
61 def get_seconds_played_total(self, user):
62 return get_seconds_played(user)
65 def get_seconds_played_since(self, user, since):
66 return get_seconds_played(user, since=since)
69 def get_favorite_episodes(self, user):
70 favorite_ids = favorite_episode_ids_for_user(user)
71 favorites = Episode.objects.filter(id__in=favorite_ids)\
72 .select_related('podcast')\
73 .prefetch_related('slugs', 'podcast__slugs')
74 return favorites