1 from django
.shortcuts
import render_to_response
, get_object_or_404
2 from django
.template
import RequestContext
3 from django
.http
import HttpResponse
, HttpResponseRedirect
, HttpResponseForbidden
4 from mygpo
.api
.models
import Podcast
, Episode
, EpisodeAction
, PodcastGroup
5 from django
.contrib
.auth
.decorators
import login_required
6 from mygpo
.publisher
.models
import PodcastPublisher
7 from mygpo
.publisher
.auth
import require_publisher
, is_publisher
8 from mygpo
.publisher
.forms
import SearchPodcastForm
, EpisodeForm
, PodcastForm
9 from mygpo
.publisher
.utils
import listener_data
, episode_listener_data
, check_publisher_permission
, episode_list
, subscriber_data
, device_stats
, episode_heatmap
10 from django
.contrib
.sites
.models
import Site
11 from mygpo
.data
.feeddownloader
import update_podcasts
12 from mygpo
.decorators
import requires_token
, allowed_methods
13 from mygpo
.web
.models
import SecurityToken
14 from django
.contrib
.auth
.models
import User
18 if is_publisher(request
.user
):
19 podcasts
= [x
.podcast
for x
in PodcastPublisher
.objects
.filter(user
=request
.user
)]
20 form
= SearchPodcastForm()
21 return render_to_response('publisher/home.html', {
24 }, context_instance
=RequestContext(request
))
27 site
= Site
.objects
.get_current()
28 return render_to_response('publisher/info.html', {
30 }, context_instance
=RequestContext(request
))
34 def search_podcast(request
):
35 form
= SearchPodcastForm(request
.POST
)
37 url
= form
.cleaned_data
['url']
38 p
= get_object_or_404(Podcast
, url
=url
)
40 return HttpResponseRedirect('/publisher/podcast/%d' % p
.id)
43 return HttpResponseRedirect('/publisher/')
46 @allowed_methods(['GET', 'POST'])
47 def podcast(request
, id):
48 p
= get_object_or_404(Podcast
, pk
=id)
50 if not check_publisher_permission(request
.user
, p
):
51 return HttpResponseForbidden()
53 timeline_data
= listener_data([p
])
54 subscription_data
= subscriber_data([p
])
55 device_data
= device_stats([p
])
57 if request
.method
== 'POST':
58 form
= PodcastForm(request
.POST
, instance
=p
)
62 elif request
.method
== 'GET':
63 form
= PodcastForm(instance
=p
)
65 update_token
, c
= SecurityToken
.objects
.get_or_create(user
=request
.user
, object='published_feeds', action
='update')
67 if 'new_token' in request
.GET
:
68 update_token
.random_token()
71 site
= Site
.objects
.get_current()
73 return render_to_response('publisher/podcast.html', {
77 'timeline_data': timeline_data
,
78 'subscriber_data': subscription_data
,
79 'device_data': device_data
,
80 'update_token': update_token
,
81 }, context_instance
=RequestContext(request
))
85 def group(request
, group_id
):
86 g
= get_object_or_404(PodcastGroup
, id=group_id
)
88 # users need to have publisher access for at least one of the group's podcasts
89 if not any([check_publisher_permission(request
.user
, p
) for p
in g
.podcasts()]):
90 return HttpResponseForbidden()
93 timeline_data
= listener_data(g
.podcasts())
94 subscription_data
= subscriber_data(g
.podcasts())
95 device_data
= device_stats(g
.podcasts())
97 return render_to_response('publisher/group.html', {
99 'timeline_data': timeline_data
,
100 'subscriber_data': subscription_data
,
101 'device_data': device_data
,
102 }, context_instance
=RequestContext(request
))
106 def update_podcast(request
, id):
107 p
= get_object_or_404(Podcast
, pk
=id)
109 if not check_publisher_permission(request
.user
, p
):
110 return HttpResponseForbidden()
112 update_podcasts( [p
] )
114 return HttpResponseRedirect('/publisher/podcast/%s' % id)
117 @requires_token(object='published_feeds', action
='update')
118 def update_published_podcasts(request
, username
):
119 user
= get_object_or_404(User
, username
=username
)
121 published_podcasts
= [p
.podcast
for p
in PodcastPublisher
.objects
.filter(user
=user
)]
122 update_podcasts(published_podcasts
)
124 return HttpResponse('Updated:\n' + '\n'.join([p
.url
for p
in published_podcasts
]), mimetype
='text/plain')
128 def episodes(request
, id):
129 p
= get_object_or_404(Podcast
, pk
=id)
131 if not check_publisher_permission(request
.user
, p
):
132 return HttpResponseForbidden()
134 episodes
= episode_list(p
)
135 max_listeners
= max([x
.listeners
for x
in episodes
]) if len(episodes
) else 0
137 return render_to_response('publisher/episodes.html', {
139 'episodes': episodes
,
140 'max_listeners': max_listeners
141 }, context_instance
=RequestContext(request
))
145 @allowed_methods(['GET', 'POST'])
146 def episode(request
, id):
147 e
= get_object_or_404(Episode
, pk
=id)
149 if not check_publisher_permission(request
.user
, e
.podcast
):
150 return HttpResponseForbidden()
152 if request
.method
== 'POST':
153 form
= EpisodeForm(request
.POST
, instance
=e
)
157 elif request
.method
== 'GET':
158 form
= EpisodeForm(instance
=e
)
160 timeline_data
= episode_listener_data(e
)
161 heatmap_data
, part_length
= episode_heatmap(e
)
163 return render_to_response('publisher/episode.html', {
166 'timeline_data': timeline_data
,
167 'heatmap_data': heatmap_data
if any([x
> 1 for x
in heatmap_data
]) else None,
168 'heatmap_part_length': part_length
,
169 }, context_instance
=RequestContext(request
))
173 current_site
= Site
.objects
.get_current()
174 return render_to_response('link.html', {
176 }, context_instance
=RequestContext(request
))
179 def advertise(request
):
180 site
= Site
.objects
.get_current()
181 return render_to_response('publisher/advertise.html', {
183 }, context_instance
=RequestContext(request
))