Merge pull request #793 from gpodder/remove-advertise
[mygpo.git] / mygpo / share / views.py
blob149adce2d4741c3a278bc7f5c1b4f245c2c1ae55
1 from django.urls import reverse
2 from django.http import HttpResponseRedirect
3 from django.shortcuts import render
4 from django.contrib.sites.requests import RequestSite
5 from django.contrib.auth.decorators import login_required
6 from django.views.decorators.vary import vary_on_cookie
7 from django.views.decorators.cache import cache_control
8 from django.views import View
9 from django.utils.decorators import method_decorator
11 from mygpo.podcasts.models import Podcast
12 from mygpo.publisher.models import PublishedPodcast
13 from mygpo.userfeeds.feeds import FavoriteFeed
14 from mygpo.data.feeddownloader import PodcastUpdater
16 import logging
18 logger = logging.getLogger(__name__)
21 class FavoritesPublic(View):
23 public = True
25 @method_decorator(vary_on_cookie)
26 @method_decorator(cache_control(private=True))
27 @method_decorator(login_required)
28 def post(self, request):
30 if self.public:
31 request.user.profile.favorite_feeds_token = ""
32 request.user.profile.save()
34 else:
35 request.user.profile.create_new_token("favorite_feeds_token")
36 request.user.profile.save()
38 return HttpResponseRedirect(reverse("share-favorites"))
41 class ShareFavorites(View):
42 @method_decorator(vary_on_cookie)
43 @method_decorator(cache_control(private=True))
44 @method_decorator(login_required)
45 def get(self, request):
46 user = request.user
48 favfeed = FavoriteFeed(user)
49 site = RequestSite(request)
50 feed_url = favfeed.get_public_url(site.domain)
52 podcast = Podcast.objects.filter(urls__url=feed_url).first()
54 token = user.profile.favorite_feeds_token
56 return render(
57 request,
58 "share/favorites.html",
59 {"feed_token": token, "site": site, "podcast": podcast},
63 class PublicSubscriptions(View):
65 public = True
67 @method_decorator(vary_on_cookie)
68 @method_decorator(cache_control(private=True))
69 @method_decorator(login_required)
70 def post(self, request):
72 if self.public:
73 user.profile.subscriptions_token = ""
74 else:
75 user.profile.create_new_token("subscriptions_token")
77 user.profile.save()
79 return HttpResponseRedirect(reverse("share"))
82 class FavoritesFeedCreateEntry(View):
83 """Creates a Podcast object for the user's favorites feed"""
85 @method_decorator(vary_on_cookie)
86 @method_decorator(cache_control(private=True))
87 @method_decorator(login_required)
88 def post(self, request):
89 user = request.user
91 feed = FavoriteFeed(user)
92 site = RequestSite(request)
93 feed_url = feed.get_public_url(site.domain)
95 podcast = Podcast.objects.get_or_create_for_url(feed_url).object
97 PublishedPodcast.objects.get_or_create(podcast=podcast, publisher=user)
99 updater = PodcastUpdater(feed_url)
100 updater.update_podcast()
102 return HttpResponseRedirect(reverse("share-favorites"))
105 @login_required
106 def overview(request):
107 user = request.user
108 site = RequestSite(request)
110 subscriptions_token = user.profile.get_token("subscriptions_token")
111 userpage_token = user.profile.get_token("userpage_token")
112 favfeed_token = user.profile.get_token("favorite_feeds_token")
114 favfeed = FavoriteFeed(user)
115 favfeed_url = favfeed.get_public_url(site.domain)
116 favfeed_podcast = Podcast.objects.filter(urls__url=favfeed_url).first()
118 return render(
119 request,
120 "share/overview.html",
122 "site": site,
123 "subscriptions_token": subscriptions_token,
124 "userpage_token": userpage_token,
125 "favfeed_token": favfeed_token,
126 "favfeed_podcast": favfeed_podcast,
131 @login_required
132 def set_token_public(request, token_name, public):
134 user = request.user
136 if public:
137 setattr(user.profile, token_name, "")
138 user.profile.save()
140 else:
141 user.profile.create_new_token(token_name)
142 user.profile.save()
144 return HttpResponseRedirect(reverse("share"))