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
5 from mygpo
.api
.constants
import DEVICE_TYPES
6 from django
.contrib
.auth
.decorators
import login_required
7 from mygpo
.publisher
.models
import PodcastPublisher
8 from mygpo
.publisher
.auth
import require_publisher
, is_publisher
9 from mygpo
.publisher
.forms
import SearchPodcastForm
, EpisodeForm
, PodcastForm
10 from mygpo
.publisher
.utils
import listener_data
, check_publisher_permission
, episode_list
, subscriber_data
11 from django
.contrib
.sites
.models
import Site
12 from mygpo
.data
.feeddownloader
import update_podcasts
16 if is_publisher(request
.user
):
17 podcasts
= [x
.podcast
for x
in PodcastPublisher
.objects
.filter(user
=request
.user
)]
18 form
= SearchPodcastForm()
19 return render_to_response('publisher/home.html', {
22 }, context_instance
=RequestContext(request
))
25 site
= Site
.objects
.get_current()
26 return render_to_response('publisher/info.html', {
28 }, context_instance
=RequestContext(request
))
32 def search_podcast(request
):
33 form
= SearchPodcastForm(request
.POST
)
35 url
= form
.cleaned_data
['url']
36 p
= get_object_or_404(Podcast
, url
=url
)
38 return HttpResponseRedirect('/publisher/podcast/%d' % p
.id)
41 return HttpResponseRedirect('/publisher/')
44 def podcast(request
, id):
45 p
= get_object_or_404(Podcast
, pk
=id)
47 if not check_publisher_permission(request
.user
, p
):
48 return HttpResponseForbidden()
50 timeline_data
= listener_data(p
)
51 subscription_data
= subscriber_data(p
)
52 device_data
= device_stats(p
)
54 if request
.method
== 'POST':
55 form
= PodcastForm(request
.POST
, instance
=p
)
59 elif request
.method
== 'GET':
60 form
= PodcastForm(instance
=p
)
62 return render_to_response('publisher/podcast.html', {
65 'timeline_data': timeline_data
,
66 'subscriber_data': subscription_data
,
67 'device_data': device_data
,
68 }, context_instance
=RequestContext(request
))
72 def update_podcast(request
, id):
73 p
= get_object_or_404(Podcast
, pk
=id)
75 if not check_publisher_permission(request
.user
, p
):
76 return HttpResponseForbidden()
78 update_podcasts( [p
] )
80 return HttpResponseRedirect('/publisher/podcast/%s' % id)
84 def episodes(request
, id):
85 p
= get_object_or_404(Podcast
, pk
=id)
87 if not check_publisher_permission(request
.user
, p
):
88 return HttpResponseForbidden()
90 episodes
= episode_list(p
)
91 max_listeners
= max([x
.listeners
for x
in episodes
]) if len(episodes
) else 0
93 return render_to_response('publisher/episodes.html', {
96 'max_listeners': max_listeners
97 }, context_instance
=RequestContext(request
))
101 def episode(request
, id):
102 e
= get_object_or_404(Episode
, pk
=id)
104 if not check_publisher_permission(request
.user
, e
.podcast
):
105 return HttpResponseForbidden()
107 if request
.method
== 'POST':
108 form
= EpisodeForm(request
.POST
, instance
=e
)
112 elif request
.method
== 'GET':
113 form
= EpisodeForm(instance
=e
)
115 return render_to_response('publisher/episode.html', {
118 }, context_instance
=RequestContext(request
))
121 def device_stats(podcast
):
123 for type in DEVICE_TYPES
:
124 c
= EpisodeAction
.objects
.filter(episode__podcast
=podcast
, device__type
=type[0]).values('user_id').distinct().count()
132 current_site
= Site
.objects
.get_current()
133 return render_to_response('link.html', {
135 }, context_instance
=RequestContext(request
))