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
8 from django
.contrib
.sites
.models
import RequestSite
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
19 from mygpo
.db
.couchdb
.podcastlist
import podcastlists_for_user
23 class UserpageView(GeventView
):
24 """ Shows the profile page for a user """
26 @method_decorator(requires_token(token_name
='userpage_token',
27 denied_template
='userpage-denied.html'))
28 def get(self
, request
, username
):
30 user
= User
.get_user(username
)
31 month_ago
= datetime
.today() - timedelta(days
=31)
32 site
= RequestSite(request
)
35 'lists': gevent
.spawn(self
.get_podcast_lists
, user
),
36 'subscriptions': gevent
.spawn(self
.get_subscriptions
, user
),
37 'recent_episodes': gevent
.spawn(self
.get_recent_episodes
, user
),
38 'seconds_played_total': gevent
.spawn(self
.get_seconds_played_total
, user
),
39 'seconds_played_month': gevent
.spawn(self
.get_seconds_played_since
, user
, month_ago
),
40 'favorite_episodes': gevent
.spawn(self
.get_favorite_episodes
, user
),
41 'num_played_episodes_total': gevent
.spawn(self
.get_played_episodes_total
, user
),
42 'num_played_episodes_month': gevent
.spawn(self
.get_played_episodes_since
, user
, month_ago
),
48 'subscriptions_token': user
.get_token('subscriptions_token'),
49 'favorite_feeds_token': user
.get_token('favorite_feeds_token'),
51 context
.update(self
.get_context(context_funs
))
53 return render(request
, 'userpage.html', context
)
56 def get_podcast_lists(self
, user
):
57 return podcastlists_for_user(user
._id
)
60 def get_subscriptions(self
, user
):
61 subscriptions
= user
.get_subscribed_podcasts()
62 return PodcastPercentageListenedSorter(subscriptions
, user
)
65 def get_recent_episodes(self
, user
):
66 recent_episodes
= get_latest_episodes(user
)
67 return fetch_episode_data(recent_episodes
)
70 def get_seconds_played_total(self
, user
):
71 return get_seconds_played(user
)
74 def get_seconds_played_since(self
, user
, since
):
75 return get_seconds_played(user
, since
=since
)
78 def get_favorite_episodes(self
, user
):
79 favorite_episodes
= favorite_episodes_for_user(user
)
80 return fetch_episode_data(favorite_episodes
)
83 def get_played_episodes_total(self
, user
):
84 return get_num_played_episodes(user
)
87 def get_played_episodes_since(self
, user
, since
):
88 return get_num_played_episodes(user
, since
=since
)