1 from datetime
import datetime
, timedelta
5 from django
.shortcuts
import render
6 from django
.views
.generic
.base
import View
7 from django
.utils
.decorators
import method_decorator
9 from mygpo
.share
.models
import PodcastList
10 from mygpo
.users
.models
import User
11 from mygpo
.users
.models
import HistoryEntry
12 from mygpo
.decorators
import requires_token
13 from mygpo
.web
.utils
import fetch_episode_data
14 from mygpo
.users
.subscriptions
import PodcastPercentageListenedSorter
15 from mygpo
.web
.views
import GeventView
16 from mygpo
.db
.couchdb
.episode
import favorite_episodes_for_user
17 from mygpo
.db
.couchdb
.user
import get_latest_episodes
, \
18 get_num_played_episodes
, get_seconds_played
22 class UserpageView(GeventView
):
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
= User
.get_user(username
)
30 month_ago
= datetime
.today() - timedelta(days
=31)
33 'lists': gevent
.spawn(self
.get_podcast_lists
, user
),
34 'subscriptions': gevent
.spawn(self
.get_subscriptions
, user
),
35 'recent_episodes': gevent
.spawn(self
.get_recent_episodes
, user
),
36 'seconds_played_total': gevent
.spawn(self
.get_seconds_played_total
, user
),
37 'seconds_played_month': gevent
.spawn(self
.get_seconds_played_since
, user
, month_ago
),
38 'favorite_episodes': gevent
.spawn(self
.get_favorite_episodes
, user
),
39 'num_played_episodes_total': gevent
.spawn(self
.get_played_episodes_total
, user
),
40 'num_played_episodes_month': gevent
.spawn(self
.get_played_episodes_since
, user
, month_ago
),
45 'subscriptions_token': user
.get_token('subscriptions_token'),
46 'favorite_feeds_token': user
.get_token('favorite_feeds_token'),
48 context
.update(self
.get_context(context_funs
))
50 return render(request
, 'userpage.html', context
)
53 def get_podcast_lists(self
, user
):
54 return list(PodcastList
.for_user(user
._id
))
57 def get_subscriptions(self
, user
):
58 subscriptions
= user
.get_subscribed_podcasts()
59 return PodcastPercentageListenedSorter(subscriptions
, user
)
62 def get_recent_episodes(self
, user
):
63 recent_episodes
= get_latest_episodes(user
)
64 return fetch_episode_data(recent_episodes
)
67 def get_seconds_played_total(self
, user
):
68 return get_seconds_played(user
)
71 def get_seconds_played_since(self
, user
, since
):
72 return get_seconds_played(user
, since
=since
)
75 def get_favorite_episodes(self
, user
):
76 favorite_episodes
= favorite_episodes_for_user(user
)
77 return fetch_episode_data(favorite_episodes
)
80 def get_played_episodes_total(self
, user
):
81 return get_num_played_episodes(user
)
84 def get_played_episodes_since(self
, user
, since
):
85 return get_num_played_episodes(user
, since
=since
)