Remove broken Flattr functionality
[mygpo.git] / mygpo / web / views.py
blob07bd666068743fec0b23f6b4f58972d249ed04dc
1 import sys
2 from collections import defaultdict
3 from datetime import datetime, timedelta
5 from django.urls import reverse
6 from django.http import HttpResponseRedirect
7 from django.contrib import messages
8 from django.utils.translation import ugettext as _
9 from django.contrib.auth.decorators import login_required
10 from django.shortcuts import render
11 from django.contrib.sites.requests import RequestSite
12 from django.views import View
13 from django.views.decorators.vary import vary_on_cookie
14 from django.views.decorators.cache import never_cache, cache_control
16 from mygpo.podcasts.models import Podcast, Episode, Tag
17 from mygpo.users.models import HistoryEntry, Client
18 from mygpo.subscriptions import get_subscribed_podcasts
19 from mygpo.web.utils import process_lang_params
20 from mygpo.utils import parse_range
21 from mygpo.podcastlists.models import PodcastList
22 from mygpo.favorites.models import FavoriteEpisode
23 #from mygpo.web.views.podcast import slug_id_decorator
24 from mygpo.publisher.models import PublishedPodcast
27 @vary_on_cookie
28 @cache_control(private=True)
29 def home(request):
30 if request.user.is_authenticated:
31 return dashboard(request)
32 else:
33 return welcome(request)
36 @vary_on_cookie
37 @cache_control(private=True)
38 def welcome(request):
39 current_site = RequestSite(request)
41 lang = process_lang_params(request)
43 toplist = Podcast.objects.all().toplist(lang)
45 return render(request, 'home.html', {
46 'url': current_site,
47 'toplist': toplist,
51 @vary_on_cookie
52 @cache_control(private=True)
53 @login_required
54 def dashboard(request, episode_count=10):
56 subscribed_podcasts = get_subscribed_podcasts(request.user)
57 subscribed_podcasts = [sp.podcast for sp in subscribed_podcasts]
59 podcast_ad = Podcast.objects.get_advertised_podcast()
61 site = RequestSite(request)
63 checklist = []
65 if request.user.client_set.count():
66 checklist.append('devices')
68 if subscribed_podcasts:
69 checklist.append('subscriptions')
71 if FavoriteEpisode.objects.filter(user=request.user).exists():
72 checklist.append('favorites')
74 if not request.user.profile.get_token('subscriptions_token'):
75 checklist.append('share')
77 if not request.user.profile.get_token('favorite_feeds_token'):
78 checklist.append('share-favorites')
80 if not request.user.profile.get_token('userpage_token'):
81 checklist.append('userpage')
83 if Tag.objects.filter(user=request.user).exists():
84 checklist.append('tags')
86 if PodcastList.objects.filter(user=request.user).exists():
87 checklist.append('lists')
89 if PublishedPodcast.objects.filter(publisher=request.user).exists():
90 checklist.append('publish')
92 tomorrow = datetime.today() + timedelta(days=1)
94 newest_episodes = Episode.objects.filter(podcast__in=subscribed_podcasts,
95 released__lt=tomorrow).\
96 select_related('podcast').\
97 prefetch_related('slugs',
98 'podcast__slugs').\
99 order_by('-released')[:episode_count]
102 # we only show the "install reader" link in firefox, because we don't know
103 # yet how/if this works in other browsers.
104 # hints appreciated at https://bugs.gpodder.org/show_bug.cgi?id=58
105 show_install_reader = \
106 'firefox' in request.META.get('HTTP_USER_AGENT', '').lower()
108 random_podcast = Podcast.objects.all().random().prefetch_related('slugs').first()
110 return render(request, 'dashboard.html', {
111 'user': request.user,
112 'subscribed_podcasts': subscribed_podcasts,
113 'newest_episodes': list(newest_episodes),
114 'random_podcast': random_podcast,
115 'checklist': checklist,
116 'site': site,
117 'show_install_reader': show_install_reader,
118 'podcast_ad': podcast_ad,
122 @vary_on_cookie
123 @cache_control(private=True)
124 @login_required
125 def mytags(request):
126 tags_tag = defaultdict(list)
128 user = request.user
130 tags = Tag.objects.filter(source=Tag.USER, user=user).order_by('tag')
131 for tag in tags:
132 tags_tag[tag.tag].append(tag.content_object)
134 return render(request, 'mytags.html', {
135 'tags_tag': dict(tags_tag.items()),
139 @never_cache
140 def csrf_failure(request, reason=""):
141 site = RequestSite(request)
142 return render(request, 'csrf.html', {
143 'site': site,
144 'method': request.method,
145 'referer': request.META.get('HTTP_REFERER', _('another site')),
146 'path': request.path,
147 'get': request.GET,
148 'post': request.POST,