add twitter, about text to user profile
[mygpo.git] / mygpo / share / userpage.py
blobf2c46f93d40fce1f3e13553ebc2e9f38007b5eb7
1 from datetime import datetime, timedelta
3 import gevent
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)
34 context_funs = {
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),
45 context = {
46 'page_user': user,
47 'site': site.domain,
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)