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
18 logger
= logging
.getLogger(__name__
)
21 class FavoritesPublic(View
):
25 @method_decorator(vary_on_cookie
)
26 @method_decorator(cache_control(private
=True))
27 @method_decorator(login_required
)
28 def post(self
, request
):
31 request
.user
.profile
.favorite_feeds_token
= ""
32 request
.user
.profile
.save()
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
):
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
58 "share/favorites.html",
59 {"feed_token": token
, "site": site
, "podcast": podcast
},
63 class PublicSubscriptions(View
):
67 @method_decorator(vary_on_cookie
)
68 @method_decorator(cache_control(private
=True))
69 @method_decorator(login_required
)
70 def post(self
, request
):
73 user
.profile
.subscriptions_token
= ""
75 user
.profile
.create_new_token("subscriptions_token")
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
):
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"))
106 def overview(request
):
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()
120 "share/overview.html",
123 "subscriptions_token": subscriptions_token
,
124 "userpage_token": userpage_token
,
125 "favfeed_token": favfeed_token
,
126 "favfeed_podcast": favfeed_podcast
,
132 def set_token_public(request
, token_name
, public
):
137 setattr(user
.profile
, token_name
, "")
141 user
.profile
.create_new_token(token_name
)
144 return HttpResponseRedirect(reverse("share"))