Created basic working client UI using ExtJS.
[~jspiros/reader.git] / views.py
1 from .models import Feed, Entry, Subscription, UserEntry
2 from django.shortcuts import render_to_response
3 from django.template import RequestContext
4 from django.http import HttpResponse
5 from django.contrib.auth.decorators import login_required
6 from django.utils import simplejson as json
7 from django.db.models import Q
8 from .utils import add_feed, unread_count
9
10
11 @login_required
12 def lib(request):
13         return render_to_response('reader/lib.js', context_instance=RequestContext(request), mimetype='text/javascript')
14
15
16 @login_required
17 def home(request):
18         return render_to_response('reader/home.html', {
19                 'entries': Entry.objects.filter(feed__subscriptions__user=request.user),
20                 'feeds': Feed.objects.filter(subscriptions__user=request.user),
21         }, context_instance=RequestContext(request))
22
23
24 @login_required
25 def get_subscriptions(request):
26         root = []
27         for subscription in Subscription.objects.filter(user=request.user):
28                 root.append({
29                         'id': subscription.pk,
30                         'type': 'feed',
31                         'title': subscription.title,
32                         'unread': unread_count(request.user, feed=subscription.feed)
33                 })
34         root.append({
35                 'id': -2,
36                 'type': 'all',
37                 'title': 'All Entries',
38                 'unread': unread_count(request.user),
39         })
40         root.append({
41                 'id': -1,
42                 'type': 'unread',
43                 'title': 'Unread Entries',
44                 'unread': unread_count(request.user),
45         })
46         root.sort(key=lambda sub: sub['id'])
47         
48         return HttpResponse(json.dumps({'len': len(root), 'root': root}), mimetype='application/json')
49
50
51 @login_required
52 def add_subscription(request):
53         try:
54                 url = request.POST['url']
55                 add_feed(url, user=request.user)
56                 return HttpResponse()
57         except:
58                 raise Http404
59
60
61 @login_required
62 def get_entries(request):
63         if 'subscription_id' in request.POST:
64                 subscription_id = str(request.POST['subscription_id'])
65                 if subscription_id == '-2':
66                         entries = Entry.objects.filter(feed__subscriptions__user=request.user)
67                 elif subscription_id == '-1':
68                         entries = Entry.objects.filter(feed__subscriptions__user=request.user).exclude(userentries__user=request.user, userentries__read=True)
69                 elif subscription_id.startswith('tag:'):
70                         pass
71                 else:
72                         try:
73                                 subscription = Subscription.objects.get(user=request.user, id=subscription_id)
74                                 entries = subscription.feed.entries.all()
75                         except Subscription.DoesNotExist:
76                                 raise Http404
77         else:
78                 raise Http404
79         
80         root = []
81         for entry in entries:
82                 root.append({
83                         'id': entry.pk,
84                         'title': entry.title,
85                         'date': entry.published.isoformat(),
86                         'content': entry.content if entry.content else entry.summary,
87                         'link': entry.link if entry.link else entry.feed.link,
88                 })
89         root.sort(key=lambda entry: entry['date'])
90         root.reverse()
91         
92         return HttpResponse(json.dumps({'len': len(root), 'root': root}), mimetype='application/json')
93
94
95 @login_required
96 def read_entry(request):
97         if 'entry_id' in request.POST:
98                 entry = Entry.objects.get(id=request.POST['entry_id'])
99                 userentry, created = UserEntry.objects.get_or_create(entry=entry, user=request.user, defaults={ 'read': True })
100                 if not created:
101                         userentry.read = True
102                         userentry.save()
103         else:
104                 raise Http404
105         
106         return HttpResponse()