1 from django
.contrib
.auth
.decorators
import login_required
2 from django
.contrib
.auth
.models
import User
3 from django
.contrib
.sites
.models
import Site
4 from django
.shortcuts
import get_object_or_404
, render_to_response
5 from django
.template
import RequestContext
7 from mygpo
.decorators
import manual_gc
, requires_token
8 from mygpo
.api
.models
import Device
, Subscription
, Episode
9 from mygpo
.api
import backend
, simple
10 from mygpo
.web
.models
import SecurityToken
16 current_site
= Site
.objects
.get_current()
17 subscriptionlist
= create_subscriptionlist(request
)
18 return render_to_response('subscriptions.html', {
19 'subscriptionlist': subscriptionlist
,
21 }, context_instance
=RequestContext(request
))
26 def download_all(request
):
27 podcasts
= backend
.get_all_subscriptions(request
.user
)
28 response
= simple
.format_podcast_list(podcasts
, 'opml', request
.user
.username
)
29 response
['Content-Disposition'] = 'attachment; filename=all-subscriptions.opml'
34 @requires_token(object='subscriptions', action
='r', denied_template
='user_subscriptions_denied.html')
35 def for_user(request
, username
):
36 user
= get_object_or_404(User
, username
=username
)
37 public_subscriptions
= Subscription
.objects
.public_subscriptions(users
=[user
])
38 token
= SecurityToken
.objects
.get(object='subscriptions', action
='r', user__username
=username
)
40 return render_to_response('user_subscriptions.html', {
41 'subscriptions': public_subscriptions
,
44 }, context_instance
=RequestContext(request
))
46 @requires_token(object='subscriptions', action
='r')
47 def for_user_opml(request
, username
):
48 user
= get_object_or_404(User
, username
=username
)
49 public_subscriptions
= Subscription
.objects
.public_subscriptions(users
=[user
])
51 response
= render_to_response('user_subscriptions.opml', {
52 'subscriptions': public_subscriptions
,
54 }, context_instance
=RequestContext(request
))
55 response
['Content-Disposition'] = 'attachment; filename=%s-subscriptions.opml' % username
59 def create_subscriptionlist(request
):
60 #sync all devices first
61 for d
in Device
.objects
.filter(user
=request
.user
):
64 subscriptions
= Subscription
.objects
.filter(user
=request
.user
)
67 for s
in subscriptions
:
69 l
[s
.podcast
]['devices'].append(s
.device
)
71 e
= Episode
.objects
.filter(podcast
=s
.podcast
, timestamp__isnull
=False).order_by('-timestamp')
72 episode
= e
[0] if e
.count() > 0 else None
74 l
[s
.podcast
] = {'podcast': s
.podcast
, 'episode': episode
, 'devices': devices
}