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
,
18 from mygpo
.favorites
.models
import FavoriteEpisode
21 class UserpageView(View
):
22 """ Shows the profile page for a user """
24 @method_decorator(requires_token(token_name
='userpage_token',
25 denied_template
='userpage-denied.html'))
26 def get(self
, request
, username
):
28 User
= get_user_model()
29 user
= User
.objects
.get(username
=username
)
30 month_ago
= datetime
.today() - timedelta(days
=31)
31 site
= RequestSite(request
)
35 'flattr_username': user
.profile
.settings
.get_wksetting(FLATTR_USERNAME
),
37 'subscriptions_token': user
.profile
.get_token('subscriptions_token'),
38 'favorite_feeds_token': user
.profile
.get_token('favorite_feeds_token'),
39 'lists': self
.get_podcast_lists(user
),
40 'subscriptions': self
.get_subscriptions(user
),
41 'recent_episodes': last_played_episodes(user
),
42 'seconds_played_total': seconds_played(user
),
43 'seconds_played_month': seconds_played(user
, month_ago
),
44 'favorite_episodes': FavoriteEpisode
.episodes_for_user(user
),
45 'num_played_episodes_total': num_played_episodes(user
),
46 'num_played_episodes_month': num_played_episodes(user
, month_ago
),
49 return render(request
, 'userpage.html', context
)
52 def get_podcast_lists(self
, user
):
53 return PodcastList
.objects
.filter(user
=user
)
56 def get_subscriptions(self
, user
):
57 subscriptions
= [sp
.podcast
for sp
in get_subscribed_podcasts(user
)]
58 return PodcastPercentageListenedSorter(subscriptions
, user
)